使用新浪微博开放平台api同步微博内容至自己网站(新浪微博ID获取用户发布过的历史微博内容研究了)
优采云 发布时间: 2022-02-28 05:07使用新浪微博开放平台api同步微博内容至自己网站(新浪微博ID获取用户发布过的历史微博内容研究了)
上面调用的是通过微博ID获取用户发布的历史微博内容,所以研究了一下新浪微博提供的API。
1 首先,在微博开放中心下的“创建应用”下创建一个应用。根据需要填写申请信息。填写完成后,无需提交审核。您只需要应用程序密钥和应用程序秘密
2 在“微博开放平台”的“管理中心”找到刚刚创建的应用,点击应用,点击左侧“应用信息”一栏,会看到“应用密钥”和“应用程序秘密”。稍后将在程序中使用这些东西。然后点击“应用信息”下“高级信息”中的“编辑”按钮,将“授权回调页面”设置为:,“取消授权回调页面”设置为:。
3 去下载新浪微博SDK,python有一个简单的安装方法:直接在命令行输入:
sudo pip install sinaweibopy
4 实例验证码,通过微博提供的API抓取授权用户及其关注者的微博:这里需要注意的是,当浏览器弹出页面时,必须先点击“授权”(OAuth 2认证在这里执行,我了解到,用户访问我的应用程序后,页面被定向到新浪服务器,然后用户向新浪服务器输入信息,授权我的应用程序访问用户数据,网址类似:复制代码后代码到控制端,程序需要读取数据2024222384d5dc88316d21675259d73a
#!/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后面的内容,按回车键:
在现有浏览器会话中创建了一个新窗口。
2024222384d5dc88316d21675259d73a #注意这里要在上面授权浏览器的URL中输入code后面的东西
最后,mongo 中的数据如下所示:
in_reply_to_screen_name”:“”,“user”:{“bi_followers_count”:99,“domain”:“rebol”,“avatar_large”:“”,“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 》:《银联移动支付首席产品架构师;《Programming》和《Java Sleepless》的作者,“followers_count”:100833,“location”:“台湾台北市”,“verified_trade”:“”,“mbtype”:2,“
新浪微博API无法通过指定ID提取用户的微博内容,除非是高级授权用户。像我这样的刁四没有这样的福气。要捕获少量用户,可以关注所有捕获的用户,然后授权用户捕获自己和朋友的微博。不太可行。看来,对于大量用户来说,获取微博数据的唯一方法就是编写爬虫来解析页面。