获取某条新浪微博的所有转发用户列表(使用repost_timeline接口)
来源:互联网 发布:淘宝可以不提供发票吗 编辑:程序博客网 时间:2024/05/29 03:08
在使用新浪微博的API做项目时,需要获取转发了某条特定微博的所有用户的列表。决定采用statuses/repost_timeline得到转发列表,然而发现两个问题:
1:新浪微博对这个接口有限制,只能返回最新的2000条数据。官方文档如是说:此接口最多只返回最新的2000条数据。实践发现,一旦获取的数量即将超过2000条,发出去的请求都会返回如“代码1”所示的错误提示。
2:即使我想妥协,只用2000条数据,使用新浪微博提供的官方javaSDK相对应的测试类GetRepostTimeline.java时,每次请求却只能返回20条数据,想多次请求凑够所有用户列表却发现多次请求返回的结果居然有重复(而且测试权限每小时只有宝贵的150次请求次数,不想这么浪费)。
几经尝试,发现第二个问题通过repost_timeline接口的两个参数可以解决:
count 单页返回的记录条数,最大不超过200,默认为20。
page 返回结果的页码,默认为1。
也就是说只要修改单页返回的记录条数为200,同时循环10次向服务器发送请求,每次请求改变返回结果页的页码,就能访问到转发某条微博的用户的最大数量(2000条)的列表了。代码经验证可行,具体代码见“代码2”:
于是乎,不但拿到了将近2000条数据,请求次数也控制在最小了。同样的修改也适用于新浪微博其他有count和page参数的API。但是对于“想拿到某条微博到现在为止的所有转发的用户的列表”这样的需求却没有满足,毕竟人家只提供最新的2000条数据,多次请求凑足所有用户列表都不行。求各位看官解答.......
//代码1weibo4j.model.WeiboException: A JSONObject text must begin with '{' at character 1:[]at weibo4j.http.Response.asJSONObject(Response.java:201)at weibo4j.model.Status.constructWapperStatus(Status.java:263)at weibo4j.Timeline.getRepostTimeline(Timeline.java:308)at visProject.GetRepostList.main(GetRepostList.java:33)Caused by: weibo4j.org.json.JSONException: A JSONObject text must begin with '{' at character 1at weibo4j.org.json.JSONTokener.syntaxError(JSONTokener.java:410)at weibo4j.org.json.JSONObject.<init>(JSONObject.java:179)at weibo4j.org.json.JSONObject.<init>(JSONObject.java:402)at weibo4j.http.Response.asJSONObject(Response.java:199)... 3 more
<pre code_snippet_id="221346" snippet_file_name="blog_20140306_1_2099870" name="code" class="java">//代码2import java.util.List;import weibo4j.Timeline;import weibo4j.model.Paging;import weibo4j.model.Status;import weibo4j.model.StatusWapper;import weibo4j.model.WeiboException;public class GetRepostList {public static void main(String[] args) {//授权String access_token = ""; //这里放之前申请好的accessTokenTimeline tm = new Timeline();tm.client.setToken(access_token);String id = ""; //这里放被转发的微博的id//设置转发列表页码Paging page = new Paging();page.setCount(200); //设到每页容量的最大值int i=0; //测试用int flag = 200; //控制循环跳出,减少API请求次数for(int pageIndex=1; pageIndex<10; pageIndex++){page.setPage(pageIndex);try { if(flag < 190) break;StatusWapper status = tm.getRepostTimeline(id, page);List<Status> resultList = status.getStatuses(); flag = resultList.size(); if (resultList != null && resultList.size() > 0) { //如果获取到的内容为空,则退出 for (Status s : resultList){ System.out.println(s.getUser().getName()); //对每个转发项的操作都放在这个for each函数里,此处显示转发用户的用户名i++; } }else{break;}} catch (WeiboException e) {e.printStackTrace();}}System.out.println("the number of retwitter catched this time is: " +i);}}
- 获取某条新浪微博的所有转发用户列表(使用repost_timeline接口)
- 新浪微博接口,获取用户粉丝列表
- 新浪微博数据挖掘食谱之九: 用户篇 (获取转发微博的用户名)
- Python:获取新浪微博用户的收听列表和粉丝列表
- Python 获取新浪微博指定用户的微博列表
- 使用新浪的接口获取用户当前IP的位置地点身份城市地区
- 新浪微博(十八)获取、转发、收藏、发布微博的工具类(WeiBo.java类)
- Apache 转发获取新浪微博https数据
- 获取数据库中当前用户所有表的列表
- 新浪微博API使用之python接口的使用
- iOS-仿赤兔、新浪微博动态列表(带评论、点赞、转发和分享,自动计算行高功能)
- python调用新浪微博API爬取用户的好友列表(windows 64位,pyCharm)
- 如何使用.NET调用新浪微博接口的实例
- 【分享】100万条新浪微博用户的个人标签信息
- 新浪微博接口使用总结
- android 使用新浪微博API接口
- 使用 httpClient 调用新浪微博接口
- 使用新浪微博接口说明
- 【Linux】FrameBuffer操作入门
- ACM-01背包之饭卡——hdu2546
- vector的效率
- 为什么要在引入的css或者js文件后面加参数的详细讲解
- Sublime Text 介绍、用法、插件等
- 获取某条新浪微博的所有转发用户列表(使用repost_timeline接口)
- IOS 之 NSBundle 使用
- Mysql server has gone away
- jquery选择器
- 百度云推送sdk集成问题
- ajax在easyui中使用实例
- iPhone应用开发 UITableView学习点滴详解
- 设备驱动(九)
- Linux 脚本编写基础