Reddit Search API

履歴検索アプリの設計と結果の扱い

検索条件の設計からページ取得、総件数の表示、エラー処理まで。アーカイブの限界を正しく伝える検索アプリを組み立てる実践ガイドです。

APIキーを取得

利用者の問いをパラメーターにする

最初に、アプリが答える問いを決めます。特定コミュニティの製品議論を探す場合と、ある投稿者のコメントを調べる場合では必要な条件が違います。検索語をq、コミュニティをsubreddit、投稿者をauthorに渡し、有効な条件を結果の近くに表示してください。未対応の独自検索構文を使えるように見せないことも重要です。

日付選択の結果はUTCを基準にYYYY-MM-DDへ変換します。fromが開始、toが指定日を含む終了日です。画面で地域別の日付を表示する場合も、APIへ送る実際の範囲が分かるようにします。投稿だけならkind=post、コメントだけならkind=commentです。min_scoreは最低スコアであり、人気順の要求ではありません。

検索フォームには、独立した過去のアーカイブを利用していることを添えます。ライブ更新、Redditとの公式な関係、完全な履歴検索を約束しないでください。狭い条件でもすべての関連記録が返るとは限りません。調べたい対象と実際に取得したサンプルを区別すれば、利用者が結果を過度に一般化することを避けやすくなります。

取得範囲と画面の表示を合わせる

GET /v1/search、または用途に応じて/v1/postsと/v1/commentsを使い、X-API-Keyヘッダーで認証します。limitとpageは1~100です。各呼び出しで最大100件の1ページを取得し、次ページは別に要求します。利用者が必要とする範囲に合わせ、全ページを自動で取りに行くかどうかを設計してください。

結果は内部の_doc順で、時系列順でも関連度順でもありません。ローカルで日付順に並べるなら、取得済みデータ内の並べ替えと明示します。各レコードのフィールドの有無を調べて表示し、同一の項目が必ずそろうと仮定しないでください。parent_idやlink_idがあれば関連付けられますが、完全な会話ツリーではない可能性があります。

eqは正確なクエリ一致件数、gteは少なくともその件数、unknownは総数不明として表示します。下限の値を最終ページの証拠にしないでください。100ページまで繰り返しても全件取得を保証しません。複数の条件に分割する場合も、重複や欠落がないと断定せず、ローカル処理と取得範囲の記録でその限界を扱います。

エラー処理と分析の根拠を残す

400ではパラメーター、401ではキーとヘッダー、402では残高を確認します。429には待機付きの再試行を使い、繰り返し回数に上限を設けます。/v1/statusは静的な説明とHTTP応答の確認に限られ、検索基盤やデータの準備状態は検査しません。接続できることと、目的の検索が成功することを同じ指標にしないでください。

成功した呼び出しは空でも1クレジットです。上流の失敗は予約分を返しますが、クライアント切断がサーバーの成功後なら課金されている可能性があります。成功した再試行も有料です。生の応答、検索条件、ローカル変換のコードを一緒に保存すれば、後のAPI応答が変わっても、その分析に使ったデータと手順を説明できます。