使用python调用新浪微博API的小经历

Python标准库里有专门处理Json的标准库--json库。使用的是新浪微博Python SDK。

刚开始走了很多弯路,Python SDK的介绍页面内容有点少只是简单的介绍了如何使用这个SDK用新浪微博接入,至于如何获取用户的信息没有提到。Python SDK是第三方的基于2.7的,我见过有人改写的基于3.2的,链接忘存了。

1、新浪微博python SDK的使用

首先、需要自己申请为开发者,先创建一个一个应用,获得AppKey和AppSecret。如图所示:

其次、要弄懂这个Oauth2的授权机制,这在http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E有介绍。

还有要在高级信息中设置好正确的回调页面,如果没有自己的网站,最好是将回调页面设置成新浪微博提供的:https://api.weibo.com/oauth2/default.html,如图所示:

接下来看测试用的代码:

# _*_ coding: utf-8 _*_ 
  
import os 
import sys 
import weibo 
import webbrowser 
import json 
  
APP_KEY = '你的appkey'
MY_APP_SECRET = '你的appsecret'
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' 
#这个是设置回调地址,必须与那个”高级信息“里的一致 
  
#请求用户授权的过程 
client = weibo.APIClient(APP_KEY, MY_APP_SECRET) 
  
authorize_url = client.get_authorize_url(REDIRECT_URL) 
  
#打开浏览器,需手动找到地址栏中URL里的code字段 
webbrowser.open(authorize_url) 
  
#将code字段后的值输入控制台中 
code = raw_input("input the code: ").strip() 
  
#获得用户授权 
request = client.request_access_token(code, REDIRECT_URL) 
  
#保存access_token ,exires_in, uid 
access_token = request.access_token 
expires_in = request.expires_in 
uid = request.uid 
  
#设置accsess_token,client可以直接调用API了 
client.set_access_token(access_token, expires_in) 
  
#get_results = client.statuses__mentions() 
#get_results = client.frientdships__friends__ids() 
#get_results = client.statuses__user_timeline() 
#get_results = client.statuses__repost_timeline(id = uid) 
#get_results = client.search__topics(q = "笨NANA") 
get_results = client.statuses__friends_timeline() 
print "************the type of get_results is : "
print type(get_results) 
#print get_results[0][0]['text'] 
get_statuses = get_results.__getattr__('statuses') 
print type(get_statuses) 
print get_statuses[0]['text'] 
  
json_obg = json.dumps(get_results) 
print type(json_obg) 
#resultsdic = json.load(json_obg) 
  
  
print uid 
  
  
# get_json = json.dumps(client.statuses__user_timeline()) 
#decodejson = json.loads(get_results) 
#print decodejson 
  
#file = open("result.txt", "w") 
#file.write(decodejson) 
#file.close() 
print "*************OK**********"


2、解析API返回来的Json数据

我想的是先要解决新浪微博API返回来的Json数据如何解析,里面很多东西都不是自己想要的,如何将转化为python对象。OK,直接去查找Python 如何操作json数据的知识,官方文档:http://docs.python.org/library/json.html,还有这个不错的博客:http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html

如使用新浪的这个API:statuses__friends_timeline()

以为它直接返回的数据就能用,就直接json.dumps()了,但是总是出错,看了上面的博客文章才想到测试下它返回的数据类型是什么,原来自己一直认为返回的是json对象,直接使用就可以了。

get_results = client.statuses__friends_timeline() 
print "************the type of get_results is : "
print type(get_results)

用这个测试发现返回的类型是<class weibo.JsonOject>这才想到了要看看weibo这个库的的帮助文档,这个不是看它网站上给的,而是在python终端中:import weibo,然后help(weibo)中找的,找到了:

里面给出了取出某个属性的方法,既使用这个方法可以取出Json对象某个”键名“所对应的”键值“。其实应该想到既然返回的是一个类对象,那么这个类肯定有对这些对象属性的一些操作。

测试代码如下:

get_statuses = get_results.__getattr__('statuses') 
print type(get_statuses) 
print get_statuses[0]['text']

取出的属性在python中是list类型,那么就可以直接对list类型做一些操作了。

最终效果如入所示:

感想:学习时看相关文档、文章要沉的住气,专心把文档看明白了,不能走马观花的浏览一下,不然弄的还是不清不楚,自己一写就出错,并且错了不知道如何找原因,感觉是这样按档写的啊,怎么会错呢,浪费时间

转载: http://www.51bigfool.com/%e4%bd%bf%e7%94%a8python%e8%b0%83%e7%94%a8%e6%96%b0%e6%b5%aa%e5%be%ae%e5%8d%9aapi%e7%9a%84%e5%b0%8f%e7%bb%8f%e5%8e%86.html

你可能感兴趣的:(使用python调用新浪微博API的小经历)