トピックから特定の投稿を取得するスクリプトを作成しようとしています。このページを参照してください: 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 に移動し、関心のある方が連絡できるようにします。
「いいね!」 1
Hector
(Héctor Fernández)
2022 年 6 月 26 日午後 7:20
6
ボディを送信していますが、POSTリクエストを使用する必要があります。
「いいね!」 1
pfaffman
(Jay Pfaffman)
2022 年 6 月 26 日午後 7:39
7
トピックを取得し、不要な投稿を無視して、必要な投稿を整理してください。
また、投稿IDがあれば /p/123 で取得できます。
投稿を1件取得するAPIを試しましたが、「link_counts」が返されず、「post_stream」もありませんでした。
トピックから特定の投稿を取得するAPIには「post_stream」があると思います。
そして、私が処理しようとしているトピックには1500件以上の投稿があります…
「いいね!」 1
pfaffman
(Jay Pfaffman)
2022 年 6 月 26 日午後 7:54
10
データを明示的にJSONとしてエンコードする必要があるかもしれません。
data = '{\"post_ids[]\":' + post_id +'}'
機能しません。
json.dumpsも試しましたが、機能しません…
RGJ
(Richard - Communiteq)
2022 年 6 月 26 日午後 10:19
13
GET は常にクエリ文字列を持ち、POST データを持つことはありません(そのため、413 Payload Too Large が返されるのは、POST データが予期されていないためです)。変更を加えることなくサーバーからデータを照会する場合は、(ほぼ) 必ず GET を使用し、POST は使用しません。したがって、data= の代わりに params= を使用する必要があります。
この特定の API 呼び出しのドキュメントは、悪く表現されていると思います(「リクエストボディスキーマ 」は POST data を示唆しています)。そのため、これを 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\">What information do we collect...
「いいね!」 5
system
(system)
クローズされました:
2022 年 7 月 26 日午後 11:10
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.