トピックから特定の投稿を取得するスクリプトを作成しようとしています。このページを参照してください: Discourse API Docs
しかし、レスポンスステータスコードが常に413になります。
どなたか助けてください!解決できたらPayPalアカウントに20ドル送ります。
def get_post_from_topic(topic_id, post_id):
endpoint = "https://www.example.com/t/" + topic_id + "/posts.json"
headers = {
"Content-Type": "application/json",
"Api-Key": api_key,
"Api-Username": api_username,
}
data = {"post_ids[]": post_id} # 0を試しましたが、うまくいきませんでした
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
念のため、私のApi-KeyとApi-Usernameは正しいです。他のディスコースAPIは機能しますが、これは機能しません。
Discourse API gen を確認できます。
このgemで必要なAPIが簡単に見つかるため、別途実装する必要はありません。
それでも有料サポートが必要な場合は、お知らせください。トピックを Marketplace に移動し、関心のある方が連絡できるようにします。
Hector
(Héctor Fernández)
6
ボディを送信していますが、POSTリクエストを使用する必要があります。
pfaffman
(Jay Pfaffman)
7
トピックを取得し、不要な投稿を無視して、必要な投稿を整理してください。
また、投稿IDがあれば /p/123 で取得できます。
投稿を1件取得するAPIを試しましたが、「link_counts」が返されず、「post_stream」もありませんでした。
トピックから特定の投稿を取得するAPIには「post_stream」があると思います。
そして、私が処理しようとしているトピックには1500件以上の投稿があります…
pfaffman
(Jay Pfaffman)
10
データを明示的にJSONとしてエンコードする必要があるかもしれません。
data = '{\"post_ids[]\":' + post_id +'}'
機能しません。
json.dumpsも試しましたが、機能しません…
RGJ
(Richard - Communiteq)
13
GETメソッドは常にクエリ文字列を持ち、POSTデータは含みません(そのため、413 Payload Too Largeエラーが発生するのです。GETはデータを受け取らないためです)。サーバーからデータを読み取る際、変更を加えない場合は、POSTではなくGET(ほぼ常に)を使用します。したがって、data= の代わりに params= を使用する必要があります。
この特定のAPI呼び出しに関するドキュメントの記述が不適切だと考えています(「リクエストボディスキーマ」という表記は実際にはPOSTの data を示唆しているため)、この件を Contribute > Bug に移動します。したがって、私に支払いをする必要はありません。
import requests
import json
def get_post_from_topic(topic_id, post_id):
endpoint = f"https://forum.example.com/t/{topic_id}/posts.json"
api_username = 'system'
api_key = 'REDACTED'
headers = {
"Content-Type": "application/json",
"Api-Key": api_key,
"Api-Username": api_username,
}
params = {
"post_ids[]": post_id
}
response = requests.get(endpoint, headers=headers, params = params)
if response.status_code == 200:
return response
response = get_post_from_topic(6,8)
print(response.json())
{"post_stream": {"posts": [{"id": 8, "name": "system", "username": "system", "avatar_template": "/images/discourse-logo-sketch-small.png", "created_at": "2022-06-26T04:44:23.637Z", "cooked": "<p><a name=\"collect\"></a></p>\n<h2>\n<a name=\"what-information-do-we-collectcollect-1\" class=\"anchor\" href=\"#what-information-do-we-collectcollect-1\"></a><a href=\"#collect\">収集する情報...