网站调用新浪微博内容(新浪微博API新特点与百度地图API相比(图))
优采云 发布时间: 2022-03-17 19:14网站调用新浪微博内容(新浪微博API新特点与百度地图API相比(图))
文章目录
查看 API 使用流程
在上一篇文章API Python编程简介:(一)使用百度地图API查地理坐标,通过百度地图API的使用,我们看到API调用的大致流程是:生成API规则 格式化url -> 通过urllib读取url中的数据 -> 解析json格式的数据 接下来开始研究新浪微博API的使用吧!
准备好工作了
新浪微博开放平台是使用新浪微博API的平台。
使用微博账号登录平台后,即可申请成为开发者,创建新应用后将获得唯一的App Key和App Secret。(注:申请不需要提交审核,只要创建一个新的申请,就会分配Key和Secret。)这两个信息也可以在“我的申请/申请信息/基本信息”中找到. 该页面还有“我的申请/申请信息/高级信息”项,点击进入并设置OAuth2.0授权回调页面的相关信息。如果不知道填什么,可以设置为默认回调Page:。后面需要这三条信息,请复制保存到文档中。
微博API新功能
新浪微博API与百度地图API相比,增加了OAuth2.0协议进行用户认证和授权。这里只是简单说明一下(有兴趣的同学可以参考网上文档*敏*感*词*):通过该协议,第三方应用可以获取用户授权,然后使用该License从授权服务器获取token,用于来自 API 服务器的后续查询 验证数据时。
这个验证过程增加了 url 生成的复杂性。好在网站上已经有廖雪峰老师提供的SDK工具包:sinaweibopy(廖老师的github地址好像改名了,网上很多旧链接都失效了,这是新的有效链接),但是这个程序是基于Python2环境编写的,Python3的一些系统库做了改动,程序调用时经常报错。作为 Python 初学者,重写程序以适应 Python3 环境无疑是困难的。幸运的是,有一位大神完成了这项工作。感谢 owolf 为 Python3 重写的 SDK:sinweibopy3。我用过,运行正常。你可以下载它。在这里,我也推荐一下owolf的文章
简单的例子
介绍一下新浪微博API的使用过程,为新生提供参考。
1.参数设置
import sinaweibopy3
import webbrowser
import json
APP_KEY =' 填入你的App Key'
APP_SECRET=' 填入你的App Secret'
REDIRECT_URL =' 填入你的授权回调页'
笔记:
这里说一下我的粗心造成的一个bug,也提醒大家。当我第一次运行程序时,每次都会收到“重定向地址不匹配”错误消息:
微博账号登录出错!授权第三方应用出错,请联系第三方应用开发者:XXX或稍后重试。
错误代码:21322 重定向地址不匹配
网上找了解决方法,设置回调页,但是我之前的步骤已经设置好了,为什么还是这个问题?后来在一篇文章文章中看到,回调页面的地址应该和程序中的REDIRECT_URL一致。想到了程序例子,用http:开头,我填的时候看到同一个地址,没有变化,而网站是https:开头,一个's的区别',当时我还以为是地址,没想到差别这么大!
2.OAuth2.0 验证生成的url
client = sinaweibopy3.APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
url = client.get_authorize_url()
webbrowser.open_new(url)
result = client.request_access_token(input("please input code: "))
client.set_access_token(result.access_token, result.expires_in)
注意:这是调用sinweibopy3实现用户授权->在OAuth2.0中获取Token的过程。当程序运行到client.request_access_token时,会弹出输入提示“请输入密码:”,询问密码?这是什么意思?打开浏览器会看到出现OAuth2.0验证回调页面。地址栏中的“code=”后面有一串字符。这就是我们想要的Token信息。复制它,粘贴它并输入它,然后程序继续。跑步。
3.从 API 读取数据
运行以下代码读取公众微博数据并显示结果。
result=client.public_timeline()
print(json.dumps(result,indent=2,ensure_ascii=False))
通过查看数据结构,可以提取特定信息。比如下面的代码可以用来输出用户的微博昵称、位置、最新微博的文字。
number=result["total_number"]
print(number,"users:")
for u in result["statuses"]:
print(u["user"]["screen_name"])
print(u["user"]["location"])
print(u["text"])
先进的