巧婦難為無米之炊。
數據獲取是數據分析的前提。許多網站會通過API接口向第三方開放網站的部分數據。新浪微博也不例外。你可以查看微博API列表。
本文將對如何使用微博API做初步性的介紹,以獲得基本概念和認識,方便之后的深入理解。
step1:使用python調用微博API,首先要下載python的SDK,即sinaweibopy
sinaweibopy是python專用的支持微博API的OAuth 2客戶端,無依賴,100%純Py,單個文件,代碼簡潔,運行可靠,也是新浪微博官方推薦的Python SDK。
你可以通過pip直接安裝:
pip install sinaweibopy
SDK是什么?SDK的英文全稱是software development kit(軟件開發工具包)。簡單來講,它是一個代碼庫,包含著可復用的代碼,這些代碼用來開發你的應用。你寫一個app的代碼時,不需要重復去寫諸如draw text on the actual screen這樣的代碼。利用SDK可以幫你做到這些。總之,所有這些代碼庫和其他一些工具,就構成了我們所說的SDK。
step2:理解新浪微博的授權機制,即OAuth 2
API的調用是需要獲取用戶身份認證的(用戶授權)。目前微博開放平臺用戶身份鑒權主要采用的是OAuth2.0。
關于OAuth2.0協議的授權流程可以參考下面的流程圖,其中Client指第三方應用(即我們在第三步創建的自己的應用),Resource Owner指用戶,Authorization Server是我們的授權服務器,Resource Server是API服務器。
從流程圖中可以看到,為調用API服務器內容,需要將access token告訴API服務器;而access token是在用戶授權后由新浪(授權服務器)返回給我們創建的應用的;為完成用戶授權,我們的應用首先要將授權頁面給到用戶(authorization request)。
用戶授權后瀏覽器的URL大概長這樣:https://api.weibo.com/oauth2/default.html?code=0acebd79dc4cdd04879699e803af038a
我們需要向新浪授權服務器提交code后面的字符串才能獲得access token。相當于告訴新浪服務器我們的應用已經得到用戶的授權,現在可以訪問用戶的數據了,于是授權服務器給到我們通行證(access token),就可以從API服務器獲取微博數據了。
理解了上面的機制,我們才知道如何編寫代碼來調用API。
step3:在微博開放平臺創建自己的應用
現在我們來創建自己的應用。創建應用的目的是為了獲得app key和app secret。
我們通過微連接來創建移動應用。你也可以創建其它類型的應用。應用創建完成后,會分配唯一的app key和app secret。你可以在“我的應用-應用信息-基本信息”中查詢,這將在授權中用到。注意:不需要提交審核,需要的只是app key和app secret。
如果是站外網頁應用或移動客戶端應用,出于安全性考慮,需要在平臺網站填寫redirect_url(授權回調頁),才能使用OAuth2.0。填寫地址為“我的應用>應用信息>高級信息”。這里,我們將授權回調頁面和取消授權回調頁均設置為默認回調頁:https://api.weibo.com/oauth2/default.html
step4:python代碼實現
首先,導入需要的模塊:
from weibo import APIClient
import webbrowser #python內置的包,支持對瀏覽器進行操作
利用微博SDK創建我們的應用:
APP_KEY = '123456'
APP_SECRET = 'abc123xyz456'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html' #回調授權頁面,用戶完成授權后返回的頁面
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
得到授權頁面的url(https://api.weibo.com/oauth2/authorize?redirect_uri=https%3A//api.weibo.com/oauth2/default.html&response_type=code&client_id=729983294)。利用webbrowser打開這個url,這會會喚起瀏覽器,打開https://api.weibo.com/oauth2/default.html?code=abc123
url=client.get_authorize_url() #得到授權頁面的url
webbrowser.open_new(url) #打開這個url
用戶完成授權后的url長這樣:https://api.weibo.com/oauth2/default.html?code=abc123。我們需要code=后面的內容。
print '輸入url中code后面的內容后按回車鍵:'
code = raw_input()
利用code得到access token:
r = client.request_access_token(code)
access_token = r.access_token # 新浪(授權服務器)返回的token
expires_in = r.expires_in
可以打印r看看里面有什么東西:
print(r)
{'access_token': u'abcqwe123', 'expires': 1662109746, 'expires_in': 1662109746, 'uid': u'2164581421'}
設置得到的access_token,就可以直接調用API了:
client.set_access_token(access_token, expires_in)
輸出最新的公共微博:
print(client.statuses__public_timeline)
返回的具體內容可以查看微博API文檔。
例如,我們可以輸出用戶的昵稱、簡介、位置和微博:
for i in range(0,length):
print(u'昵稱:'+statuses[i]['user']['screen_name'])
print(u'簡介:'+statuses[i]['user']['description'])
print(u'位置:'+statuses[i]['user']['location'])
print(u'微博:'+statuses[i]['text'])