新浪微博:山寨版的twitter , 各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三方登录来提高用户登录体验就显得尤为重要,本次使用Python3+Tornado5来集成微博登录,记录一下,坑还是不少的 。
首先注册微博开放平台:***/
选择微链接-》网站接入=>立即接入 新建一个应用
文章插图
应用创建成功后,会立即跳转审核页面,需要填写一些资质,用来进行审核,其实这些审核字段都不用搭理,应用压根就不需要通过审核
文章插图
只需要拿到appkey和appsecret即可,然后立即点击高级信息,填写回调网址
文章插图
需要注意一点,目前新浪对127.0.0.1需要进行安全校验 , 所以回调路由填一个随机ip就可以了,不一定是真实的,主要为了应对新浪的安全监测 , 见下图:
文章插图
【tornado python3 python新浪微博数据爬取】那么新浪微博的登录逻辑很简单: 拼接url => 回调获取code => 利用code换取uid和access_token => 使用access_token获取用户信息
首先第一步,拼接url,这里我们使用Tornado写控制器
#新浪微博登录地址组合返回(第一步)class SinaFirstHandler(BaseHandler): def get(self,*args,**kwargs): #微博接口地址 weibo_auth_url = "***/oauth2/authorize" #回调网址 redirect_url = "http://127.0.0.1:8000/md_admin/weibo" #应用id client_id = "2636039333" #组合url auth_url = weibo_auth_url + "?client_id={client_id}&redirect_uri={re_url}".format(client_id=client_id, re_url=redirect_url) self.write(auth_url)
第二步,回调获取code,并且换取access_token和uid#新浪微博回调地址(第二步)class SinaBackHandler(BaseHandler): def get(self,*args,**kwargs): #获取回调的code code = self.get_argument('code') #微博认证地址 access_token_url = "***/oauth2/access_token" #参数 向新浪接口发送请求 re_dict = requests.post(access_token_url,data=http://www.chy56.com/show/{ "client_id": '2636039333', "client_secret": "4e2fbdb39432c31dc5c2f90be3afa5ce", "grant_type": "authorization_code", "code": code, "redirect_uri": "http://127.0.0.1:8000/md_admin/weibo", }) re_dict = re_dict.text re_dict = eval(re_dict) print(re_dict.get('uid')) self.write(re_dict)
接下来的情况就有点操蛋了,因为新浪规定应用如果不通过审核,那么新浪有些接口无权限请求的,可以说你手里只有access_token和uid,却换不到别的东西 , 怎么办呢,没有人会闲的没事为了测试接口就去弄个营业执照,但是有一个曲线救国的方法,就是在测试信息页面来添加测试账号,添加好测试账号之后,就可以请求相应的接口文章插图
最后,利用手里的access_token和uid来获取当前用户的用户名
result = requests.get('***/2/users/show.json',params={'access_token':res['access_token'],'uid':res['uid']})result = json.loads(result.text)print(result['name'])
可以看到接口请求成功文章插图
搞定收工 。
- 微信拍一拍的功能在哪里设置文字
- 银杏叶怎么处理才无毒,银杏叶处理方法
- 永久关闭微信漂流瓶 微信漂流瓶下线了吗
- 电饭煲蛋糕轻松做出8厘米高度,家用电饭煲怎么做蛋糕教程
- 世界最淡的海是波罗的海 世界上最淡的海是波罗的海
- 香气扑鼻的生炒排骨
- 网上申请的流量卡在哪看物流 网上申请的手机卡怎么查询快递
- oppor9sk密码忘了怎么样解锁
- 手机一周关机几分钟比较好