使用微博提供的API接口发送微博

使用微博提供的API接口发送微博

创建微博应用

image-20220505132458106

微博对微博应用开放API接口,不对个人账号开放,我们要先注册一个微博应用,将自己电脑作为应用服务器。如果用户想通过API接口发微博,那么用户要先向微博应用授权,微博应再帮这个用户发微博。

一个微博应用可以提供给很多用户使用。

获取用户授权的过程

这个过程需要三方共同参与:用户,微博服务器,应用服务器。创建微博应用后,我们会拿到一对 App Key 和 App Secret ,应用服务器根据他们生成一个链接,发送给用户。用户点击链接,在网页上登录微博,登录成功后返回CODE。将CODE发送回应用服务器,应用服务器拿着CODE向微博服务器申请这个账号的access_token,有了access_token,应用服务器就有了操作用户微博账号的权限。应用服务器可以通过API接口向微博服务器发送发微博、删微博、评论微博等等各种操作。

设置安全域名

所谓设置安全域名,只要能通过网址 http://域名/xxxxxxxxxx.txt 访问到微博提供的文件即可,我没有完成域名备案,是通过 github pages 完成验证的。

  1. 首先要注册一个域名,注册时要注意域名不能以top,xyz等结尾,而是需要以com,cn等结尾。
  2. 域名要通过备案,这个过程简单,但是需要两三天的时间。
  3. 将域名解析到应用服务器的IP。
  4. 在应用的设置界面里,将这个域名添加为安全域名,这个过程中微博会提供一个txt文件。
  5. 下载txt文件,上传到应用服务器,设置nginx的根路径指向这个文件。参考

其他需要注意的问题

主要是在申请权限的时候需要注意。

  1. 在应用的设置界面里,添加应用服务器的IP,微博服务器只接收这个IP发出的请求。
  2. 发帖频率是受到限制的,每小时只能发送30条微博,超出会被封禁一天。

最后,Python代码可以参考了 lfri 的博客

# /usr/bin/env python3

import requests
import json
try:
    from urllib.parse import urlencode
except ImportError:
    from urllib import urlencode

# 获取到的 secret key
API_KEY = '8888888'
API_SECRET = '4fxxxxxxxxxxxxxxxxxxxxx190cf2'

# REDIRECT_URI要在微博应用里设置过
REDIRECT_URI = 'http://talk.mapengfei.xyz/'
authorization_url = 'https://api.weibo.com/oauth2/authorize'

def authorize_url():
    params = {
        'client_id': API_KEY,
        'redirect_uri': REDIRECT_URI
    }
    return "{0}?{1}".format(authorization_url, urlencode(params))

print(authorize_url())

# 用户授权
# 点开打印出来的网址,然后在网页上进行确认,页面自动跳转到重定向的页面。在地址栏能获取到code。

CODE = 'cxxxxxxxxxxxxxxxxxxxd684e3df'
access_token_url = 'https://api.weibo.com/oauth2/access_token'
params = {
    'client_id': API_KEY,
    'client_secret': API_SECRET,
    'grant_type': 'authorization_code',
    'code': CODE,
    'redirect_uri': REDIRECT_URI
}
res = requests.post(access_token_url, data=params)
token = json.loads(res.text)
print(token)

access_token = token['access_token']
access_token = '2.00FOqxxxxxxxxxxxxxxxxxxRgoqC' 

# 发送微博
url = "https://api.weibo.com/2/statuses/share.json"

# 必须包含自己设置的安全域名,https://github.pengfeima.cn,否则会发送失败
params = {
    "access_token": access_token,
    "status": "小年快乐!https://github.pengfeima.cn"
}

files={
    "pic":open("temp.png","rb")
}

# POST请求,发表文字微博
res = requests.post(url,data = params, files = files)

# 评论这条微博
post_id = res.json()['id']
url = "https://api.weibo.com/2/comments/create.json"
params = {
    "access_token": access_token,
    'id'          : post_id,
    'comment'     : "评sdfadsfadsf论"
}
res = requests.post(url,data = params)
参考
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值