网站调用新浪微博内容(python调用API的话)

优采云 发布时间: 2021-10-13 11:11

  网站调用新浪微博内容(python调用API的话)

  匿名用户

  1级

  2016-07-25 回答

  1.下载SDK

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

  连接地址在这里:

  可以用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实例

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

  # _*_ 编码:utf-8 _*_

  从微博导入APIClient

  导入浏览器

  APP_KEY = "

  APP_SECRET = "

  CALLBACK_URL = "

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

  客户端 = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)

  url = client.get_authorize_url()

  # TODO: 重定向到 url

  #打印网址

  webbrowser.open_new(url)

  # 获取URL参数代码:

  代码 = '2fc0b2f5d2985db832fa01fee6bd9316'

  客户端 = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)

  r = client.request_access_token(代码)

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

  expires_in = r.expires_in #token过期的UNIX时间:%E6%97%B6%E9%97%B4

  # TODO:您可以在此处保存访问令牌

  client.set_access_token(access_token, expires_in)

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

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

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

  更恶心的是代码获取。当我阅读 sinaweibopy 文档时,我不明白这是什么意思。

  webbrowser.open_new(url)

  这行代码打开浏览器,跳转到授权的界面,然后观察它所在界面的URL。它将显示类似于以下的格式:

  看见?

  问号后面有个code=……的东西,就是把等号后面的字符串复制下来赋值给code,但是每次程序运行的时候,code不是一成不变的,也就是说每次。

  有这样一个手动获取的过程,我觉得很麻烦。后面会自己研究,实现代码的自动获取。如果哪位大神能告诉我,感激不尽~

  好了,拿到正确的code后,就可以完成授权认证了,就可以调用微博的API了。至于如何在Python下调用,我复制sinaweibopy上的介绍:

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

  API:状态/用户时间线

  请求格式:GET

  请求参数:

  source: string,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)

  对于 r.statuses 中的 st:

  打印 st.text

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

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

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

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

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

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

  请注意:上传的文件必须是类文件对象,而不是str,因为无法区分str是文件还是字段。一个 str 可以通过 StringIO 打包成一个类文件的对象。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线