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提取用户的微博内容,除非是高级受权用户,我这种屌丝没有这种福啊。抓取少许用户可以将抓取的用户全部关注后而后经过受权用户抓取其自己和关注好友的微博。可行性不大。大量用户的微博数据获取彷佛仅仅有写爬虫解析页面了。

相关文章
相关标签/搜索