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文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM