博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android MaoZhuaWeiBo开发Service抓取个人信息-2
阅读量:6269 次
发布时间:2019-06-22

本文共 10004 字,大约阅读时间需要 33 分钟。

前面把基本的东西讲完了,之后就是数据的获取和解析显示出来了,那接下来我们就负责抓取数据的这块吧,首先我们须要

清单文件中载入服务和活动

加入:、

以下看看用户个人信息的抓取:

package com.neweriweibo.service;/** * 个人信息数据抓取、 * @author Engineer-Jsp * @date 2014.10.28 * */import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import org.json.JSONArray;import org.json.JSONObject;import com.neweriweibo.model.User;import com.neweriweibo.utils.TencentAPI;import android.app.IntentService;import android.content.Intent;import android.os.Bundle;import android.os.Environment;import android.preference.PreferenceManager;import android.util.Log;public class UserService extends IntentService {		public final static String UPDATA = "com.neweriweibo.service.UPDATA";	public final static String NOW_WEATHER = "UserWeiBo" ;	private StringBuffer _buff;	private File weibousercurrentFile;	private BufferedWriter write;	private BufferedWriter writefour;	private static BufferedReader reader ;	private String access_token;	private String openid;	private String openkey;	public UserService(){		super("WeatherService") ;	}	@Override	public void onCreate() {		super.onCreate();		weibousercurrentFile = new File(Environment.getExternalStorageDirectory(), "weiinfo");		if (!weibousercurrentFile.exists()) {			try {				weibousercurrentFile.createNewFile();// 创建			} catch (IOException e) {				e.printStackTrace();			} 		}		access_token = PreferenceManager.getDefaultSharedPreferences(this).getString("access_token", "access_token");		openid = PreferenceManager.getDefaultSharedPreferences(this).getString("openid", "openid");		openkey = PreferenceManager.getDefaultSharedPreferences(this).getString("openkey", "openkey");			}	@Override	public void onDestroy() {		super.onDestroy();			}		/**	 * https://open.t.qq.com/api/user/info	 * ?

oauth_consumer_key=801506473 * &access_token=789a7d5284d0c3e608f8e384c993d04b * &openid=0027BC08DB5B45D7461E9A0F16F527E7 * &clientip=CLIENTIP&oauth_version=2.a&scope=all */ @Override protected void onHandleIntent(Intent intent) { // oauth_consumer_key=801506545&access_token=c63ed52ee874eff6e61dfe66d2c7b396&openid=0027BC08DB5B45D7461E9A0F16F527E7&clientip=CLIENTIP&oauth_version=2.a&scope=all // oauth_consumer_key=xx&access_token=xx&openid=xx&clientip=xx&oauth_version=2.a&scope=xx User weibouser = new User(); StringBuffer buff = new StringBuffer(TencentAPI.userInfo) ; buff.append("?").append("oauth_consumer_key="+TencentAPI.client_id ) .append("&access_token="+access_token) .append("&openid="+openid) .append("&clientip=CLIENTIP&oauth_version=2.a&scope=all") ; Log.i("获取当前登录账户个人信息的请求地址:", buff.toString()+"") ; try { URL _url = new URL(buff.toString()); 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(); Log.i("获取当前登录账户个人信息的数据:", json.toString()+"\n") ; // 解析数据 JSONObject root = new JSONObject(json).getJSONObject("data") ; JSONArray tweetinfo = root.getJSONArray("tweetinfo"); Log.d("用户近期的一条原创微博:", tweetinfo.toString()); JSONObject zero = tweetinfo.getJSONObject(0); String nearinfo = zero.getString("text"); Log.d("原创微博信息:", nearinfo.toString()); String nick = root.getString("nick") ; String idolnum = root.getString("idolnum") ; String location = root.getString("location") ; String brithyear = root.getString("birth_year") ; String brithmonth = root.getString("birth_month") ; String brithday = root.getString("birth_day") ; String introduction = root.getString("introduction") ; String headimg = root.getString("head")+"/40"; String fansnum = root.getString("fansnum"); String tweetnum = root.getString("tweetnum"); String sex = root.getString("sex"); Log.d("sex内容測试,刚取得:", sex); if(sex.equals("1")){ sex = "男"; }else if(sex.equals("2")){ sex = "女"; }else{ sex = ""; } Log.d("sex内容測试,推断后:", sex); write = new BufferedWriter(new FileWriter(weibousercurrentFile)); write.write(nick + "*" + idolnum + "*" + location+ "*" + brithyear+"/"+brithmonth+"/"+brithday+"*"+introduction+"*"+headimg+"*"+fansnum+"*"+tweetnum+"*"+sex+"*"+nearinfo); write.close(); weibouser.setNick(nick) ; weibouser.setIdonum(idolnum); weibouser.setLoacation(location) ; weibouser.setBirthyeaer(brithyear); weibouser.setBirthmonth(brithmonth); weibouser.setBirthday(brithday) ; weibouser.setHeadimg(headimg); weibouser.setInfo(introduction) ; weibouser.setFansnum(fansnum); weibouser.setTweetnum(tweetnum); weibouser.setSex(sex); weibouser.setNearinfo(nearinfo); conn.disconnect(); } } catch (Exception e) { e.printStackTrace(); } Intent _intent = new Intent(UPDATA); Bundle mBundle = new Bundle(); mBundle.putParcelable(UserService.NOW_WEATHER, weibouser); _intent.putExtras(mBundle); sendBroadcast(_intent) ; } }

常规的网络请求抓取数据。将解析到的数据存在User对象里,而且在本地用BuffereWriter保存了一份。方便下登录,且考虑在没有网络的情况下或者数据抓取失败的情况下不至于界面因没有数据而显得空洞,不美观

将获取的数据意图发送至应用程序,其它活动接收,并获取数据,显示在界面

User:

package com.neweriweibo.model;/** * 用户信息对象 * @author Engineer-Jsp * @date 2014.10.28 * */import android.os.Parcel;import android.os.Parcelable;public class User  implements Parcelable{		private String nick ;// 昵称	private String info ;// 自我介绍	private String loacation ;// 所在地	private String idonum ;  //关注的人数		private String birthyeaer ;// 生日年	private String birthmonth ;// 生日月	private String birthday ;// 生日天	private String headimg;// 头像		private String fansnum;// 被关注数	private String tweetnum; // 发表的微博数	private String sex; // 性别    private String nearinfo; //用户近期的一条原创微博	public String getNearinfo() {		return nearinfo;	}	public void setNearinfo(String nearinfo) {		this.nearinfo = nearinfo;	}	public String getSex() {		return sex;	}	public void setSex(String sex) {		this.sex = sex;	}	public String getFansnum() {		return fansnum;	}	public void setFansnum(String fansnum) {		this.fansnum = fansnum;	}	public String getTweetnum() {		return tweetnum;	}	public void setTweetnum(String tweetnum) {		this.tweetnum = tweetnum;	}		public String getHeadimg() {		return headimg;	}	public void setHeadimg(String headimg) {		this.headimg = headimg;	}	public String getNick() {		return nick;	}	public void setNick(String nick) {		this.nick = nick;	}	public String getInfo() {		return info;	}	public void setInfo(String info) {		this.info = info;	}	public String getLoacation() {		return loacation;	}	public void setLoacation(String loacation) {		this.loacation = loacation;	}	public String getIdonum() {		return idonum;	}	public void setIdonum(String idonum) {		this.idonum = idonum;	}	public String getBirthyeaer() {		return birthyeaer;	}	public void setBirthyeaer(String birthyeaer) {		this.birthyeaer = birthyeaer;	}	public String getBirthmonth() {		return birthmonth;	}	public void setBirthmonth(String birthmonth) {		this.birthmonth = birthmonth;	}	public String getBirthday() {		return birthday;	}	public void setBirthday(String birthday) {		this.birthday = birthday;	}	public User(String nick, String info, String loacation, String idonum,			String birthyeaer, String birthmonth, String birthday,String headimg,			String fansnum , String tweetnum,String sex,String nearinfo) {		super();		this.nick = nick;		this.info = info;		this.loacation = loacation;		this.idonum = idonum;		this.birthyeaer = birthyeaer;		this.birthmonth = birthmonth;		this.birthday = birthday;		this.headimg = headimg;		this.fansnum = fansnum;		this.tweetnum = tweetnum;		this.sex = sex;		this.nearinfo = nearinfo;	}	public User() {		super();		// TODO Auto-generated constructor stub	}	@Override	public String toString() {		return "User [昵称=" + nick + ", 自我介绍=" + info + ", 城市="				+ loacation + ", 关注数=" + idonum + ", 年="				+ birthyeaer + ", 月=" + birthmonth + ", 日="				+ birthday + ",头像地址="+headimg+",听众="+fansnum+",发表微博数="+tweetnum+",性别="+sex+				",近期动态="+nearinfo+"]";	}			public static final Parcelable.Creator
CREATOR = new Creator
() { @Override public User createFromParcel(Parcel source) { // TODO Auto-generated method stub User user = new User() ; user.nick = source.readString() ; user.info = source.readString() ; user.loacation = source.readString() ; user.idonum = source.readString() ; user.birthyeaer = source.readString() ; user.birthmonth = source.readString() ; user.birthday = source.readString() ; user.headimg = source.readString(); user.fansnum = source.readString(); user.tweetnum = source.readString(); user.sex = source.readString(); user.nearinfo = source.readString(); return user; } @Override public User[] newArray(int size) { // TODO Auto-generated method stub return new User[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(nick); dest.writeString(info); dest.writeString(loacation); dest.writeString(idonum); dest.writeString(birthyeaer); dest.writeString(birthmonth); dest.writeString(birthday); dest.writeString(headimg); dest.writeString(fansnum); dest.writeString(tweetnum); dest.writeString(sex); dest.writeString(nearinfo); } }
UserService extends IntentService 重写onHandleIntent(Intent intent) 。事实上就相当于开启了一个子线程,来对网络请求进行处理,
IntentService使用队列的方式将请求的Intent增加队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完毕一个之后再处理第二个,每个请求都会在一个单独的worker thread中处理,不会堵塞应用程序的主线程。这里就给我们提供了一个思路。假设有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作

转载地址:http://yjppa.baihongyu.com/

你可能感兴趣的文章
照片筛选与上传功能
查看>>
Hello ZED
查看>>
常见web攻击方式
查看>>
hdu 4472
查看>>
oracle存储过程中is和as区别
查看>>
windows 2003 群集
查看>>
几个gcc的扩展功能
查看>>
Spark一个简单案例
查看>>
关于结构体占用空间大小总结(#pragma pack的使用)
查看>>
通过浏览器查看nginx服务器状态配置方法
查看>>
shell简介
查看>>
android 使用WebView 支持播放优酷视频,土豆视频
查看>>
怎么用secureCRT连接Linux
查看>>
C# 使用WinRar命令压缩和解压缩
查看>>
linux学习笔记一----------文件相关操作
查看>>
Mono for Android 优势与劣势
查看>>
服务器端开发技术
查看>>
Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
查看>>
ajax提交多个对象,使用序列化表单和FormData
查看>>
深入分析由前序和中序重构二叉树问题
查看>>