取得先と認証
取得先はhttps://api.redditstreamapi.comです。GET /v1/searchは検索、/v1/postsは投稿、/v1/commentsはコメント一覧です。/v1/item?id=...は既知の識別子で一件を探し、/v1/subreddits?prefix=...はコミュニティ名を接頭辞で絞ります。/v1/statusは静的なサービス範囲の公開です。独立した過去アーカイブであり、Redditの公式サービスやSSE、WebSocket接続ではありません。OAuth、書き込み、投票やメッセージもありません。
Authorization: Bearer YOUR_API_KEYとX-API-Key: YOUR_API_KEYは両方とも有効です。このドメインのアーカイブキーを使い、Reddit OAuthトークンを入れないでください。実値はサーバー実行時に設定し、公開コードやエラーログには残しません。アカウントのSecure HttpOnlyセッションCookieは取得ヘッダーと別です。キーと残高を他ブランドへ共用することはできません。仕事の条件と進捗記録にも秘密を混ぜないでください。
GET https://api.redditstreamapi.com/v1/posts?subreddit=datasets&limit=3&page=2は二ページ目を上限三件で要求します。結果の存在や次の時間帯への進行を示す例ではありません。ページ番号はライブイベントのカーソルでもありません。HTTP成功とローカル保存成功を分けて扱い、再開前には手元の結果を確認します。ローカルのチェックポイントを作っても、固定スナップショット、欠落のない再開、全件取得についてサーバーの保証が追加されるわけではありません。
フィルターと結果の解釈
検索、投稿、コメントのフィルターはq、subreddit、author、kind、from、to、min_score、limit、pageです。kindはpostまたはcommentです。日付はUTCのYYYY-MM-DDで、toは指定日全体を含みます。min_scoreは最低スコア条件であり並べ替えではありません。idは/v1/item専用で、投稿やコメント一覧の識別子フィルターではありません。parent_idとlink_idも応答の関係フィールドで、クエリ引数ではありません。
一要求最大100レコード、一クエリ最大100ページで、各ページは別の呼び出しです。文書順は日時、関連度、スコア順ではありません。総件数のeqは正確なレコード数、gteは下限、unknownまたはnullは信頼できる総数が不明な状態です。総数の単位はページではありません。eqを必ず推定値として扱うのも誤りですが、正確な総数でもクライアントの全件受信や保存を証明することはできません。
返されるレコードはフラットな構造を持ち、サーバー側でのスレッドツリー作成は行われません。親コメントやリンクのIDが存在する場合、クライアント側でそれらをローカルにグループ化することが可能です。完全な対話履歴を保証するものではない点に留意してください。 関係分析に必要な場合だけ任意でまとめ、通常の閲覧や集計ではそのまま扱えます。存在しない親記録は復元されません。日付分割、ページ反復、重複除去も全体の網羅性や一意性を証明しません。コミュニティ集計は全世界の正確な件数とは限らず、接頭辞検索は完全なアルファベット順一覧ではありません。条件と実際に受け取った範囲を併記してください。
課金とエラーの区別
成功した取得は空の結果でも一クレジット、成功1,000回は$1です。無効な要求は差し引かれず、上流失敗では予約分が戻ります。クライアント側のタイムアウトはサーバー失敗の証明ではありません。成功後に応答が失われた場合は、成功した再試行にもクレジットがかかります。読み取り専用であっても同一応答や無料の繰り返しは保証されません。再試行前にローカル結果を確認し、回数と予算を限定してください。
400は未対応の引数、値や日付の修正が必要です。401はキーの欠落や無効化を示すので、別ドメインの値や再生成前の古い設定を調べます。402は残高不足、429は頻度制限です。すべてのコードを即座に同じ方法で再試行しないでください。待機や頻度低下を入れる場合も停止条件を設け、別アカウントで制限を避けないようにします。秘密ヘッダーを除いたログで仕事の停止箇所を把握してください。
/v1/statusはキー不要かつ非課金ですが、静的な範囲とHTTP応答だけです。検索エンジン、特定記録、キー、残高は検査しません。クエリ実行や保存成功の代わりにはならないため、取得、ローカル保存、後続処理を別の段階として追跡します。アカウント情報の保持もアーカイブ記録の永久保存を意味しません。結果の不変性、完全性、一定の性能や継続的な可用性について、この仕様から新たな保証を作らないでください。
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.redditstreamapi.com/v1/search?q=research&limit=10'
import json, urllib.request
request = urllib.request.Request('https://api.redditstreamapi.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.redditstreamapi.com/v1/search?q=research&limit=10", {headers: {Authorization: "Bearer YOUR_API_KEY"}})
.then(response => response.json()).then(console.log);