python sdk 获取新浪微博签到信息
来源:互联网 发布:java程序设计教程 编辑:程序博客网 时间:2024/06/06 01:10
具体参考http://www.liaoxuefeng.com/article/00137389308005720bf24cb6cf14d9e897e7026dbc6a842000
不得不说廖大神这个sdk 在我这个新手看来写的真是太完美了,接口调用写成动态,封装授权,返回jsondict
处理起来实在是方便
# -*- coding: utf-8 -*-'''Created on 2016年12月18日@author: bitwater基于python2.7写了一个类用来获取poiidlist,由于sina api的限制,也没必要多线程了,除非.....我创建了很多帐号,一旦有帐号被limit ,我就捕获这个异常并重新授权 ( while(1) ) api接口稳定行不是很好(可能是因为app_key为认证), 为了防止不可预料的错误,当数据量非常大的时候我尽量每次跑n条后 过几分钟再跑 ,参考下面的网站 ,官方说的很不明确限制到底是什么http://open.weibo.com/wiki/%E6%8E%A5%E5%8F%A3%E8%AE%BF%E9%97%AE%E9%A2%91%E6%AC%A1%E6%9D%83%E9%99%90经过反复测试,post或get可以达到连续万次请求(应该是极限了),不过这个不稳定我写了一个类用来获取所有的poiid然后又写了一个根据poiid list ,获取用户信息的类'''import weiboimport codecsfrom SinaSDK.PoiidList import PoiidListimport urllib2class Sina(object): APP_KEY = [ '4051276836', '1859650768', '1042452822', '3221056763', '367472040', '2880955737', '774292992', '1611999631' ] APP_SECRET = [ '59f42a032177e22cfb738067fd481855', 'ceb63e1afc177ad21d06e22317fa88c9', '4acf19662aff8a9dd1f5e2941d1975c1', '5a2d00b6face2762d92de04ee1e8d799', '0a7a707442089290b6fdaff9842f2786', '08811a2e2f6e0c2ae8ce8b63676b84a5', '01ecee0a13785b5e0b394b60c0acebc6', '72c202d5bc094ef57210909ecc290c66' ] CALL_BACK = 'https://api.weibo.com/oauth2/default.html' isUsed = 2 def __init__(self): # app self.app_key = Sina.APP_KEY[Sina.isUsed] self.app_secert = Sina.APP_SECRET[Sina.isUsed] self.call_back = Sina.CALL_BACK Sina.isUsed = Sina.isUsed + 1 if Sina.isUsed >= len(Sina.APP_KEY): Sina.isUsed = 0 # client self.client = "" self.weidu = '' self.jingdu = '' self.poiiddict = {} self.poiidCnt = 0 def startAPIClient(self): self.client = weibo.APIClient(self.app_key, self.app_secert, self.call_back) # 获取该应用(APP_KEY是唯一的)提供给用户进行授权的url auth_url = self.client.get_authorize_url() # 打印出用户进行授权的url,将该url拷贝到浏览器中,服务器将会返回一个url,该url中包含一个code字段(如图1所示) print auth_url # 输入该code值(如图2所示) code = raw_input("input the retured code : ") # 通过该code获取access_token,r是返回的授权结果,具体参数参考官方文档: # http://open.weibo.com/wiki/Oauth2/access_token r = self.client.request_access_token(code) # 将access_token和expire_in设置到client对象 self.client.set_access_token(r.access_token, r.expires_in) return self.client def start(self, weidu , jingdu): self.weidu = weidu self.jingdu = jingdu poilst = PoiidList(self.client , self.weidu , self.jingdu) self.poiiddict , self.poiidCnt = poilst.getPoiid() userinfo = UsersInfo(self.poiiddict , self.client) userinfo.getinfo() def printINFO (self): print self.weidu print self.jingdu print self.poiidCnt class UsersInfo(object): ''' classdocs ''' def __init__(self, poiiddict, Client): ''' Constructor ''' self.poiiddict = poiiddict self.client = Client def getinfo(self): for Poiid in self.poiiddict.keys(): while True : try : tmp = self.client.place.pois.users.get(poiid=Poiid, count=50, page=1) break except weibo.APIError : sn = Sina() self.client = sn.startAPIClient() except urllib2.HTTPError: pass # # 计算这个poiid 的总人数 try: poiid_User_cnt = tmp['total_number'] except TypeError: continue filename = self.poiiddict[Poiid] print u"一共有%d个人在%s签到" % (poiid_User_cnt, filename) # # 计算总页数 Cnt = poiid_User_cnt // 50 if poiid_User_cnt % 50 != 0 : Cnt = Cnt + 1 # # 创建文件并输出 fw = codecs.open("/home/bitwater/workSpace/eclipseSpace/sinaCraw/SinaSDK/sina/" + filename + ".csv", "w", "utf-8",) fw.write(u"有%d个" % (poiid_User_cnt)) fw.write(u"用户名,用户id,出发地, 性别,签到时间\n") # # 获取每一页 for i in range(1, Cnt + 1): print "第%d页" % (i) while True : try : everinfo = self.client.place.pois.users.get(poiid=Poiid, count=50, page=i) break except weibo.APIError : sn = Sina() self.client = sn.startAPIClient() except urllib2.HTTPError: pass # everinfo = self.client.place.pois.users.get(poiid=Poiid, count=50, page=i) for user in everinfo['users']: fw.write(user['name'] + " ,") fw.write(str(user['id'])) fw.write(" ,") fw.write(user['location'] + " ,") fw.write(user['gender'] + " ,") fw.write(user['checkin_at'] + '\n') fw.close() if __name__ == '__main__': weidu = "+29.13" jingdu = "+110.47"# weidu = raw_input(u"输入维度")# jingdu = raw_input(u"输入经度") sina = Sina() sina.startAPIClient() sina.start(weidu, jingdu)
# -*- coding: utf-8 -*-'''Created on 2016年12月19日@author: bitwater'''import weiboimport codecsfrom pyasn1.compat.octets import nullclass PoiidList(object): ''' get poiid ''' def __init__(self, Client, weidu, jingdu): ''' Constructor ''' self.client = Client self.poiiddict = {} self.weidu = weidu self.jingdu = jingdu self.poiid_cnt = 0 self.listlimit = 50 def getPoiid(self): tmp = self.client.place.nearby.pois.get(lat=self.weidu , long=self.jingdu , count=50 , range=10000, sort=3) self.poiid_cnt = tmp['total_number'] print "该位置一共有%d个Poiid" % (self.poiid_cnt) st = 1 cnt = self.poiid_cnt // self.listlimit print "%d" % (cnt) """ ceshi """# st = 5# cnt = st + 4 fw = codecs.open("/home/bitwater/workSpace/eclipseSpace/sinaCraw/SinaSDK/sina/PoiidList.txt", "w", "utf-8") for i in range(st, cnt): try: print "%d" % (i) tmp = self.client.place.nearby.pois.get(lat=self.weidu , long=self.jingdu , count=self.listlimit , range=10000, sort=3, page=i) if tmp is null: break al = tmp['pois'] # 输出 Poiid 跟对应的 名称 for one in al: print one['poiid'] , one['title'] fw.write(one['poiid']) fw.write(" ") fw.write(one['title']) fw.write('\n') self.poiiddict[one['poiid']] = one['title'] except TypeError: continue fw.close() return self.poiiddict , self.poiid_cnt
0 0
- python sdk 获取新浪微博签到信息
- Python新浪博客签到
- python sdk 发一个新浪微博
- 新浪微博Python SDK笔记——获取粉丝列表或关注列表
- 新浪微博签到POI数据
- python爬虫之获取新浪新闻信息
- python获取新浪微博授权
- 新浪微博iOS SDK 授权和获取用户信息
- 新浪微博Python SDK笔记——准备工作
- 如何高效的利用新浪微博获取信息
- 新浪微博登陆,获取微博用的信息
- IOS - 新浪微博SDK
- 新浪微博SDK使用
- 新浪微博SDK使用说明
- 新浪微博SDK使用指南
- 获取新浪新闻信息
- python爬虫——获取新浪新闻前两页新闻信息
- Python 获取新浪微博的最新公共微博
- pyqt4之sqlite数据库连接测试
- 小博老师解析Java核心技术 ——JSwing文本域和滚轴控件
- myeclipse10导入其他地方的项目时jsp报错的有效解决方法
- 防止过拟合的处理方法
- Java面向对象特点----继承
- python sdk 获取新浪微博签到信息
- byte最大值和最小值
- 算法导论学习日记(4)插入排序的递归版本
- 35 个 Java 代码性能优化总结
- eclipse搭建Android开发环境遇到的坑
- poj 3321 Apple Tree
- jmeter接口自动化测试之一:jmeter+maven+eclipse搭建
- 触摸屏驱动函数分析(基于普通设备)
- Struts之国际化