网站调用新浪微博内容(新浪微博API新特点与百度地图API相比,我理解)
优采云 发布时间: 2022-01-13 08:10网站调用新浪微博内容(新浪微博API新特点与百度地图API相比,我理解)
查看 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 server 验证数据时。
这个验证过程增加了 url 生成的复杂性。幸运的是,廖雪峰老师提供的SDK工具包已经在网站:sinaweibopy(廖老师的github地址好像改名了,网上很多旧链接都失效了,这是新的有效链接) ,但是这个程序是基于python2环境编写的,python3的一些系统库已经改了,程序调用的时候经常报错。作为一个python初学者,重写程序以适应python3环境无疑是困难的。幸运的是,有一位大神完成了这项工作。感谢 owolf 为 python3 重写的 SDK:sinweibopy3。我用过,运行正常。你可以下载它。在这里,我也推荐一下owolf的文章
简单的例子
介绍一下新浪微博API的使用过程,为新生提供参考。
1.参数设置
导入 sinweibopy3
导入浏览器
导入json
APP_KEY = '填写您的应用密钥'
APP_SECRET='填写您的应用密码'
REDIRECT_URL = '填写你的授权回调页面'
笔记:
这个文件需要和sinweibopy3.py放在同一个文件夹下。
填写的三条信息就是准备中提到的信息。
这里说一下我的粗心造成的一个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("请输入代码:"))
client.set_access_token(result.access_token, result.expires_in)
注意:这是调用sinweibopy3实现用户授权->在OAuth2.0中获取Token的过程。当程序运行到client.request_access_token时,会弹出输入提示“请输入密码:”,询问密码?这是什么意思?打开浏览器会看到出现OAuth2.0验证回调页面。地址栏中的“code=”后面有一串字符。这就是我们想要的Token信息。复制它,粘贴它并输入它,然后程序继续。跑。
3.从 API 读取数据
运行以下代码读取公众微博数据并显示结果。
结果=client.public_timeline()
print(json.dumps(result,indent=2,ensure_ascii=False))
通过查看数据结构,可以提取特定信息。例如,使用以下代码输出用户的微博昵称、位置和最新的微博文字。
数字=结果[“总数”]
打印(数字,“用户:”)
结果中的你[“状态”]:
打印(u[“用户”][“屏幕名称”])
打印(u[“用户”][“位置”])
打印(你[“文本”])
先进的