Grundlagen der Authentifizierung und Abrechnung
Verwenden Sie api.redditapistack.com und übermitteln Sie für authentifizierte Abrufe den Header Authorization mit dem Schema Bearer. Konfigurieren Sie ihn im Python-HTTP-Client oder in fetch unter Node.js. Der Schlüssel wird einmalig unmittelbar bei der Registrierung vor Zahlung angezeigt. Jeder erfolgreiche Abruf kostet einen Credit, auch ohne Treffer; ein einzelner Datensatz ist nicht die Abrechnungseinheit.
$1 entspricht 1000 erfolgreichen Anfragen; die Mindestaufladung von $50 kauft 50000 Credits. Ungültige Anfragen werden nicht belastet, Fehler des Suchanbieters geben die Reservierung zurück. Der öffentliche Endpunkt /v1/status benötigt keinen Schlüssel und verbraucht keine Credits. Seine statische Beschreibung und HTTP-Antwort prüfen weder die Suche noch die Verfügbarkeit einzelner Datensätze.
Kopieren Sie den bei der Registrierung angezeigten Schlüssel in eine geeignete Verwaltung für Zugangsdaten. Angemeldete Nutzer können ihn nach Passwortbestätigung erneuern, wodurch der vorherige sofort ungültig wird. Es gibt keine Passwortzurücksetzung oder Schlüsselzustellung per E-Mail. Schlüssel und Saldo gehören zu diesem Domainkonto und werden nicht zwischen den Websites des Netzwerks geteilt.
Abfrageparameter und Antwortformat
Die Suchparameter sind q, subreddit, author, kind, from, to, min_score, limit und page. kind nimmt post oder comment an. Datumsangaben erfolgen als YYYY-MM-DD in UTC; to ist einschließlich. min_score setzt nur eine Mindestpunktzahl und sortiert nicht. Die Ausgabe folgt _doc, der internen Dokumentreihenfolge, weder einer zeitlichen Reihenfolge noch einer Sortierung nach Relevanz oder Punktzahl.
Nutzen Sie /v1/search für allgemeine Suchen, /v1/posts für Beiträge und /v1/comments für Kommentare. Diese Listen benötigen kein id; /v1/item verlangt id. /v1/subreddits unterstützt prefix. Die Antworten sind flach. Wenn parent_id oder link_id vorhanden sind, können Sie Datensätze lokal gruppieren, ohne vollständige Elternketten zu garantieren. Für diese beiden Beziehungsfelder gibt es keine Suchfilter.
limit erlaubt 1 bis 100 Datensätze pro Anfrage und page 1 bis 100 Seiten pro Abfrage. Ein Total mit eq ist exakt für die Abfrage, gte bezeichnet eine Untergrenze und unknown das Fehlen eines verlässlichen Totals, gegebenenfalls null. Keine dieser Angaben beweist vollständige Archivabdeckung oder vollständigen Abruf; aggregierte Communityzahlen sind ebenfalls nicht garantiert global exakt.
HTTP-Statuscodes und Dienststatus
400 steht für eine ungültige Anfrage, 401 für einen fehlenden oder ungültigen Schlüssel, 402 für unzureichendes Guthaben und 429 für eine Ratenbegrenzung. Beheben Sie die jeweilige Ursache vor weiteren Versuchen. Prüfen Sie in JavaScript den HTTP-Status ausdrücklich: fetch kann eine HTTP-Fehlerantwort erhalten, ohne dass die Promise abgelehnt wird.
Trennen Sie HTTP-Fehler und Verbindungsabbrüche auch im Python-Client. urllib.request kann HTTPError auslösen, während andere Clients Fehlerantworten zunächst als Antwortobjekt bereitstellen. Werten Sie den Status aus, bevor Sie den Inhalt als erfolgreiche Datenantwort verarbeiten. Begrenzen Sie Wiederholungen und protokollieren Sie deren Ursache, ohne den API-Schlüssel oder andere Zugangsdaten in Diagnoseausgaben zu veröffentlichen.
Ein Clientfehler beweist nicht, dass der Server keinen erfolgreichen Abruf abgeschlossen hat. Ein solcher Abruf kann bereits berechnet sein; ein erfolgreicher erneuter Versuch kostet einen weiteren Credit. Halten Sie erfolgreiche leere Antworten, ungültige Anfragen und Anbieterfehler deshalb getrennt. Verwenden Sie /v1/status nicht als Beleg, dass eine fehlgeschlagene Suche inzwischen wieder funktioniert.
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.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);