Authentifizierung und Routen
Die Abrufrouten verwenden GET unter https://api.redditstreamapi.com. Senden Sie X-API-Key: <Schlüssel> oder Authorization: Bearer <Schlüssel>; beide Header sind zulässig. Bewahren Sie den Schlüssel auf Ihrem Server auf. Der Kontobereich verwendet eine Sitzung mit Secure HttpOnly-Cookie. Diese Sitzung ist von der Authentifizierung Ihrer Datenabfragen getrennt und ersetzt nicht den erforderlichen Header im eigenen Client.
/v1/search durchsucht Veröffentlichungen und Kommentare, /v1/posts beschränkt die Auswahl auf Veröffentlichungen und /v1/comments auf Kommentare. Diese Routen akzeptieren keinen id-Filter. Für eine bekannte Kennung sucht /v1/item?id=... einen einzelnen Datensatz. Die Route ruft weder dessen Antworten noch sämtliche untergeordneten Kommentare oder die ganze Kette vorheriger Nachrichten automatisch ab. Auch das Auffinden des bezeichneten Datensatzes ist nicht garantiert.
/v1/subreddits akzeptiert prefix und limit zur Suche nach Communities. prefix ist kein Filter für die Inhaltsrouten. Die dort genannten Anzahlen sind kein garantiert exakter Gesamtzensus. /v1/status ist öffentlich und wird nicht berechnet. Der Endpunkt gibt eine statische Beschreibung des Dienstes aus und bestätigt die Antwort der HTTP-Anwendung, ohne die Suchmaschine oder die Verfügbarkeit von Archivdatensätzen zu prüfen.
Filter und zurückgegebene Daten
Für search, posts und comments sind q, subreddit, author, kind, from, to, min_score, limit und page zulässig. kind akzeptiert die unveränderten Werte post und comment. q führt eine Textsuche aus, keine beliebige Abfragesprache und keine Analyse von Stimmungen. Überlegen Sie bei jedem Filter, ob er Nachrichten ausschließt, die später als Kontext zum Verständnis einer Antwort benötigt werden könnten.
from und to erwarten YYYY-MM-DD in UTC und beziehen sich auf created_utc. Der Tag to wird vollständig eingeschlossen. Stunden oder Sekunden werden mit diesen Parametern nicht angegeben; es geht auch nicht um den Zeitpunkt der Aufnahme ins Archiv. min_score ist ein numerischer Mindestwert für die Bewertung. Der Filter sortiert nicht und erkennt weder verlässliche Antworten noch besonders gute Lernmaterialien.
Die API-Antworten enthalten flache Datensätze, die keine serverseitig erstellten Thread-Bäume darstellen. Wenn Felder wie parent_id vorhanden sind, können Clients diese lokal gruppieren. Vollständige Gespräche oder Elternketten sind dadurch nicht garantiert. Für parent_id und link_id gibt es keine Abfragefilter. Die Antwort enthält data, pagination und credits. Felder können fehlen und vorhandene Verweise auf nicht empfangene Datensätze zeigen.
Seitengrenzen, Fehler und Abrechnung
Für /v1/search, /v1/posts und /v1/comments liegen limit und page jeweils zwischen 1 und 100, mit einer Seite je Anfrage. Die interne Reihenfolge _doc ist keine Chronologie oder Sortierung nach Relevanz oder Bewertung. /v1/subreddits akzeptiert nur prefix und limit, ohne page. Lokales Sortieren oder aufgeteilte Zeiträume beweisen weder vollständige Abdeckung noch Eindeutigkeit oder unveränderte Ergebnisse bei weiteren Abfragen.
Lesen Sie pagination.total zusammen mit relation: eq bezeichnet eine exakte Anzahl für die Abfrage, gte eine untere Schranke und unknown eine nicht verlässlich bekannte Anzahl, gegebenenfalls null. Unbekannt ist nicht null Datensätze. Selbst eine exakte Anzahl beweist nicht den vollständigen Download und auch nicht die Erfassung aller historischen Kommentare. Bewahren Sie die zurückgegebenen Hinweise zur Paginierung für Ihren Bericht auf.
HTTP 400 bedeutet ungültige Parameter, 401 einen fehlenden oder ungültigen Schlüssel, 402 zu wenig Guthaben und 429 eine Begrenzung der Anfragehäufigkeit. Jeder erfolgreiche Abruf kostet einen Credit, auch ein leerer. Ungültige Anfragen buchen nichts ab; Fehler des vorgeschalteten Dienstes erstatten die Reservierung. Ein Client kann die Antwort nach berechnetem Erfolg verlieren. Ein erfolgreicher neuer Versuch wird erneut berechnet. Speichern Sie die Antwort, bevor Sie Ihren lokalen Fortschritt aktualisieren.
API-Endpunkte
| Methode | Endpunkt | Parameter |
|---|---|---|
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 | — |
Abfrageparameter
| Parameter | Wert / Typ / Bereich |
|---|---|
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);