回顾API使用的流程

通过百度地图API的使用,我理解API调用的一般流程为:生成API规定格式的url->通过urllib读取url中数据->对json格式的数据进行解析。下一步,开始研究新浪微博API的使用。

准备

新浪微博开放平台是新浪微博API的使用平台。用微博账号登录该平台后,申请成为开发者,创建一个新应用后会得到唯一的App Key和App Secret。(注:应用不需要提交审核,只要创建新应用系统就会分配Key和Secret)在"我的应用/应用信息/基本信息"中也可以查到这两个信息。在这一页面中还有”我的应用/应用信息/高级信息“一项,点击进入并设置OAuth2.0授权回调页相关信息,如果不知道填什么好,可以设置为默认回调页:https://api.weibo.com/oauth2/default.html。这三项信息都是后面需要用到的,请复制保存到文档。

微博API新特点

与百度地图API相比,新浪微博API增加了OAuth2.0协议用于用户身份验证和授权。这里仅作简要说明(感兴趣的同学请查看网上文档示意图):通过该协议,第三方应用可以获得用户授权,然后用该许可从授权服务器获得令牌(Token),用于后续从API服务器查询数据时验证身份。

这一验证环节增加了url生成的复杂度,好在网站上已经有廖雪峰老师提供的SDK工具包:sinaweibopy(廖老师的github地址好像改过名字,因此网上很多旧链接无效,这个是新的有效链接),但是这一程序是基于python2环境编写的,python3有些系统库有更改,程序调用时经常报错。而作为python入门者,改写程序以适应python3环境无疑是一件困难的事。幸好有大神做了这一工作,感谢owolf针对python3改写的SDK:sinaweibopy3,我使用过,正常运行,大家可以下载。在这里同时推荐owolf的文章全网最详:python3调用新浪微博API接口获取数据。

简单示例

下面介绍一下我使用新浪微博API的过程,为新入门的同学提供参考。

1.参数设置

import sinaweibopy3

import webbrowser

import json

APP_KEY =' 填入你的App Key'

APP_SECRET=' 填入你的App Secret'

REDIRECT_URL =' 填入你的授权回调页'

注:

该文件需要和sinaweibopy3.py放在同一个文件夹里。

填写的三项信息都是在准备中提到的信息。

这里谈谈我粗心大意造成的一个bug,也给大家提个醒。一开始我运行程序时,每次都出现“重定向地址不匹配”的错误信息:

用微博帐号登录出错了!对第三方应用进行授权时出现错误,请您联系第三方应用的开发者:XXX 或者稍后再试。

错误码:21322 重定向地址不匹配

查找网上的解决方法,要设置回调页,但是在前面的步骤里我已经设置了,怎么还会有这个问题?后来看到一篇文章中提到回调页地址和程序中的REDIRECT_URL要一致,我想到了程序示例是http://api.weibo.com/oauth2/default.html,用的是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)

注意:这就是调用sinaweibopy3,实现OAuth2.0中用户授权->获取Token这一过程。当程序运行到client.request_access_token时,会弹出输入提示"please input code : ",要求输入code?这是什么意思呢?打开浏览器就会看到出现了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"])

进阶

如果要查询其他信息,比如获取用户的关注列表,怎么办呢?让我们来试着编写出相应的函数。

1.查看新浪微博API定义的url: https://api.weibo.com/2/friendships/friends.json 以及定义的请求参数:access_token, uid, screen_name, count, cursor, time_status。其中access_token需要填写,uid和screen_name分别是用户id和昵称,二者必填且只填一项。(注:接口升级后,只能为当前授权用户) count, cursor可使用默认参数。count是单页返回记录条数,默认为5,最大不超过5,cursor返回结果的游标。trim_status是显示status字段的开关,0:返回完整status字段,1:仅返回status_id,默认为1。

2.在sinaweibopy3.py中是如何实现public_timeline()呢:

def public_timeline(self):

result = _http_get('%s'% (self.api_url) + 'statuses/public_timeline.json',

access_token=self.access_token,

count=50,

page=1,

base_app=0,

)

return result

对照代码发现%s'% (self.api_url)就是https://api.weibo.com/2,我们只需要把 'statuses/public_timeline.json'改成'friendships/friends.json',并添加必填的请求参数,可以写出一个类似的函数:

def fs_friends(self):

result=_http_get('%s'% (self.api_url) + 'friendships/friends.json',

access_token=self.access_token,

screen_name='填入你自己的微博昵称' ,

trim_status=0,

)

return result

注:trim_status默认为1,设置为0才会得到完整status字段(其中包括最新微博正文)。

3.在自己的主程序中调用fs_friends()函数

参考原有的client.public_timeline(),得到以下代码:

result = client.fs_friends()

print(json.dumps(result,indent=2,ensure_ascii=False))

这样就可以看到关注的人的列表,包括基本信息及最新微博。编写以下代码,提取用户昵称、地点及最新微博内容:

