网站调用新浪微博内容(新浪微博调用API的话,折腾一天终于小有收获,总结如下)

优采云 发布时间: 2022-02-26 12:06

  网站调用新浪微博内容(新浪微博调用API的话,折腾一天终于小有收获,总结如下)

  这几天为了发论文,需要采集新浪微博的用户关系信息,形成一个复杂网络的*敏*感*词*。好在微博提供了一个API供我们调用。折腾了一天,终于有了小收获。总结如下:

  1.下载SDK

  如果使用python调用API,必须先到下一个Python SDK,sinweibopy

  连接地址在这里:

  可以使用pip快速导入,github连接中的wiki也有介绍使用方法,简单易懂。

  2.了解新浪微博的授权机制

  在调用API之前,首先要了解什么是OAuth 2,新浪微博的授权机制。

  链接在这里:%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E

  3.在新浪微博注册应用

  大家可以通过新浪微博开发者平台注册自己的应用,我在网站上注册了应用。注册后,每个应用都会被分配一个唯一的app key和app secret,这是上面提到的授权机制中需要的,相当于每个应用的标识。

  此时,我们可以尝试编写代码调用新浪微博的API。

  4.简单的API调用示例

  参考上面的很多资料和文档,写了一个简单的调用过程。

  

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

from weibo import APIClient

import webbrowser

APP_KEY = ''

APP_SECRET = ''

CALLBACK_URL = ''

#这个是设置回调地址,必须与那个”高级信息“里的一致

client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)

url = client.get_authorize_url()

# TODO: redirect to url

#print url

webbrowser.open_new(url)

# 获取URL参数code:

code = '2fc0b2f5d2985db832fa01fee6bd9316'

client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)

r = client.request_access_token(code)

access_token = r.access_token # 新浪返回的token,类似abc123xyz456

expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4

# TODO: 在此可保存access token

client.set_access_token(access_token, expires_in)

print client.friendships.friends.bilateral.ids.get(uid = 12345678)

  

  通过上面的代码,我实现了调用相互关注API,即查找某个id的用户相互关注的人的列表。

  其中APP_KEY和APP_SECRET是上一篇中分配给各个应用的信息。回调地址可以在各个应用的高级信息中看到。需要自己设置,但可以随便设置。

  更恶心的是代码的获取。第一次看sinweibopy的文档的时候没明白什么意思。如上代码所示,获取到的url是一个授权的网站。

  webbrowser.open_new(url)

  这行代码打开浏览器跳转到授权的界面,然后观察其所在界面的URL,会显示大致相同的格式如下:

  http://apps.weibo.com/sayarywei?code=505e3efcdad1f421d147db7276aabdbe

  看见?问号后面有一个code=...,就是把等号后面的字符串复制过来赋值给代码,但是每次运行程序,代码都不是静态的,也就是说必须有每次都是这样的手册。收购过程对我来说很麻烦。以后自己研究,实现自动取码。谁能告诉我,不胜感激~

  好了,拿到正确的代码后,就可以完成授权认证了,可以调用微博的API了。至于Python下怎么调用,我复制一下sinweibopy上的介绍:

  首先查看新浪微博API文档,例如:

  API:状态/用户时间线

  请求格式:GET

  请求参数:

  source:字符串,OAuth授权方式不需要该参数,其他授权方式需要。值是 A*敏*感*词*ey?的应用程序。

  access_token:字符串,OAuth授权的必填参数。其他授权方式不需要此参数。OAuth授权后获取。

  uid:int64,要查询的用户ID。

  screen_name:字符串,要查询的用户昵称。

  (其他可选参数省略)

  调用方法:将API的“/”改为“.”,根据请求格式为GET或POST调用get()或post(),传入关键字参数,但不收录source和access_token参数:

  r = client.statuses.user_timeline.get(uid=123456)

for st in r.statuses:

print st.text

  如果是POST调用,示例代码如下:

  r = client.statuses.update.post(status=u'测试OAuth 2.0发微博')

  如果需要上传文件,传入file-like object参数。示例代码如下:

  f = open('/Users/michael/test.png', 'rb')

r = client.statuses.upload.post(status=u'测试OAuth 2.0带图片发微博', pic=f)

f.close() # APIClient不会自动关闭文件,需要手动关闭

  请注意:上传的文件必须是类文件对象,不能是str,因为无法区分str是文件还是字段。您可以通过 StringIO 将 str 包装到类似文件的对象中

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线