基本構造と認証とエラーコード
Reddit API Stackは公式のライブデータとは異なる独立した歴史アーカイブを提供しています。検索、投稿、コメント、特定アイテム、サブレディット、ステータスの六つの主要エンドポイントが利用可能です。これらのエンドポイントはすべて、HTTP GETメソッドを通じてアクセス可能であり、リクエストパラメータを用いてアーカイブ内のデータを検索・取得します。
キーは登録直後、支払い前に一度だけ表示されます。データ取得ではX-API-Keyヘッダーを使い、アカウント用のセッションCookieと区別してください。ログイン後、パスワード確認でキーを再生成すると旧キーは無効になります。キーと残高はこのドメイン専用です。アカウントパネルはキーのページにあり、パスワードリセットやキーのメール送信はありません。
エラー応答では、HTTPステータスコードをリテラルなASCII数値として使用します。400は無効なリクエスト、401はキーが不足または無効、402はクレジット不足、429はレート制限を表します。アップストリームエラーが発生した場合、クレジットは返却されますが、401と402と429の各エラーは明確な意味を持ち、クライアントはこれに応じて再試行するか支払いを行います。ステータスエンドポイントは課金されません。
クエリパラメータとフィルタリングとページネーション
検索パラメーターはq、subreddit、author、kind、from、to、min_score、limit、pageです。kindの値はpostまたはcommentです。min_scoreは最低スコアを指定するフィルターで、スコア順の制御ではありません。取得は内部_doc順で、日付や関連度の順ではありません。順序を使う分析では実際に受け取った記録の範囲を確認してください。
1回最大100件、1クエリ最大100ページで、次ページには別の呼び出しが必要です。/v1/itemはid必須、/v1/postsと/v1/commentsの一覧はid不要です。総件数のeqは正確なクエリ一致数、gteは下限、unknownは信頼できる総数が不明で、値がnullの場合もあります。これらはアーカイブの全体収録や全件取得の証明ではありません。
日付はUTC基準のYYYY-MM-DD形式で、toは指定日を含みます。/v1/subredditsではprefixを使います。parent_idとlink_idの検索フィルターはありません。/v1/statusは公開かつ無料で、静的なサービス説明とHTTP応答だけを示します。検索基盤、記録の利用可能性、完全性、応答速度を検査する経路ではありません。
応答形式とデータ保持と課金システム
応答はサーバーが組み立てた会話ツリーではなく平坦なレコードです。parent_idやlink_idが含まれる場合、クライアント側で任意にグループ化できます。すべての親や会話内容がそろうとは限りません。フィールドの存在を検査して処理し、ローカルで作った表示を完全なスレッドとして紹介しないようにしてください。
成功したデータ取得は空でも1クレジット、1000回で1米ドルです。最低50米ドルの有料チャージで50000クレジットを購入できます。購入分は失効せず定期契約もありません。100試用クレジットはネットワーク全体の不正利用防止条件付きです。支払いはUSDT TRON TRC20またはUSDC EthereumメインネットERC20の請求書に従い、送金後に取引ハッシュで検証を要求します。
無効な要求は消費せず、上流の失敗では予約分を返します。サーバー成功後のクライアント切断は課金される場合があり、成功した再試行も有料です。ブラウザーはホストごとに請求書IDと利用者IDをlocalStorageへ保存し、セッションにはSecure HttpOnly Cookieを使います。生のキーは永続保存しません。ページにはStatinside 43の解析が含まれます。
APIエンドポイント
| メソッド | エンドポイント | パラメータ |
|---|---|---|
GET | /v1/search | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/posts | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/comments | q, subreddit, author, kind, from, to, min_score, limit, page |
GET | /v1/item | id |
GET | /v1/subreddits | prefix |
GET | /v1/status | — |
クエリパラメータ
| パラメータ | 値・型・範囲 |
|---|---|
q | text |
subreddit | keyword |
author | keyword |
kind | post | comment |
from | ISO date |
to | ISO date |
min_score | integer |
limit | 1–100 |
page | 1–100 |
id | item ID |
prefix | subreddit prefix |
curl -H "Authorization: Bearer YOUR_API_KEY" 'https://api.redditapistack.com/v1/search?q=research&limit=10'
import json, urllib.request
request = urllib.request.Request('https://api.redditapistack.com/v1/search?q=research&limit=10', headers={"Authorization": "Bearer YOUR_API_KEY"})
with urllib.request.urlopen(request) as response:
print(json.load(response))
fetch("https://api.redditapistack.com/v1/search?q=research&limit=10", {headers: {Authorization: "Bearer YOUR_API_KEY"}})
.then(response => response.json()).then(console.log);