我參考了這篇文章《利用微信公眾號的圖片上傳接口,創造屬於自己的圖床功能!》,但它卻有兩個問題:
- 圖片不是上傳到素材庫,而是另一個圖片庫(雖然無法在素材庫管理,但可以用於發圖文消息,一般來說也足夠使用);
- 上傳的圖片名稱包含了完整的路徑名,於是會出現類似這樣的檔名:
C:\\\\Users\\\\username\\\\AppData\\\\Local\\\\Temp\\\\Typora\\\\typora-icon.png
。冗長而臃腫。
在 ChatGPT 的幫助下,問題 1 很容易就得到了解決,但問題 2 卻很困難。之後我用 Python 簡單試了下上傳到素材庫,發現圖像檔案名稱能成功保持不變。於是我突發奇想,讓 ChatGPT 將上面的 Go 程序改寫成了 Python 版本,問題 2 就這樣得到了解決。原因嘛,我也不清楚。
這裡分享下我得到的 Python 版本:
import requests
import json
import sys
# 常量定義
APP_ID = "你的APP_IDID"
APP_SECRET = "你的APP_SECRET"
ACCESS_TOKEN_URL = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APP_ID}&secret={APP_SECRET}"
UPLOAD_PERMANENT_IMAGE_URL = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token="
# 獲取 access_token
response = requests.get(ACCESS_TOKEN_URL)
if response.status_code == 200:
res = response.json()
access_token = res.get("access_token")
else:
print(f"Failed to get access token: {response.text}")
sys.exit(1)
# 確保 access_token 存在
if access_token:
urls = []
# 獲取命令行參數並上傳圖片
for v in sys.argv[1:]:
files = {
'media': open(v, 'rb'),
}
data = {
'type': 'image',
}
# 發送圖片上傳請求
upload_response = requests.post(f"{UPLOAD_PERMANENT_IMAGE_URL}{access_token}&type=image", files=files, data=data)
if upload_response.status_code == 200:
res_url = upload_response.json()
url = res_url.get("url")
if url:
urls.append(url)
else:
print(f"Failed to upload image {v}: {upload_response.text}")
# 輸出上傳成功的 URL
if urls:
print("Upload Success:")
for url in urls:
print(url)
else:
print(f"Failed to retrieve access token: {response.text}")
其它步驟與原文差不多,只不過需要使用對應的 Python 操作。
設置完成後,在 Typora 中寫作時便可以自動將圖片上傳到微信公眾號的素材庫了。