现在的位置: 首页 > 综合 > 正文

python django成功调用sina微博api(最新)有图

2013年08月22日 ⁄ 综合 ⁄ 共 1790字 ⁄ 字号 评论关闭

从下面地址去下载python的微博SDK

http://michaelliao.github.com/sinaweibopy/ 

下载安装文件,自己通过python setup.py  install 去安装。

# -*- coding: utf-8 -*-

import sys
import weibo
import webbrowser

APP_KEY = '2XXXX1' # app key
APP_SECRET = 'cb597a8XXXXXXXXXX71c3' # app secret


MY_APP_SECRET = APP_SECRET
REDIRECT_URL = 'http://127.0.0.1:8000/market/weibo'#A:这一点很重要

api = weibo.APIClient(APP_KEY, MY_APP_SECRET)

authorize_url = api.get_authorize_url(REDIRECT_URL)

print(authorize_url)

webbrowser.open_new(authorize_url)

code = raw_input()#B:这一点很重要

request = api.request_access_token(code, REDIRECT_URL)

access_token = request.access_token

expires_in = request.expires_in

api.set_access_token(access_token, expires_in)

#print(api.statuses__public_timeline())
print 'user_timeline'
r = api.statuses.user_timeline.get(uid=1800946163)
for st in r.statuses:
    print st.text
    
print 'friendships_friends'
friends= api.friendships.friends.get(uid=1800946163,count=200)
print friends

然后把上述代码保存到testweibo.py,这里主要讲几点:

1、APP_KEY 和 APP_SECRET 需要你去http://open.weibo.com自己申请的网站或者APP去找

2、A:我看文档上写的CALLBACK_URL,这个你可以写成本地地址,毕竟自己机器上跑django,需要获取一个认证code;这里特别注意,你要在下图中配置授权回调页(callbackurl),否则你即使在代码里写了一个真实的callbackurl,也会报错,这个跟你的APP是否是通过审核还是未通过审核没有关系,我看很多人都卡在这一步上。

3、B:就是等webbrowser,open_new认证页面后,会得到一个认证code,自己手工输入就行了

 

那我的那个REDIRECT_URL = 'http://127.0.0.1:8000/market/weibo'到底是执行了什么呢,请往下看

1、   其实我就写了一个View将CODE打印出来而已

偷笑

 @staticmethod
    def WeiboTest(request):
        print request.GET
        return HttpResponse("生成成功!")

截图:

微博认证后回调你的页面时候,会把code带过来,这样子就可以看到了。

下一步怎么操作?

当然回到执行testweibo.py的命令行下,把这个code输入进去回车,看图:

这就是获取friends的结果。

对于api的调用,大家可以尝试使用工具去搭配测试:

你自然会想到API调用的命名规则是什么,呵呵,如下:

URL:https://api.weibo.com/2/statuses/public_timeline.json
其次,对api名做一个变换:【将反斜线/替换为双下划线__】
这里得到:statuses__public_timeline
那么,statuses__public_timeline(),就是APIClient的成员函数名了。

扩展思考:

对于django上的项目,获取code的方式可以先存入session里,然后再调动使用,否则每次都去开个认证窗口复制黏贴岂不是很累。

对于python上的项目,可以采用文件共享方式,将code存入文件,然后再调用使用。

抱歉!评论已关闭.