Temel Yapı ve Veri Formatı
Bu bağımsız Reddit arşiv API’si canlı veri yerine geçmiş kayıtlara erişim sağlar. Reddit’in resmî hizmeti değildir; OAuth, gönderi oluşturma, oy verme ve özel mesaj özelliklerini desteklemez. Veri yollarına api.redditapistack.com üzerinde GET isteği gönderin. Python ve JavaScript istemcilerinin görevi, parametreleri hazırlamak, HTTP yanıtını değerlendirmek ve dönen kayıtları uygulamanızın ihtiyaçlarına göre işlemektir.
API yanıtları düz kayıtlar halinde döner; sunucu, hiyerarşik bir ağaç yapısı oluşturmak için verileri işlemez. İstemciler, eğer yanıtta parent_id veya link_id alanları mevcutsa bu verileri kendi başlarına gruplayabilir. Ancak bu, sunucunun tüm konuşma geçmişini veya üst verileri garanti ettiği anlamına gelmez, bu yüzden istemci tarafı işleme gereklidir.
Veri iç _doc düzeniyle döner; bu, kayıtların eklenme zamanı veya kimlik sırası değildir. Kronoloji, alaka ve puan sıralaması da değildir. Bir tarih alanı gerçekten dönüyorsa alınan örneklemde yerel sıralama yapabilirsiniz. Ancak bunu arşivin tamamındaki en yeni veya en yüksek puanlı kayıtları seçen bir sunucu özelliği olarak göstermeyin.
Parametreler ve Sorgu Mantığı
Sorgular için kullanılan parametreler arasında q, subreddit, author, kind ve tarih aralıkları yer alır. min_score parametresi yalnızca bir filtre olarak çalışır, verileri sıralamak için değil; sonuçları puan bazında daraltmak amacıyla kullanılır. kind alanı post veya comment değerlerini kabul eder ve her iki tür de isteğe bağlı olarak filtrelenebilir.
limit ve page 1–100 aralığındadır. Bir çağrı en fazla 100 kayıt içeren tek sayfayı alır; bir sorguda ayrı çağrılarla en fazla 100 sayfa gezilebilir. Bölümlenmiş veya tekrarlanan sorgular bütün eşleşmeleri, benzersiz kayıtları ya da boşluksuz kapsamı garanti etmez. eq kesin sorgu toplamını, gte alt sınırı, unknown güvenilir toplamın bilinmediğini belirtir; toplam null olabilir.
Belirli bir öğe için /v1/item id gerektirir; /v1/posts ve /v1/comments listelerinde id gerekmez. Tarihler UTC temelinde YYYY-MM-DD biçimindedir ve to belirtilen günü içerir. q, subreddit, author, kind, from, to, min_score, limit ve page desteklenen arama parametreleridir. /v1/subreddits topluluk adları için prefix kabul eder; parent_id ve link_id sorgu filtresi değildir.
Kimlik Doğrulama ve Hata Yönetimi
Veri alma isteklerinde X-API-Key başlığını kullanın. Anahtar kayıt tamamlanınca ödeme öncesinde bir kez gösterilir. 400 geçersiz isteği, 401 eksik veya geçersiz anahtarı belirtir. Hesap panelinin oturum çerezi veri alma anahtarının yerine geçmez. Kimlik doğrulama sorunlarını araştırırken anahtarı herkese açık günlüklerde göstermeden başlığın doğru gönderildiğini kontrol edin.
402 yetersiz krediyi, 429 hız sınırını gösterir. Geçersiz isteklerde kredi düşülmez; üst hizmet hatalarında ayrılan kredi geri verilir. İstemci bağlantısı sunucudaki başarılı işlemin ardından koparsa kredi tüketilmiş olabilir. GET /v1/status herkese açık ve ücretsizdir; yalnızca statik hizmet açıklaması ve HTTP yanıtı sağlar, arama altyapısını veya kayıtların erişilebilirliğini denetlemez.
Başarılı bir istek, boş bir sonuç bile döndürse tek krediye mal olur. Bu ücretlendirme modeli, veri yokluğu ile hata arasındaki farkı gösterir. İstemciler, API kullanım sınırlarını dikkatlice yönetmeli ve isteklerini optimize etmelidir. Bu yapı, ölçeklenebilir ve maliyet-etkin bir veri erişimi sağlar.
API yolları
| Yöntem | Yol | Parametreler |
|---|---|---|
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 | — |
Sorgu parametreleri
| Parametre | Değer / tür / aralık |
|---|---|
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);