• Python自动化发微博(使用原生API)


    虽然有第三方的Python库,但也只是对request请求作简单的封装。所以以下将不使用第三方库。

    创建应用

    要使用微博的API,需先要有个应用。随便哪种应用都行,注册应用的主要目的是要获得App Key 和App Secret。

    获取access_token

    API的调用需要登录授权获得access_token。这个过程需要分为两步进行,首先获取所需要的code,然后再去获取access_token。

    调用https://api.weibo.com/oauth2/authorize接口,获得code。

    • client_id:申请应用时分配的AppKey
    • redirect_url:授权回调地址,站外应用需与设置的回调地址一致
    import requests
    try:
        from urllib.parse import urlencode
    except ImportError:
        from urllib import urlencode
    
    API_KEY = 'xxx'
    REDIRECT_URI = 'https://www.cnblogs.com/lfri/'
    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())

    调用https://api.weibo.com/oauth2/access_token接口,获得access_token

    • client_id:申请应用时分配的AppKey。
    • client_secret:申请应用时分配的AppSecret。
    • grant_type:请求的类型,填写authorization_code
    • code:调用authorize获得的code值
    • redirect_uri:回调地址,需需与注册应用里的回调地址一致。
    import requests
    import json
    try:
        from urllib.parse import urlencode
    except ImportError:
        from urllib import urlencode
    
    API_KEY = 'xxx'
    API_SECRET = 'xxx'
    CODE = 'a7000e13f766d586b1970f007aa615d6'
    REDIRECT_URI = 'https://www.cnblogs.com/lfri/'
    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': 'xxx',
      'remind_in': '157679999',
      'expires_in': 157679999,
      'uid': 'xxx',
      'isRealName': 'true'
    }

    根据返回的数据,access_token的值就是我们要的。其中remind_in的值是access_token的有效期,单位为秒,我们可以看到,这个时间有5年之久,足够我们用了。

    发送文字微博

    调用接口https://api.weibo.com/2/statuses/share.json

    请求必须用POST方式提交,有上传图片时需要采用multipart/form-data编码方式,没有上传图片则采用正常编码方式;

    import requests
    
    access_token =  'xxx'
    
    url = "https://api.weibo.com/2/statuses/share.json"
    #构建POST参数
    params = {
    "access_token": access_token,
    "status": "百度一下!https://www.baidu.com"
    }
    #POST请求,发表文字微博
    res = requests.post(url,data = params)
    print(res.text)

    发送图片微博

    import requests
    
    access_token =  'xxx'
    
    url = "https://api.weibo.com/2/statuses/share.json"
    #构建POST参数
    params = {
        "access_token": access_token,
        "status": "小年快乐!https://www.baidu.com"
    }
    #构建二进制multipart/form-data编码的参数
    files={
    "pic":open("nian.jpg","rb")
    }
    #POST请求,发表文字微博
    res = requests.post(url,data = params, files = files)
    #print(res.text)

    效果:

    参考链接:

    1. Python自动化发微博

    2. 微博开放平台API文档

  • 相关阅读:
    一台服务器Nginx配置多个域名(一级域名或二级)
    Nginx启动和停止
    git删除本地及远程分支
    纯js实现复制内容到剪切板
    js 实现字符串转日期进行比较大小
    git 本地分支与远程分支 新建/删除/合并
    设置Git 记住密码
    炒鸡简单的javaScript的call和apply方法
    如何打war包
    Git 查看远程分支、本地分支、删除本地分支及远程分支
  • 原文地址:https://www.cnblogs.com/lfri/p/12208789.html
Copyright © 2020-2023  润新知