Python を使用したアバターのアップロード (Discourse API)

こんにちは :waving_hand:

これらの役立つ投稿を読みました(12)。しかし、API を使用して Python から Discourse にアバターを正常にアップロードするのを妨げている何かがまだ欠けているようです。私は自分の Discourse サイトの管理者です。

良いニュース: 以下に示すように、Postman では機能します。

あまり良くないニュース: これを Python に翻訳できませんでした(試した内容に応じて 400 または 422 エラーが発生します)。以下を試しました。

img_data = requests.get("my_image_url").content

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"file":  img_data
}

url = "<my site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

これにより 400 エラーが発生します。機能するかどうかを確認するために、ローカル画像も使用してみました。

with open('my_local_image.jpg', "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode("utf8")

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"file":  image_b64
}

url = "<my site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

これにより 422 エラーが発生します。

"failed":"FAILED","message":"undefined method `tempfile\\' for #\\u003cString:0x00007f5befda7af8\\u003e"

:folded_hands: もう少しでできそうな気がしますが、API の使用はまだあまり経験がありません。正しい方向へのポインタをいただけると幸いです!

「いいね!」 1

こちらから「url」を次のようにパラメータとして使用できることを発見しました。

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"url":  "url_to_my_image"
}

url = "<my_site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

ついに200を取得しました!

これで、このプロセスを実際に完了するために必要な2番目のステップがあることを知っています🤔、何ができるか見てみましょう…

「いいね!」 2

はい!2番目のステップを理解しました!

url = "<my_site>/users/<username>/preferences/avatar/pick.json"

data={
"upload_id": "<id_from_the_1st_step>",
"type":  "uploaded"
}

response = requests.request("PUT", url, headers=headers, data=data)

気に入りました!:heart:

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.