使用新浪微博开放平台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”:“rebo​​l”,“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提取用户的微博内容,除非是高级授权用户。像我这样的刁四没有这样的福气。要捕获少量用户,可以关注所有捕获的用户,然后授权用户捕获自己和朋友的微博。不太可行。看来,对于大量用户来说,获取微博数据的唯一方法就是编写爬虫来解析页面。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线