Verwendung von Python zum Hochladen von Avataren (Discourse API)

Hallo :waving_hand:,

Ich habe diese hilfreichen Beiträge gelesen (1, 2); jedoch fehlt mir noch etwas, das mich daran hindert, erfolgreich einen Avatar von Python mit der API nach Discourse hochzuladen. Ich bin der Administrator meiner Discourse-Site.

Die gute Nachricht: Es funktioniert in Postman, wie unten gezeigt.

Die nicht so gute Nachricht: Ich konnte dies nicht in Python übersetzen (ich erhalte 400- oder 422-Fehler, je nachdem, was ich versuche). Ich habe Folgendes versucht:

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)

Dies gibt mir einen 400-Fehler. Ich habe auch versucht, ein lokales Bild zu verwenden, nur um zu sehen, ob ich es zum Laufen bringen könnte:

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)

Dies gibt mir einen 422-Fehler:

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

:folded_hands: Ich habe das Gefühl, dass ich nah dran bin, aber ich bin etwas neu in der API-Nutzung. Jeder Hinweis in die richtige Richtung wäre sehr willkommen!

1 „Gefällt mir“

Ooo! Ich habe von hier erfahren, dass ich „url“ als Parameter wie folgt verwenden kann:

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)

Ich erhalte endlich eine 200!

Jetzt weiß ich, dass es einen zweiten Schritt gibt, den ich tun muss, um diesen Prozess tatsächlich abzuschließen :thinking:, mal sehen, was ich tun kann…

2 „Gefällt mir“

Ja! Ich habe den 2. Schritt herausgefunden!

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)

Ich liebe es! :heart:

1 „Gefällt mir“

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