如何用python调用新浪微博的api

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python调用新浪微博的api相关的知识,希望对你有一定的参考价值。

请问一下我如何用python调用新浪微博的api,本人菜鸟,会C++,python不会。最好给我举个调用的例子,例如users/show是根据用户ID获取用户信息,但是如何调用?官方的api没说明,而且实例也只给了Json的。请高手给我详细说明,谢谢!

参考技术A 与Twitter相比,新浪微博做得更好的地方是直接提供了SDK(Twitter貌似只有第三方的SDK)。而我自然是用Python SDK,一个只有几十k的玩意。

接着进入exanples文件夹(新浪这英文水平,不提了…),打开oauthSetTokenUpdate.py文件就是一个很标准的例子了。

于是照着写了一个:

view sourceprint?01 # -*- coding: utf-8 -*-

02

03 from weibopy.auth import OAuthHandler

04 from weibopy.api import API

05

06

07 consumer_key= '应用的key'

08 consumer_secret ='应用的App Secret'

09

10 auth = OAuthHandler(consumer_key, consumer_secret)

11 auth_url = auth.get_authorization_url()

12 print 'Please authorize: ' + auth_url

13 verifier = raw_input('PIN: ').strip()

14 auth.get_access_token(verifier)

15 api = API(auth)

16

17 status = api.update_status(status='hello world', lat='12.3', long='45.6') # 注意status必须是UTF-8编码的字符串,经纬度是可以不写的

18 print status.id

19 print status.text

注意consumer_key和consumer_secret需要创建一个应用才能拿到。

运行这个程序,你会发现它可耻地失败了,报出一条语法错误:

File 'C:\Documents and Settings\Administrator\Desktop\sinatpy\weibopy\api.py',
line 197 )(self, *args, post_data=post_data, headers=headers)
^SyntaxError: invalid syntax于是打开weibopy\api.py这个文件,把197行改成:

)(self, post_data=post_data, headers=headers, *args)
再运行这个程序就会提示一个URL链接,在浏览器里打开这个链接,并且给予访问权限,就会拿到一串PIN码。把这个PIN码输上去,就会发送一条推了,并且还会显示用户的Access token key和Access token secret。
可以看到整个过程是很简单的:

用你的consumer_key和consumer_secret创建一个OAuthHandler对象auth。
告诉用户访问auth.get_authorization_url(),并让用户授权这个应用。
拿到用户的PIN码,用auth.get_access_token()拿到用户的Access token key和Access token secret。
用auth创建一个API对象api。
调用api的方法,例如update_status()就是发推。详细说明可以看API文档。
当然,每次都要求用户输入PIN码也太傻了,所以在用auth.get_access_token()拿到Access token key和Access token secret之后,就可以直接用它们来创建API对象了:

view sourceprint?01 # -*- coding: utf-8 -*-

02

03 from weibopy.auth import OAuthHandler

04 from weibopy.api import API

05

06

07 consumer_key= '应用的key'

08 consumer_secret ='应用的App Secret'

09 token = '用户的Access token key'

10 tokenSecret = '用户的Access token secret'

11

12 auth = OAuthHandler(consumer_key, consumer_secret)

13 auth.setToken(token, tokenSecret)

14 api = API(auth)

15

16 status = api.update_status(status='搞定收工~')

最后想说的是新浪微博的应用审核真麻烦,没通过审核的想show下自己个性化的应用名都不行。罢了,反正我也只是玩玩而已~

看看有没有用

参考资料:http://hi.baidu.com/xayhjy3/blog/item/d7f7734f4aaa5ad5d0c86ab7.html

获取新浪微博的Access_token

最近想爬取新浪微博的评论,百度了一下,有个新浪开放平台提供了这个API

于是按照它的说明,去获取Access_token:

1、点击微链接

2、立即创建微链接

3、选择网页应用

4、填写信息后提交

5、应用创建完后可以在“我的应用”中查看信息

6、在“应用信息”--“高级信息”中可以设置网站的授权回调页和取消授权回调页,记住自己的授权回调页

7、进入

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

YOUR_CLIENT_ID:即应用的AppKey,可以在应用基本信息里查看到。

YOUR_REGISTERED_REDIRECT_URI:即之前填写的授权回调页,注意一定要完全相同。

如果用户授权成功后,会跳转到回调页,开发者此时需要得到url参数中的code值,注意code只能使用一次。

8、参考文档

访问如下页面得到Access Token:

https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

我的问题就出在这里:

这一步得到错误:

{"error":"HTTP METHOD is not suported for this request!","error_code":10021,"request":"/oauth2/access_token"}
查找错误信息发现是请求方式不对,应该是post方式,我们上面这样属于get方式
于是自己编写python代码:
import urllib2
import urllib
values={}
values[client_id] = *****
values[client_secret] = ****
values[grant_type] = ------
values[code] = -------
values[redirect_uri] = ------
data = urllib.urlencode(values)
url = "https://api.weibo.com/oauth2/access_token"
request = urllib2.Request(url,data)    #使用post方法
# geturl = url+‘?‘+data
# request = urllib2.Request(geturl) #get()方法
response = urllib2.urlopen(request)
print response.read()

得到Access_token,接下来就可以自己写代码爬取评论了。



以上是关于如何用python调用新浪微博的api的主要内容,如果未能解决你的问题,请参考以下文章

如何通过python调用新浪微博的API来爬取数据

高分求助,php新浪微博接口 api 如果获取某一地区下所有用户的微博列表。。我在新浪微博的ap帮助里没有找到

python 新浪微博的登录协助,可以处理验证码所需的情况。(新浪微博登录实现,包含验证码解析)

新浪微博怎么用用户名登录

获取新浪微博的Access_token

怎样用python爬新浪微博大V所有数据