获取某条新浪微博的所有转发用户列表(使用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);}}
                                             
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为平板激活手机密码忘了怎么办 捡个华为手机非要激活才能用怎么办 华为手机没激活想重新激活怎么办 华为手机激活总显示系统繁忙怎么办 华为荣耀7i进水了不开机怎么办 华为荣耀手机进水了怎么办开不开机 华为畅享5s变砖怎么办 我的苹果7机身内存满了怎么办 小米5x拆机后屏幕翘边怎么办 苹果手机设备禁止游戏登入怎么办 苹果7plus玩游戏掉频怎么办 孕期牙套子掉了基牙烂掉了怎么办 美团绑定的信用卡过期了怎么办 苹果6s手机开不开机怎么办 换了散热硅胶后还是死机怎么办 华为畅享6s掉啦怎么办 透明塑料壳被太阳晒的发黄怎么办 新买的手机壳有味道怎么办 刚买的手机壳有异味怎么办 bjd 光油把妆蹭掉了一点怎么办 软皮套手机壳如果大了怎么办 苹果手机自带相机拍照会晃屏怎么办 苹果x手机壳拆不下来怎么办 苹果手机5c屏幕没有反应怎么办 玩穿越火线屏幕两边是黑的怎么办? 8g内存只有2g可用怎么办? 三星7e微信分身打不开怎么办? 光猫的网口1不亮怎么办 两年前的发票发现名头有错误怎么办 苹果5s手机通话声音小怎么办 华为全网通手机电信卡打不了怎么办 合约机移动违约不返话费我该怎么办 电信手机卡合约套餐要到期了怎么办 苹果6s联通4g网速慢怎么办 营业厅买到的不是全网通手机怎么办 全网通手机联通卡被禁用怎么办 红米5手机关机充电自动开机怎么办 华为平板怎么解锁密码忘了怎么办 华为荣耀手机开锁密码忘记了怎么办 畅玩7x密码忘了怎么办 过了时的手机没有刷机包怎么办?