设为首页 收藏本站
查看: 999|回复: 0

[经验分享] python获取指定微博用户的关注列表

[复制链接]

尚未签到

发表于 2015-4-25 11:53:58 | 显示全部楼层 |阅读模式
  发现新浪提供的python SDK中存在问题,导致无法获取用户所有的关注列表,只能获取前20个。
  首先,看看SDK中获取关注列表的函数:
  Statuses/friends
  获取用户关注列表及每个关注用户的最新一条微博,返回结果按关注时间倒序排列,最新关注的用户排在最前面。

请求参数

必选类型及范围说明

source
true
string
申请应用时分配的AppKey,调用接口时候代表应用的唯一身份。(采用OAuth授权方式不需要此参数)


:id
false
int64/string
用户ID(int64)或者昵称(string)。该参数为一个REST风格参数。调用示例见注意事项


user_id
false
int64
用户ID,主要是用来区分用户ID跟微博昵称。当微博昵称为数字导致和用户ID产生歧义,特别是当微博昵称和用户ID一样的时候,建议使用该参数


screen_name
false
string
微博昵称,主要是用来区分用户UID跟微博昵称,当二者一样而产生歧义的时候,建议使用该参数


cursor
false
int
用于分页请求,请求第1页cursor传-1,在返回的结果中会得到next_cursor字段,表示下一页的cursor。next_cursor为0表示已经到记录末尾。


count
false
int,默认20,最大200
每页返回的最大记录数,最大不能超过200,默认为20。


:id, user_id, screen_name 可以任选一个参数,在3个都不提供的情况下,系统返回当前登录用户的关注列表
  从weibopy\api.py下,可获取friends函数的原型:api.friends('id', 'user_id', 'screen_name', 'page', 'cursor')
  经过试验,前三个参数只要有一个就可以。现在,修改下例子中的代码examples\getFriends.py:
  代码一:


DSC0000.gif DSC0001.gif View Code


    def friends(self,nickname):
        total_friends = 0
        next_cursor = -1
        while next_cursor != 0:            
            timeline = self.api.friends(nickname,'','','',next_cursor)
            #timeline = self.api.friends()
            if isinstance(timeline, tuple):
                next_cursor = timeline[1]
                total_friends += len(timeline[0])
                for line in timeline[0]:
                    self.obj = line
                    fid = self.getAtt("id")
                    name = self.getAtt("screen_name")
                    text = "friends---"+ str(fid) +":"+ name
                    text = text.encode("gbk")
                    print text
            else:
                next_cursor = 0
                total_friends += len(timeline)
                for line in timeline:
                    self.obj = line
                    fid = self.getAtt("id")
                    name = self.getAtt("screen_name")
                    text = "friends---"+ str(fid) +":"+ name
                    text = text.encode("gbk")
                    print text
  问题出来了,文档里说返回结果中会有next_cursor字段,但是调试发现timeline的类型不是tuple,而是。这是怎么回事?
  重新调试,在



timeline = self.api.friends(nickname,'','','',next_cursor)
  处步入,来到如下位置(weibopy\binder.py):



def _call(api, *args, **kargs):
        method = APIMethod(api, args, kargs)
        return method.execute()
  进入method.execute(),单步运行来到以下代码行(weibopy\binder.py):



# Parse the response payload
result = self.api.parser.parse(self, body)
  再次步入,可发现如下代码(weibopy\parsers.py):



if isinstance(json, tuple):
            json, cursors = json
else:
            cursors = None
if method.payload_list:
            result = model.parse_list(method.api, json)
else:
            result = model.parse(method.api, json)
if cursors:
            return result, cursors
else:
            return result
  此时,json的类型不是tuple而是dict,因此,cursors被置为None,因此最后返回的结果中没有cursors,只有关注列表。这导致函数friend中的循环只执行了一次。知道原因就好办了:



        if isinstance(json, tuple):
            json, cursors = json
        elif isinstance(json, dict):
            if 'next_cursor' in json:
                cursors = json['next_cursor']
            else:
                cursors = None
        else:
            cursors = None
  
重新执行代码一可获得用户的全部关注列表。
DSC0002.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60561-1-1.html 上篇帖子: Python学习笔记(五):Interprocess Communication 下篇帖子: Python中纠结处之其一—— 静态方法、类方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表