Reddit API Stack

両言語で同じ取得条件を実装する

APIキーを取得

アーカイブの範囲と実装方針

このAPIは独立した過去のRedditアーカイブで、公式サービスやライブデータではありません。投稿、投票、メッセージ、OAuthは提供しません。アプリで使う資料は実際に返された記録として扱い、全体収録や永続性を仮定しないでください。後から分析を確認するなら、生の応答と条件を保存します。

PythonとJavaScriptでは、検索条件の作成、HTTP呼び出し、応答の変換を別の処理にします。両者で同じ条件を作るかを確認し、取得したデータをローカルで分析できます。感情分析を追加する場合も、それはアプリ独自の処理でありAPIが返す分析結果ではありません。期待するフィールドは実際の応答で確認してください。

メールとパスワードで登録すると、支払い前にキーが一度表示されます。保存したキーは秘密情報として扱ってください。ログイン後のパスワード確認で再生成でき、旧キーは直ちに無効になります。キーと残高はこのドメイン専用です。パスワードリセットやメールでのキー送信はありません。

認証と検索条件を準備する

この説明ではX-API-Keyヘッダーに生のキーを指定します。その値にBearerの接頭辞は付けません。別の認証形式として、Authorization: Bearerに有効なキーを指定する方法も利用できます。/v1/statusは公開されキー不要です。Pythonのurllib.requestやhttp.clientは標準ライブラリーですが、requestsは別途導入するパッケージです。JavaScriptは利用する環境のfetch対応を確認し、キーを配布用ブラウザーコードや公開ログに含めないでください。

api.redditapistack.comへGETを送り、検索条件はクエリパラメーターに置きます。q、subreddit、author、kind、from、to、min_score、limit、pageが対応項目です。kindはpostまたはcomment、日付はUTC基準のYYYY-MM-DDでtoは指定日を含みます。PythonのURL符号化機能やJavaScriptのURLSearchParamsで値を組み立てられます。

まず1ページを取得して表示処理を確認します。limitとpageは1~100、応答は最大100件です。次ページは別の呼び出しで、1クエリ最大100ページです。総件数のeqは正確、gteは下限、unknownは不明で値がnullの場合もあります。ページの反復や条件分割が全件取得を証明するわけではありません。

応答と失敗を両言語で処理する

Pythonでは送信と状態確認を済ませてから応答を読み、JavaScriptでもfetchの結果をデータとして扱う前にHTTPステータスを確認します。検索は/v1/search、投稿とコメントは/v1/postsと/v1/commentsです。単一項目は/v1/itemにidを指定します。投稿とコメントの一覧にはidは不要で、いずれもPOSTの本文に検索条件を置く方法ではありません。

記録は平坦で、内部_doc順は日付、関連度、スコアの順ではありません。min_scoreはフィルターです。parent_idやlink_idがあれば任意のローカルグループ化ができますが、完全な会話は保証しません。日時フィールドが実際に返る場合だけローカルで日付順に並べ、取得範囲内の順序と明示してください。

400は無効な要求、401はキー欠落や無効、402は残高不足、429はレート制限です。原因を直し、429には待機と回数制限を設けます。成功した取得は空でも1クレジットです。上流の失敗は予約分を返しますが、サーバー成功後の通信切断は課金される場合があります。/v1/statusはHTTP応答の確認であり検索基盤の検査ではありません。