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+"]";
	}
}

界面效果:

标题菜单:

转发、赞、评论功能都没有拓展,有兴趣的可以继续做下去,跟着API写就是了,不难~~

时间: 2024-10-16 09:22:49

Android MaoZhuaWeiBo 好友动态信息列表数据抓取 -3的相关文章

爬虫--python3.6+selenium+BeautifulSoup实现动态网页的数据抓取,适用于对抓取频率不高的情况

说在前面: 本文主要介绍如何抓取 页面加载后需要通过JS加载的数据和图片 本文是通过python中的selenium(pyhton包) + chrome(谷歌浏览器) + chromedrive(谷歌浏览器驱动) chrome 和chromdrive建议都下最新版本(参考地址:https://blog.csdn.net/yoyocat915/article/details/80580066) 同样支持无头模式(不需要打开浏览器) 直接上代码:site_url:需要爬取的地址,CHROME_DRI

Fiddler微信公众号列表、浏览/查看量、评论数据抓取

按之前的文章我们已经可以获取app及网页的https/http请求的json数据: https://www.cnblogs.com/i-love-python/p/11505669.html 在此基础上可对微信公众号文章数据进行抓取. 包括列表.浏览查看量.评论数据. 列表数据: 列表数据获取 列表为每个公众号历史数据入口,如图红框中的2部分. 列表数据可通过Fiddler在微信PC客户端获取,获取的数据是json数据里面包含了文章标题,发布时间等信息. 这个列表信息是一个类似下面url的GET

爬虫---selenium动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

第四章爬虫进阶之动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)

摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容.2.复制页面内容的标题.作者.内容.3.存储到文本文件或者excel. 从技术角度来说整个过程

Python 爬虫工程师必学 App数据抓取实战

第1章 课程介绍介绍课程目标.通过课程能学习到的内容.学会这些技能能做什么,对公司业务有哪些帮助,对个人有哪些帮助.介绍目前app数据抓取有哪些困难,面临的挑战,本实战课程会利用哪些工具来解决这些问题,以及本实战课程的特点 ... 1-1 python爬虫工程师必备技能--App数据抓取实战课程导学第2章 windows下搭建开发环境介绍项目开发需要安装的开发软件,讲解了安卓模拟器对比以及夜神安卓模拟器安装.介绍.简单使用和Genymotion安卓模拟器简单分析 介绍App应用抓包工具对比以及f

【RPA实例教学】UIbot——数据抓取功能

UiBot 0.7 版新增加了[数据抓取]功能,这项功能可以方便获取网页中的相似元素,将相似元素的数据采集到数组中,比如各种电商网站(淘宝.京东.拼多多等)的商品分类.商品列表信息(商品名.价格等),或者网页中的各种列表.表格的数据. 本期教学以抓取[京东]网站搜索某个关键字列出的所有商品为例,实现商品列表的数据采集: 准备工作 目前数据抓取功能仅支持 Google Chrome 浏览器,在安装 UiBot 时,会自动安装 Google Chrome 浏览器扩展程序,使 UiBot 能够正常操作

Ajax异步数据抓取

1.简介 1 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览 2 器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有.这是因为requests获取的 3 都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果,这些数据的 4 来源有多种,可能是通过ajax加载的,可能是包含在HTML文档中的,也可能是经过JavaScript和特 5 定算法计算后生成的. 6 对于第一种情况,数据加载是一种异步加

Python爬虫--2019大学排名数据抓取

Python爬虫--2019大学排名数据抓取 准备工作 输入:大学排名URL连接 输出:大学排名信息屏幕输出 所需要用到的库:requests,bs4 思路 获取网页信息 提取网页中的内容并放到数据结构中 利用数据结构展示并输出结果 程序设计 定义函数getHTMLText()获取网页信息 定义函数UnivList()放入数据结构 定义函数printUnivList()输出到屏幕 总体而言: 写出需要自定义的函数,制作出总体的框架 写出主函数框架,实现功能 最后调用函数 步骤 查看url源代码