用python发微博

前言

前不久萌生了学习下python的想法,于是乎本着练手的目的做了这么个发微博的小玩意。

注册

新浪weibo允许第三方以应用的方式发布微博,所以我们首先要做的就是通过新浪微博开放平台注册一个应用:

weibo_open

打开上述平台的页面,用微博账号登录,然后点立即接入开始注册自己的应用,按提示操作即可。如下是我自己创建好的应用,名为share.cn

app

在个人应用的应用信息-基本信息-应用基本信息处找到自己的App Key和App Secret。并在高级信息中设置自己的授权回调页(所谓授权回调页意即通过weibo账号授权个人应用之后的跳转页,设置什么都没差,这里我设置为个人的微博首页)

授权

获取code

很多人查看新浪的sdk之后,可能选择了对应的python sdk,其实没必要,用接口反而变得复杂了,我们这里不用他的接口。
一般第三方应用通过微博接口来发送微博都是要用户授权的,想必各位看官亦如此做过,那么授权页面是哪个嘞

def get_auth_url(client_id, redirect_uri):
    return '%s%s?%s' % ('https://api.weibo.com/oauth2/', 'authorize',
                            _encode_params(client_id=client_id,
                                           response_type='code',
                                           redirect_uri=redirect_uri))

client_id是自己的app_keyredirect_uri是上一步填写的授权回调页地址,复制生成的链接到浏览器打开,输入自己的微博账号进行授权。

auth

授权成功后,浏览器便会跳转到我们设置的授权回调页,从浏览器的地址栏中找到code字段,就有了授权code。

获取token

接下来需要通过code获取到token,这个token就是我们发微博的凭证:

def get_access_token(app_key, app_secret, redirect_url):
    #通过url_auth输入weibo账号进行登录
    #从登录成功后的回调url获得code
    url_auth = get_auth_url(app_key, redirect_url)
    print('[get_access_token]' + url_auth)

    code = input('Input code:')
    url_get_token = "https://api.weibo.com/oauth2/access_token"

    payload = {
    "client_id":app_key,
    "client_secret":app_secret,
    "grant_type":"authorization_code",
    "code":code,
    "redirect_uri":redirect_url
    }
    
    #获取access_token
    res = requests.post(url_get_token, data=payload)
    resj = json.loads(res.text)
    return resj['access_token']

token只需获取一次,后面可以一直复用这个token,有效期好像是5 year

发微博

安全域名

新浪微博要求,每条通过应用接口发送的微博内容都必须包含安全域名字段,需要先在应用信息-基本信息-应用基本信息配置一个安全域名,我设置了weibo.com

调用接口

这里的安全域名还是使用了自己的微博主页,包含weibo.com即可:

def share_weibo(text, img):
    access_token = '你的token'
    #安全域名,sina限制文本内容必须有此字段
    safe_domain = 'https://weibo.com/5296864682/profile?topnav=1&wvr=6'
    url_share = 'https://api.weibo.com/2/statuses/share.json'
    
    payload = {
        'access_token':access_token,
        'status':text + ' ' + safe_domain
    }
    if img :
        files = {
            "pic":img
        }
        res = requests.post(url_share, data = payload, files = files)
    else :
        res = requests.post(url_share, data = payload)
    return res

测试

写个测试代码:

if __name__ == '__main__':
    f = open(r"./share.jpeg", "rb")
    text = input('Input text:')
    res = share_weibo(text, f)
    f.close()

运行:

[root@localhost share_weibo]# py sina_weibo.py 
Input text:hello sky

成功发布一条图片微博:

hello sky

如果你想发个视频,可惜了,新浪没有提供对应的接口。我们只能通过在文本中包含已有视频的链接来达到类似的效果。比如要发这个视频:http://t.cn/Ail9eamb?m=4396440127989330&u=5296864682
运行:

[root@localhost share_weibo]# py sina_weibo.py 
Input text:http://t.cn/Ail9eamb?m=4396440127989330&u=5296864682

成功发送一条视频的微博:

video

可以在我的微博看到刚刚发送的这条视频。

结语

还有一些接口比如评论之类的,可以自己测试下,在接口管理都可以看到对应的介绍。
附上源码:https://github.com/Fireplusplus/share_weibo 

个人主页:https://fireplusplus.github.io

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fireplusplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值