Android MaoZhuaWeiBo 好友动态信息列表数据抓取 -3
前面2篇把大致的开发说的几乎相同了,接下来说说粉丝动态消息列表或时间线数据的抓取与解析显示,我将他所有写在了一个
类里。并以封装类对象的形式存储数据。以下看看基本的服务代码:
粉丝动态消息列表数据抓取:
package com.neweriweibo.service;
/**
* 用户消息列表
* @author Engineer-Jsp
* @date 2014.10.29
* */
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList; import org.json.JSONArray;
import org.json.JSONObject; import com.neweriweibo.model.UserWeibo;
import com.neweriweibo.utils.TencentAPI; import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
public class WeiBoService extends Service { private ArrayList<UserWeibo> data ;
private String access_token;
private String openid;
private String openkey;
private String getURL;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
data = new ArrayList<UserWeibo>() ;
// 首选项取数据
access_token = PreferenceManager.getDefaultSharedPreferences(this).getString("access_token", "access_token");
openid = PreferenceManager.getDefaultSharedPreferences(this).getString("openid", "openid");
openkey = PreferenceManager.getDefaultSharedPreferences(this).getString("openkey", "openkey");
// 拼接地址,赋值变量
StringBuffer buff = new StringBuffer(TencentAPI.userWeiBo) ;
buff.append("? ").append("format=json").append("&pageflag=0")
.append("&reqnum=5").append("&lastid=0").append("&type=3")
.append("&contenttype=0x80").append("&oauth_consumer_key="+TencentAPI.client_id)
.append("&access_token="+access_token)
.append("&openid="+openid)
.append("&clientip=CLIENTIP")
.append("&oauth_version=2.a&scope=all");
getURL = buff.toString();
Log.d("获取微博消息列表地址:", getURL);
new Thread(new Runnable() {
@Override
public void run() {
/*
* http://open.t.qq.com/api/statuses/broadcast_timeline
* ?format=json
* &pageflag=0
* &pagetime=0
* &reqnum=5
* &lastid=0
* &type=3
* &contenttype=0x80
* &oauth_consumer_key=801506473
* &access_token=789a7d5284d0c3e608f8e384c993d04b
* &openid=0027BC08DB5B45D7461E9A0F16F527E7
* &clientip=CLIENTIP
* &oauth_version=2.a&scope=all
*
*
*/
try {
getData(getURL) ;
} catch (Exception e) {
e.printStackTrace();
}
} }).start() ;
}
public void getData(String path)throws Exception{ UserWeibo userweibo = null ;
URL _url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
conn.setConnectTimeout(8000);
conn.setReadTimeout(8000);
conn.setDoOutput(false);
conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream in = conn.getInputStream();
InputStreamReader reader = new InputStreamReader(in, "utf-8");
BufferedReader buffere = new BufferedReader(reader);
StringBuilder builder = new StringBuilder();
String line = null;
while (null != (line = buffere.readLine())) {
builder.append(line);
}
String json = builder.toString() ;
JSONObject root = new JSONObject(json).getJSONObject("data") ;
Log.d("获取到的微博消息列表:", root.toString());
String totalnum = root.getString("totalnum") ; //获取条数
JSONArray arrayinfo = root.getJSONArray("info");
Log.d("详细消息内容数据:", arrayinfo.toString());
//获取广播的条数
for(int i=0 ;i<arrayinfo.length() ;i++){ userweibo = new UserWeibo() ;
JSONObject object = arrayinfo.getJSONObject(i) ; String date = object.getString("timestamp") ; //获取一个长整型的时间 :1003323
String from = object.getString("from") ; //获取平台
String location = object.getString("location") ; //获取地址
String name = object.getString("cfloat656805") ; //获取名称
String origtext = object.getString("origtext") ; //获取内容 userweibo.setForm(from) ;
userweibo.setLocation(location) ;
userweibo.setOrigtext(origtext) ;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
} }
UserWeiBO:
package com.neweriweibo.model; import android.os.Parcel;
import android.os.Parcelable; /**
* 用户个人的微博
* @author Engineer-Jsp
* @date 2014.10.28
*
*/
public class UserWeibo implements Parcelable{ private String form ; //从哪里发送的消息
private String location ; // 地址
private String name ; //名字
private String origtext ; //发送微博的信息
private String timestamp ; // 发表的时间
private String number ; // 广播的条数 public UserWeibo() {
super();
// TODO Auto-generated constructor stub
}
public UserWeibo(String form, String location, String name,
String origtext, String timestamp,String number ) {
super();
this.form = form;
this.location = location;
this.name = name;
this.origtext = origtext;
this.timestamp = timestamp;
this.number = number ; } public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getForm() {
return form;
}
public void setForm(String form) {
this.form = form;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrigtext() {
return origtext;
}
public void setOrigtext(String origtext) {
this.origtext = origtext;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
} public static final Parcelable.Creator<UserWeibo> CREATOR = new Parcelable.Creator<UserWeibo>() { @Override
public UserWeibo createFromParcel(Parcel source) {
// TODO Auto-generated method stub
UserWeibo userweibo = new UserWeibo() ;
userweibo.form = source.readString() ;
userweibo.location = source.readString() ;
userweibo.name = source.readString() ;
userweibo.origtext = source.readString() ;
userweibo.timestamp = source.readString() ;
userweibo.number = source.readString() ; return userweibo;
} @Override
public UserWeibo[] newArray(int size) {
// TODO Auto-generated method stub
return new UserWeibo[size];
}
}; @Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub dest.writeString(form);
dest.writeString(location);
dest.writeString(name);
dest.writeString(origtext);
dest.writeString(timestamp);
dest.writeString(number) ; } }
UserWeiBoInfo:
package com.neweriweibo.model;
/**
* 接收个人微博信息
* @author Engineer-Jsp
* @date 2014.10.28
*/
import android.os.Parcel;
import android.os.Parcelable;
public class UserWeiBiInfo implements Parcelable{ private String id ; //微博id
private String name ; //微博人的名字
private String origtext ; //发送的信息
private String headimg;//头像 public String getHeadimg() {
return headimg;
}
public void setHeadimg(String headimg) {
this.headimg = headimg;
}
public UserWeiBiInfo() {
super();
}
public UserWeiBiInfo(String id, String name, String origtext,String headimg) {
super();
this.id = id;
this.name = name;
this.origtext = origtext;
this.headimg = headimg;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrigtext() {
return origtext;
} public void setOrigtext(String origtext) {
this.origtext = origtext;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) { dest.writeString(id);
dest.writeString(name);
dest.writeString(origtext);
dest.writeString(headimg);
} public static final Parcelable.Creator<UserWeiBiInfo> CREATOR = new Creator<UserWeiBiInfo>() { @Override
public UserWeiBiInfo createFromParcel(Parcel source) {
UserWeiBiInfo userWeiBiInfo = new UserWeiBiInfo() ; userWeiBiInfo.id = source.readString() ;
userWeiBiInfo.name = source.readString() ;
userWeiBiInfo.origtext = source.readString() ;
userWeiBiInfo.headimg = source.readString(); return userWeiBiInfo;
} @Override
public UserWeiBiInfo[] newArray(int size) {
return new UserWeiBiInfo[size];
}
}; @Override
public String toString() {
return "UserWeiBiInfo [帐号=" + id + ", 昵称=" + name + ", 微博消息="
+ origtext + ",头像地址="+headimg+"]";
}
}
界面效果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanNwcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
标题菜单:
转发、赞、评论功能都没有拓展。有兴趣的能够继续做下去,跟着API写就是了,不难~~
Android MaoZhuaWeiBo 好友动态信息列表数据抓取 -3的更多相关文章
- [nodejs,expressjs,angularjs2] LOL英雄列表数据抓取及查询显示应用
新手练习,尝试使用angularjs2 [angularjs2 数据绑定,监听数据变化自动修改相应dom值,非常方便好用,但与传统js(jquery)的使用方法会很不同,Dom操作也不太习惯] 应用效 ...
- 网页爬虫--python3.6+selenium+BeautifulSoup实现动态网页的数据抓取,适用于对抓取频率不高的情况
说在前面: 本文主要介绍如何抓取 页面加载后需要通过JS加载的数据和图片 本文是通过python中的selenium(pyhton包) + chrome(谷歌浏览器) + chromedrive(谷歌 ...
- 爬虫---selenium动态网页数据抓取
动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...
- 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如 ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
- 网页数据抓取工具,webscraper 最简单的数据抓取教程,人人都用得上
Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据.例如知乎回答列表.微博热门.微博评论.淘宝.天猫.亚马逊等电商 ...
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
- 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析
Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...
随机推荐
- Farseer.net轻量级开源框架 入门篇:Where条件的终极使用
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用 ...
- 定时器tasktimer
1.web.xml中配置 <servlet> <servlet-name>TaskTimer</servlet-name> <servlet-class> ...
- MFC_1.1 基本知识
如何创建一个MFC项目 选择 MFC 应用程序进行创建,不要使用非英文名 选择对话框风格进行编写 可以通过自定义的设置修改类名 MFC 的基本知识 MFC 是纯面向对象的编程,是 SDK 经过 C++ ...
- jmeter元件的作用域和顺序
jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同. jmeter的test pla ...
- pl/sql编程语言
–pl/sql编程语言–pl/sql编程语言是对sql语言的扩展,是的sql语言具有过程化编程的特性–pl/sql编程语言比一般的过程化编程语言,更加灵活高效–pl/sql编程语言主要用来编写存储过程 ...
- 数据导出为Excel(未完)
更多详细内容 view页面: function Download() { //多个查询条件 dateStart = $("#j_dataTimeStart").datebox(&q ...
- scala学习(2)---option空值处理
https://blog.csdn.net/shadowsama/article/details/78148919 https://www.cnblogs.com/mustone/p/5648914. ...
- 如何快速的vue init 属于自己的vue模板?
相信很多接触过vue的小伙伴非常熟悉了,我们在开启项目之前都需要vue init webpack xx来初始化自己的项目目录.但是在实际开发中我们往往会根据公司要求或者业务的需要会对目录进行局部的调整 ...
- spring源码下载链接
http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html
- linux find-在指定目录下查找文件
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...