雖然有第三方的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文檔