for u in result['users']:

print("\n",u['screen_name'])

print(u['location'])

if('status' not in u):

print('not found\n')

continue

print(u['status']['text'])

以下是我还在思考的问题,欢迎交流指教,谢谢!

1.请求参数设置里count不大于5,我在实际运行程序时只看到4个关注用户及微博正文,能否读取更多用户,如何读取?

2.我还尝试了编写statuses/home_timeline(获取当前登录用户及其所关注(授权)用户的最新微博)的查询函数,但是因为参数设置问题,显示结果为Null(空)。我认为问题出在max_id参数上,说明中指出:若指定此参数,则返回ID小于或等于max_id的微博,默认为0,但是设多大合理?我有些困惑。

python新浪api_python编程之API入门: (二)python3中使用新浪微博API相关推荐

  1. python新浪api_python调用新浪微博API | 学步园

    前提:在新浪微博应用开发平台成功创建一个应用,并获得可用APP_KEY.APP_SECRET.CALLBACK_URL. 1.下载OAuth2的python版SDK,https://github.co ...

  2. python查询实时天气预报_微信公众号+python+新浪SAE实现实时天气预报功能

    本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天 ...

  3. 少儿编程之Scratch入门

    Scratch是 MIT (麻省理工学院) 设计的一套新的程序语言,可以用来创造交互式故事.动画.游戏.音乐等.支持中文界面,方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充 ...

  4. Python之路 - 网络编程之Socket

    Python之路 - 网络编程之Socket C/S架构 ? Socket ? 基于TCP ? 基于UDP ? Socket对象方法 ? C/S架构 ? 在网络通信中 , 一般是一方求一方应 , 求的 ...

  5. 新浪小编为你介绍留声机的古与今

    新浪小编为您介绍留声机的古与今 近年来,随着中国经济的快速发展,居民消费升级的不断推进,中国高端古典家具市场面临巨大的市场机会.尤其是近两年,留声机又逐渐出现在人们的视野当中,不论是抗战的老片还是前段 ...

  6. 【Python基础】网络编程之IP地址

    [Python基础]网络编程之IP地址 文章目录 IP 地址的介绍 1. IP 地址的概念 2. IP 地址的表现形式 2. IP 地址的作用 3. 查看 IP 地址 4. 检查网络是否正常 3. 小 ...

  7. Python 新浪实时新闻词云

    ''' Python 新浪实时新闻词云 by 郑瑞国 ''' from wordcloud import WordCloud import re import urllib.request impor ...

  8. UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

    UART0串口编程之在UC/OS-II中遭遇的危机 一.潜在的危机 1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂.尤其是接收状态为被动状态时,只能靠串行口中断来 ...

  9. [python]微信公众号+python+新浪SAE实现实时天气预报功能

    本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天 ...

  10. python新浪股票接口 2019_用python爬虫进行新浪腾讯股票数据采集

    今天带给大家的是从新浪和腾讯爬取股票数据,主要是因为新浪和腾讯的股票数据存储在js中,不需要再重新解析网页源码方便很多. 今天我们要实现的股票爬取设计内容丰富,包括: 1.一个股票数据(沪深)爬虫和选 ...

最新文章

  1. 百度发布全功能AI平台!
  2. 系列文章|OKR与敏捷(二):实现全栈敏捷
  3. 2018python培训-2018python深度学习核心技术培训班
  4. linux模糊查找子目录,linux怎么模糊查找一个文件
  5. 洛谷2774:[网络流24题]方格取数问题——题解
  6. 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值
  7. SQL Server中的表变量
  8. android jni socket
  9. Tomcat 日志文件分割
  10. atitit.提升兼容性最佳实践 o9o
  11. 最全面的 Spring 学习笔记
  12. python客户价值分析_Python实现RFM客户价值分析
  13. excel如何把多张表合并成一个表_excel如何快速把多个工作表合并到一个excel表
  14. pt100铂电阻的原理及用法
  15. VBA语言入门:一些简单语法在Excel应用实例
  16. 亲测无限坐席在线客服系统源码+新UI版
  17. FFT(快速博立叶变换)
  18. 给学弟学妹们写了个 15W 字的图解操作系统!
  19. 新诛仙手游服务器维护,诛仙手游10月17日更新维护公告 诛仙手游更新内容汇总...
  20. MATLAB中语音加噪,语音信号加噪和降噪处理

热门文章

  1. 海康SDK数据类型转java
  2. C#调用海康SDK播放视屏
  3. EOS钱包开发注意交易消失的情况
  4. LabVIEW学习笔记1
  5. 索引超出了数组界限(Microsoft.SqlServer.Smo)
  6. Halcon 学习笔记 (一)
  7. IDEA快捷键大全及修改IDEA快捷键
  8. 蓝牙芯片 csr8645 和 qcc3005 哪个比较
  9. 2019年注册测绘师备考历程
  10. PDF论文--字体未嵌入解决办法