使用微博API接口獲取數(shù)據(jù)

巧婦難為無(wú)米之炊。
數(shù)據(jù)獲取是數(shù)據(jù)分析的前提。許多網(wǎng)站會(huì)通過(guò)API接口向第三方開(kāi)放網(wǎng)站的部分?jǐn)?shù)據(jù)。新浪微博也不例外。你可以查看微博API列表。

本文將對(duì)如何使用微博API做初步性的介紹,以獲得基本概念和認(rèn)識(shí),方便之后的深入理解。

step1:使用python調(diào)用微博API,首先要下載python的SDK,即sinaweibopy

sinaweibopy是python專用的支持微博API的OAuth 2客戶端,無(wú)依賴,100%純Py,單個(gè)文件,代碼簡(jiǎn)潔,運(yùn)行可靠,也是新浪微博官方推薦的Python SDK。

你可以通過(guò)pip直接安裝:

pip install sinaweibopy

SDK是什么?SDK的英文全稱是software development kit(軟件開(kāi)發(fā)工具包)。簡(jiǎn)單來(lái)講,它是一個(gè)代碼庫(kù),包含著可復(fù)用的代碼,這些代碼用來(lái)開(kāi)發(fā)你的應(yīng)用。你寫(xiě)一個(gè)app的代碼時(shí),不需要重復(fù)去寫(xiě)諸如draw text on the actual screen這樣的代碼。利用SDK可以幫你做到這些。總之,所有這些代碼庫(kù)和其他一些工具,就構(gòu)成了我們所說(shuō)的SDK。

step2:理解新浪微博的授權(quán)機(jī)制,即OAuth 2

API的調(diào)用是需要獲取用戶身份認(rèn)證的(用戶授權(quán))。目前微博開(kāi)放平臺(tái)用戶身份鑒權(quán)主要采用的是OAuth2.0

關(guān)于OAuth2.0協(xié)議的授權(quán)流程可以參考下面的流程圖,其中Client指第三方應(yīng)用(即我們?cè)诘谌絼?chuàng)建的自己的應(yīng)用),Resource Owner指用戶,Authorization Server是我們的授權(quán)服務(wù)器,Resource Server是API服務(wù)器。

從流程圖中可以看到,為調(diào)用API服務(wù)器內(nèi)容,需要將access token告訴API服務(wù)器;而access token是在用戶授權(quán)后由新浪(授權(quán)服務(wù)器)返回給我們創(chuàng)建的應(yīng)用的;為完成用戶授權(quán),我們的應(yīng)用首先要將授權(quán)頁(yè)面給到用戶(authorization request)。

微博API的授權(quán)機(jī)制(來(lái)自微博開(kāi)放平臺(tái)開(kāi)發(fā)文檔)

用戶授權(quán)后瀏覽器的URL大概長(zhǎng)這樣:https://api.weibo.com/oauth2/default.html?code=0acebd79dc4cdd04879699e803af038a

我們需要向新浪授權(quán)服務(wù)器提交code后面的字符串才能獲得access token。相當(dāng)于告訴新浪服務(wù)器我們的應(yīng)用已經(jīng)得到用戶的授權(quán),現(xiàn)在可以訪問(wèn)用戶的數(shù)據(jù)了,于是授權(quán)服務(wù)器給到我們通行證(access token),就可以從API服務(wù)器獲取微博數(shù)據(jù)了。

理解了上面的機(jī)制,我們才知道如何編寫(xiě)代碼來(lái)調(diào)用API。

step3:在微博開(kāi)放平臺(tái)創(chuàng)建自己的應(yīng)用

現(xiàn)在我們來(lái)創(chuàng)建自己的應(yīng)用。創(chuàng)建應(yīng)用的目的是為了獲得app key和app secret。

我們通過(guò)微連接來(lái)創(chuàng)建移動(dòng)應(yīng)用。你也可以創(chuàng)建其它類型的應(yīng)用。應(yīng)用創(chuàng)建完成后,會(huì)分配唯一的app key和app secret。你可以在“我的應(yīng)用-應(yīng)用信息-基本信息”中查詢,這將在授權(quán)中用到。注意:不需要提交審核,需要的只是app key和app secret。

如果是站外網(wǎng)頁(yè)應(yīng)用或移動(dòng)客戶端應(yīng)用,出于安全性考慮,需要在平臺(tái)網(wǎng)站填寫(xiě)redirect_url(授權(quán)回調(diào)頁(yè)),才能使用OAuth2.0。填寫(xiě)地址為“我的應(yīng)用>應(yīng)用信息>高級(jí)信息”。這里,我們將授權(quán)回調(diào)頁(yè)面和取消授權(quán)回調(diào)頁(yè)均設(shè)置為默認(rèn)回調(diào)頁(yè):https://api.weibo.com/oauth2/default.html

我的應(yīng)用-應(yīng)用信息-高級(jí)信息

step4:python代碼實(shí)現(xiàn)

首先,導(dǎo)入需要的模塊:

from weibo import APIClient
import webbrowser   #python內(nèi)置的包,支持對(duì)瀏覽器進(jìn)行操作

利用微博SDK創(chuàng)建我們的應(yīng)用:

APP_KEY = '123456'
APP_SECRET = 'abc123xyz456'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'      #回調(diào)授權(quán)頁(yè)面,用戶完成授權(quán)后返回的頁(yè)面
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)

得到授權(quán)頁(yè)面的url(https://api.weibo.com/oauth2/authorize?redirect_uri=https%3A//api.weibo.com/oauth2/default.html&response_type=code&client_id=729983294)。利用webbrowser打開(kāi)這個(gè)url,這會(huì)會(huì)喚起瀏覽器,打開(kāi)https://api.weibo.com/oauth2/default.html?code=abc123

url=client.get_authorize_url() #得到授權(quán)頁(yè)面的url
webbrowser.open_new(url)  #打開(kāi)這個(gè)url
打開(kāi)授權(quán)頁(yè)面的url

用戶完成授權(quán)后的url長(zhǎng)這樣:https://api.weibo.com/oauth2/default.html?code=abc123。我們需要code=后面的內(nèi)容。

print '輸入url中code后面的內(nèi)容后按回車(chē)鍵:'
code = raw_input()

利用code得到access token:

r = client.request_access_token(code)
access_token = r.access_token # 新浪(授權(quán)服務(wù)器)返回的token
expires_in = r.expires_in

可以打印r看看里面有什么東西:

print(r)
{'access_token': u'abcqwe123', 'expires': 1662109746, 'expires_in': 1662109746, 'uid': u'2164581421'}

設(shè)置得到的access_token,就可以直接調(diào)用API了:

client.set_access_token(access_token, expires_in)

輸出最新的公共微博:

print(client.statuses__public_timeline)

返回的具體內(nèi)容可以查看微博API文檔。

例如,我們可以輸出用戶的昵稱、簡(jiǎn)介、位置和微博:

for i in range(0,length):
    print(u'昵稱:'+statuses[i]['user']['screen_name'])
    print(u'簡(jiǎn)介:'+statuses[i]['user']['description'])
    print(u'位置:'+statuses[i]['user']['location'])
    print(u'微博:'+statuses[i]['text'])
最新的公共微博

參考資料:

python調(diào)用微博API
如何通過(guò)python調(diào)用新浪微博的API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容