Python調用微博API

    上頭叫經過微博ID獲取用戶公佈過的歷史微博內容,因而研究了下新浪微博提供的APIhtml


    1 首先在微博開放中心下「建立應用」建立一個應用,應用信息那些隨便填,填寫完成後,不需要提交審覈,需要的僅僅是那個app-key和app-secretpython


    2 在「微博開放平臺」的「管理中心」找到剛纔建立的應用,點開這個應用,點開左邊「應用信息」欄,會看見「App key」和「App Secret」的字樣,這兩個東西是要在後面程序中使用的。而後在「應用信息」下的「高級信息」點擊「編輯」button,將「受權回調頁面」設置爲:https://api.weibo.com/oauth2/default.html,將「取消受權回調頁」也設置爲:https://api.weibo.com/oauth2/default.html。git


    3 再去http://github.liaoxuefeng.com/sinaweibopy/下載新浪微博SDK,python有個簡單的安裝方式:直接在命令行下鍵入:github

sudo pip install sinaweibopy


    4 實例驗證代碼,經過微博提供的API抓取受權用戶及其關注好友的微博:這裏需要注意的是在瀏覽器彈出一個頁面,要先點擊「受權」(這裏進行的OAuth 2認證,我理解爲就是用戶訪問個人應用後將頁面導向新浪server而後用戶輸入信息到新浪server後受權給個人應用訪問用戶數據,這裏我將的微博受權給如下的程序了),受權後瀏覽器中的URL相似:https://api.weibo.com/oauth2/default.html?code=2024222384d5dc88316d21675259d73a將code後面那個拷貝到控制端,程序需要讀入2024222384d5dc88316d21675259d73a這個數據
web

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from weibo import APIClient
import webbrowser#python內置的包
import pymongo
from pymongo import MongoClient
APP_KEY = '剛纔那個App Key'#注意替換這裏爲本身申請的App信息
APP_SECRET = '剛纔那個App Secret'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'#回調受權頁面
#利用官方微博SDK
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
#獲得受權頁面的url,利用webbrowser打開這個url
url = client.get_authorize_url()
print url
webbrowser.open_new(url)
#獲取code=後面的內容
print '輸入url中code後面的內容後按回車鍵:'
code = raw_input()
#code = your.web.framework.request.get('code')
#client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,類似abc123xyz456
expires_in = r.expires_in
# 設置獲得的access_token
client.set_access_token(access_token, expires_in)
'''
#可以打印下看看裏面都有什麼東西
#print client.statuses__public_timeline()
statuses = client.statuses__public_timeline()['statuses']
length = len(statuses)
#輸出了部分信息
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']
'''
#獲取受權用戶及其關注好友的微博信息並寫入mongo數據庫
pagenum=1#微博API返回的微博數據是分頁形式的,在API中經過設置頁碼來讀取數據
write_location=MongoClient('localhost',27017)['data']['weiboapi_test']#這裏是我本身的mongo數據庫,不用mongo存儲可以凝視掉
while(True):
	data=client.statuses.friends_timeline.get(page=pagenum)['statuses']
	if data:
		pagenum+=1#不斷獲取新的頁面
		for i in range(len(data)):
			write_location.insert(data[i])#不用mongo存儲可以凝視掉,直接改成print data[i]打印微博數據
	else:#假設讀取完數據則結束
		break


在命令行運行:

python weibo_api.py #若是上面程序文件命名爲weibo_api.py數據庫


會出現如下的字樣:編程


輸入url中code後面的內容後按回車鍵:api

已在現有的瀏覽器會話中建立新的窗體。瀏覽器

2024222384d5dc88316d21675259d73a                   #注意這裏輸入上面那個受權後的瀏覽器中URL中code後面的東東

架構

最後mongo中的數據相似於這樣:


{ "_id" : ObjectId("5397d1709b6827148d2048bb"), "reposts_count" : 1, "favorited" : false, "in_reply_to_user_id" : "", "truncated" : false, "text" : "我不是漫畫大師,也沒主持康熙來了 [衰] 咱們仨人,名字差很是多耶!... 怎麼不說很是喜歡我辦的北大 [偷笑] ... 這樣迷糊曾經是怎麼經過歷史考試的呀!歷史上這麼多人名要記。", "created_at" : "Wed Jun 11 08:57:29 +0800 2014", "mlevel" : 0, "idstr" : "3720199951556592", "mid" : "3720199951556592", "visible" : { "type" : 0, "list_id" : 0 }, "attitudes_count" : 2, "pic_urls" : [ ], "in_reply_to_screen_name" : "", "user" : { "bi_followers_count" : 99, "domain" : "rebol", "avatar_large" : "http://tp1.sinaimg.cn/1614282004/180/40042297177/1", "verified_source" : "", "ptype" : 3, "statuses_count" : 5902, "allow_all_comment" : true, "id" : 1614282004, "verified_reason_url" : "", "city" : "1", "province" : "71", "block_app" : 0, "follow_me" : false, "verified_reason" : "銀聯移動支付首席產品架構師;《編程ING》《Java夜未眠》做者", "followers_count" : 100833, "location" : "臺灣 臺北市", "verified_trade" : "", "mbtype" : 2, "verified_source_url" : "", "profile_url" : "rebol", "block_word" : 0, "avatar_hd" : "http://ww4.sinaimg.cn/crop.0.0.179.179.1024/6037fd14gw1ebr3jqum0wj2050050jrl.jpg", "star" : 0, "description" : "", "friends_count" : 106, "online_status" : 0, "mbrank" : 1, "allow_all_act_msg" : true, "profile_image_url" : "http://tp1.sinaimg.cn/1614282004/50/40042297177/1", "idstr" : "1614282004", "verified" : true, "geo_enabled" : false, "class" : 1, "screen_name" : "蔡學鏞", "lang" : "zh-cn", "weihao" : "", "remark" : "", "favourites_count" : 6, "name" : "蔡學鏞", "ability_tags" : "開發人員", "url" : "", "gender" : "m", "created_at" : "Mon Aug 09 12:56:16 +0800 2010", "worldcup_guess" : 0, "verified_type" : 0, "following" : true }, "in_reply_to_status_id" : "", "comments_count" : 15, "geo" : null, "id" : NumberLong("3720199951556592"), "source" : "<a href=\"http://weibo.com/\" rel=\"nofollow\">微博 weibo.com</a>" }

新浪微博API不能經過指定ID提取用戶的微博內容,除非是高級受權用戶,我這種屌絲沒有這種福啊。抓取少許用戶可以將抓取的用戶全部關注後而後經過受權用戶抓取其自己和關注好友的微博。可行性不大。大量用戶的微博數據獲取彷佛僅僅有寫爬蟲解析頁面了。

相關文章
相關標籤/搜索