私はこの記事《WeChat 公式アカウントの画像アップロードインターフェースを利用して、自分だけの画像ホスティング機能を作成する!》を参考にしましたが、2 つの問題がありました:
- 画像は素材ライブラリにアップロードされず、別の画像ライブラリにアップロードされます(素材ライブラリで管理できませんが、画像メッセージを送信するために使用でき、一般的には十分です);
- アップロードされた画像の名前には完全なパス名が含まれており、次のようなファイル名が生成されます:
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_ID"
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"アクセストークンの取得に失敗しました: {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"画像 {v} のアップロードに失敗しました: {upload_response.text}")
# アップロード成功のURLを出力
if urls:
print("アップロード成功:")
for url in urls:
print(url)
else:
print(f"アクセストークンの取得に失敗しました: {response.text}")
他の手順は原文とほぼ同じですが、対応する Python 操作を使用する必要があります。
設定が完了したら、Typora で執筆中に画像を自動的に WeChat 公式アカウントの素材ライブラリにアップロードできるようになります。