Yazar Haber Ajansı Abone API
Abonenin kendi yazılımı için haber, fotoğraf ve video akışı. Kimlik: Authorization: Bearer yha_canli_… (YHA Abone · Çıkışlar · Anahtarlar). İçerik her zaman paket hakkıyla sınırlıdır. Aynı olay iki kez gelebilir: olay_id ile ayıkla, düzeltmeyi surum_no ile uygula.
Sürüm 1.0.0 · OpenAPI 3.1.0 · dis-v1.json · dis-v1.yaml
| Sunucu | Ne |
|---|---|
https://api.<alan> | Canlı |
https://deneme.<alan> | Deneme ortamı (yha_deneme_ anahtarı, örnek içerik) |
Akış
GET/v1/akis
Olaylar eskiden yeniye (imleçli) · kapsam akis.oku
İmleç yoksa baslangic ya da son 24 saatten başlar; en çok 7 gün geri gidilir. devami_var yanlışsa en erken 10 saniye sonra yeniden sor.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
imlec | query | string | Önceki yanıtın sonraki_imlec değeri |
baslangic | query | string | ISO 8601 ya da YYYY-AA-GG |
boyut | query | integer | |
icerik | query | haber · fotograf · video | |
kategori_id | query | string[] | |
il_id | query | integer | |
oncelik | query | flas · onemli · normal[] | |
olay | query | yeni · duzeltme · iptal · guncelleme[] | |
paket_id | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisOlayListesi |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Anahtar
GET/v1/ben
Anahtar, kurum, paketler ve sınırlar · kapsam akis.oku
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisBen |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Anlık akış
GET/v1/olaylar
Anlık akış (sunucu gönderimli olaylar) · kapsam akis.oku
Accept: text/event-stream; Last-Event-ID (ya da ?imlec=) ile kaldığı yerden sürer. Her 25 saniyede : canli yorumu. Uzun kopuklukta yeniden_yukle gönderip kapanır.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
imlec | query | string | Önceki yanıtın sonraki_imlec değeri |
icerik | query | haber · fotograf · video | |
kategori_id | query | string[] | |
il_id | query | integer | |
oncelik | query | flas · onemli · normal[] | |
olay | query | yeni · duzeltme · iptal · guncelleme[] | |
paket_id | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Sunucu gönderimli olaylar; her olayın data alanı DisOlay | text/event-stream string |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 406 | kabul_edilemez | application/json DisHata |
| 429 | es_zamanli_baglanti_siniri, gunluk_sinir_doldu, yavasla | application/json DisHata |
Arama
GET/v1/ara
Arşivde arama (kanal hakkıyla) · kapsam arsiv.ara
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
q * | query | string | |
icerik | query | tumu · haber · fotograf · video | |
kategori_id | query | string[] | |
il_id | query | integer | |
baslangic | query | string | ISO 8601 ya da YYYY-AA-GG |
bitis | query | string | ISO 8601 ya da YYYY-AA-GG |
boyut | query | integer | |
imlec | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisAramaSonucu |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Belge
GET/v1/openapi.json
OpenAPI 3.1 belgesi (anahtarsız) · anahtarsız
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json nesne |
Canlı yayın
GET/v1/canli-yayinlar
Canlı yayınlar (süren ya da son 7 günde biten; adres yok) · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
durum | query | canli · bitti |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json CanliYayinListesi |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/canli-yayinlar/{id}
Canlı yayın · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Canlı yayın kimliği |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json CanliYayin |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Durum
GET/v1/durum
Servis durumu, açık olaylar ve planlı bakımlar
Abone servislerinin durumu ve kullanıcılara duyurulmuş açık olaylar. Kök neden ve izleme alarmları yanıtta yoktur.
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisDurum |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Eklenti
GET/v1/eklentiler/{kod}/guncel
Eklentinin güncel sürümü (anahtarsız) · anahtarsız
WordPress eklentisinin güncelleme kanalı. surum kurulu sürümdür; en düşük desteklenen sürümün altındaysa zorunlu: true. Paket Ed25519 ile imzalıdır (imza, base64).
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
kod * | path | string | Eklenti kodu (yha-haber) |
kanal | query | kararli · deneme | |
surum | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisEklentiSurumu |
| 400 | dogrulama_hatasi | application/json DisHata |
| 404 | eklenti_yok | application/json DisHata |
Entegrasyon
PUT/v1/entegrasyon
Bağlantının durum bildirimi (WordPress eklentisi, bağlayıcı, kendi yazılımı) · kapsam akis.oku
Bağlantı kendini tanıtır: yazılım ve eklenti sürümü, site adresi, kip, sayaçlar ve son hatalar. Kayıt anahtardan bulunur; ilk bildirim entegrasyonu açar ya da kuruluyordan calisiyora geçirir. sonraki_bildirim_saniyeden sık gelen bildirim yazılmaz (son yanıt döner).
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisEntegrasyonYaniti |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, gelistirici_yalnizca_deneme, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 409 | entegrasyon_kaldirildi, entegrasyon_uyusmuyor | application/json DisHata |
| 413 | govde_cok_buyuk | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Haberler
GET/v1/haberler
Haber listesi (yeniden eskiye) · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
baslangic | query | string | ISO 8601 ya da YYYY-AA-GG |
bitis | query | string | ISO 8601 ya da YYYY-AA-GG |
kategori_id | query | string[] | |
il_id | query | integer | |
oncelik | query | flas · onemli · normal[] | |
durum | query | serviste · iptal_edildi | |
paket_id | query | string | |
dil | query | string[] | |
boyut | query | integer | |
imlec | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisHaberListesi |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/haberler/{id}
Haber (servisteki son sürüm) · kapsam akis.oku
Kimlik yerine numara da kabul edilir (H-001230). ETag ve If-None-Match ile 304.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Haber kimliği ya da numarası |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisHaber |
| 304 | Değişmedi (If-None-Match) | |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
DELETE/v1/haberler/{id}/yayinladim
"Yayınladım" işaretini kaldırır · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Haber kimliği ya da numarası |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisYayinIsaretiYaniti |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
PUT/v1/haberler/{id}/yayinladim
"Yayınladım" işareti · kapsam akis.oku
Kurum haberi kendi yayınında kullandığını bildirir (WordPress eklentisi yazıyı yayımlayınca kendiliğinden gönderir). Habere sonradan kabul edilmiş hukuki cevap ya da düzeltme yayımlanırsa yalnızca işaretleyen kurumlara değişiklik bildirimi gider. Yinelenebilir: yeniden gönderim adresi günceller. Bir kurum başka kurumun işaretini göremez.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Haber kimliği ya da numarası |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisYayinIsaretiYaniti |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 409 | icerik_iptal | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
MCP
DELETE/v1/mcp
MCP oturum sonu (durumsuz kipte etkisiz) · kapsam mcp.kullan
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 405 | Gövdesiz | |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/mcp
MCP akışı (durumsuz kipte açılmaz: 405) · kapsam mcp.kullan
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 405 | Gövdesiz | |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
POST/v1/mcp
MCP sunucusu (akışlı HTTP, durumsuz) · kapsam mcp.kullan
Araçlar: son_haberler, haber_ara, haber_getir, kategoriler, iller. Yalnızca tools/call çağrı sayılır.
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json nesne |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Medya
GET/v1/varliklar
Tek başına servis edilen medya · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
tur | query | fotograf · video · foto_360 · video_360 | |
baslangic | query | string | ISO 8601 ya da YYYY-AA-GG |
bitis | query | string | ISO 8601 ya da YYYY-AA-GG |
kategori_id | query | string[] | |
il_id | query | integer | |
boyut | query | integer | |
imlec | query | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisVarlikListesi |
| 400 | dogrulama_hatasi | application/json DisHata |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/varliklar/{id}
Fotoğraf, video ya da belge · kapsam akis.oku
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Medya kimliği ya da numarası (F-000386, V-000412, B-000017) |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisVarlik |
| 304 | Değişmedi (If-None-Match) | |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/varliklar/{id}/dosya
Dosya (303 ile imzalı adrese yönlendirir) · kapsam icerik.indir
Kopya hazırlanıyorsa 202 hazirlaniyor ve Retry-After. İndirilen fotoğraf ve video aylık indirme kotasına girer; belge (PDF, tek seçenek orijinal) girmez.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Medya kimliği ya da numarası |
secenek | query | kucuk · web · orijinal · 1080p · 720p · 480p · kapak | string |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 202 | Kopya hazırlanıyor (Retry-After) | application/json nesne |
| 303 | İmzalı dosya adresine yönlendirme (Location) | |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 409 | icerik_iptal, kota_doldu | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/varliklar/{id}/goruntuleyici
360° görüntüleyici yanıtı (döşemeler ya da video) · kapsam icerik.indir
Yalnızca 360° fotoğraf ve videoda. Döşeme adresleri doseme.adres_kalibindan kurulur; döşeme istekleri API kotasına girmez, jeton başına dakikalık sınıra girer. Jeton süresi dolunca bu uç yeniden çağrılır.
| Parametre | Yer | Tür | Açıklama |
|---|---|---|---|
id * | path | string | Medya kimliği ya da numarası (YHA-360-000412) |
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisGoruntuleyici |
| 401 | anahtar_gecersiz, anahtar_gerekli | application/json DisHata |
| 403 | kapsam_yok, paket_disi | application/json DisHata |
| 404 | bulunamadi | application/json DisHata |
| 409 | kuresel_degil | application/json DisHata |
| 429 | yavasla | application/json DisHata |
Sözlük
GET/v1/sozluk/iller
İller ve ilçeler · kapsam akis.oku
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisSozlukIller |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
GET/v1/sozluk/kategoriler
Kategoriler · kapsam akis.oku
| Yanıt | Açıklama | Gövde |
|---|---|---|
| 200 | Başarılı | application/json DisSozlukKategoriler |
| 401 | anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_doldu | application/json DisHata |
| 403 | abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok | application/json DisHata |
| 429 | gunluk_sinir_doldu, yavasla | application/json DisHata |
Webhook
Webhook olayı (Standard Webhooks imzalı)
Başlıklar: webhook-id (yeniden denemelerde aynı), webhook-timestamp (Unix saniye), webhook-signature: v1,<base64 HMAC-SHA256>. İmzalanan metin <webhook-id>.<webhook-timestamp>.<ham gövde>; anahtar whsec_ önekinden sonraki base64 çözülmüş baytlar. Olay türleri: haber.yeni, haber.duzeltme, haber.iptal, varlik.yeni, varlik.iptal, varlik.guncelleme, sinama.ping.
Gövde: WebhookGovdesi · ayrıntı: Webhook kılavuzu
Şemalar
CanliYayin
Canlı yayın (abonelere açılmış; anahtarın paketlerinde görülen). Adres taşımaz
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
no | string | CY-000041 |
baslik | string | null | |
aciklama | string | null | |
kategori | DisKategori | null | |
il | DisIl | null | |
kaynak | object | |
durum | canli · yeniden_baglaniyor · bitti | |
baslama_zamani | string | null | |
bitis_zamani | string | null | |
kayit_varlik_id | string | null | Kayıt videosu servise verildiyse (GET /v1/varliklar/:id) |
CanliYayinListesi
Canlı yayınlar (süren ya da son 7 günde biten)
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | CanliYayin[] |
CanliYayinOlayi
Webhook canlı yayın olayı (abonelere açıldığında ve bittiğinde; oynatma ya da akış adresi yok)
| Alan | Tür | Açıklama |
|---|---|---|
olay_id | string | |
olay | basladi · bitti | |
zaman | string | ISO 8601, UTC |
icerik | "canli_yayin" | |
canli_yayin | CanliYayin |
DisAdres
İmzalı, süreli dosya adresi
| Alan | Tür | Açıklama |
|---|---|---|
adres | string | |
son_gecerlilik_zamani | string | ISO 8601, UTC |
DisAramaSonucu
Arama sonucu
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | object[] | |
sonraki_imlec | string | null | |
devami_var | boolean |
DisBen
Anahtar, kurum, paketler ve sınırlar
| Alan | Tür | Açıklama |
|---|---|---|
anahtar | object | |
kurum | object | |
abonelik | object | |
paketler | DisPaket[] | |
sinirlar | object | |
kota | object |
DisDurum
Abone servislerinin durumu, kullanıcılara duyurulmuş açık olaylar ve planlı bakımlar
| Alan | Tür | Açıklama |
|---|---|---|
servisler | object[] | |
acik_olaylar | object[] | |
bakim_duyurulari | object[] |
DisDuzeltme
Düzeltme kaydı
| Alan | Tür | Açıklama |
|---|---|---|
zaman | string | ISO 8601, UTC |
surum_no | integer | |
not | string | null |
DisEklentiSurumu
Eklentinin güncel sürümü ve imzalı paketi (Ed25519); eklenti kurmadan önce SHA-256 ve imzayı doğrular
| Alan | Tür | Açıklama |
|---|---|---|
kod | string | |
surum | string | |
yayim_zamani | string | null | |
gereken_wordpress | string | |
gereken_php | string | |
sinanan_wordpress | string | null | |
indirme_adresi | string | |
sha256 | string | null | |
imza | string | null | |
boyut_bayt | integer | null | |
notlar | string | null | |
en_dusuk_surum | string | null | |
zorunlu | boolean |
DisEmbargo
Önceden verilen embargolu içerik: yayım serbest zamanı
| Alan | Tür | Açıklama |
|---|---|---|
zaman | string | ISO 8601, UTC |
suruyor | boolean |
DisEntegrasyonBildirimi
Bağlantının kendini tanıtması ve durum bildirimi (WordPress eklentisi her eşitleme döngüsünde; kişi verisi yok)
| Alan | Tür | Açıklama |
|---|---|---|
entegrasyon_id (isteğe bağlı) | string | null | |
tur | wordpress_eklentisi · baglayici · kendi_yazilimi | |
yazilim (isteğe bağlı) | object | null | |
eklenti (isteğe bağlı) | object | null | |
calisma_ortami (isteğe bağlı) | object | null | |
site_adresi (isteğe bağlı) | string | null | |
webhook_adresi (isteğe bağlı) | string | null | |
kip (isteğe bağlı) | webhook · cekme | null | |
yayin_bicimi (isteğe bağlı) | taslak · dogrudan | null | |
zamanlayici (isteğe bağlı) | wp_cron · sistem_cron · diger | null | |
son_cekme_zamani (isteğe bağlı) | string | null | |
son_olay_zamani (isteğe bağlı) | string | null | |
esleme (isteğe bağlı) | object | null | |
sayaclar (isteğe bağlı) | object | null | |
hatalar (isteğe bağlı) | object[] | null |
DisEntegrasyonYaniti
Entegrasyonun durumu, bir sonraki bildirimin zamanı, eklenti sürümü ve uyarılar
| Alan | Tür | Açıklama |
|---|---|---|
entegrasyon_id | string | null | |
durum | kuruluyor · calisiyor · hata · kaldirildi | null | |
sonraki_bildirim_saniye | integer | |
eklenti | object | null | |
webhook | object | null | |
uyarilar | object[] |
DisGoruntuleyici
360° görüntüleyici yanıtı (Faz 20): gömme döşemeleri ya da gömme videosu (2560 × 1280), filigran otomatik çıkış kuralıyla
| Alan | Tür | Açıklama |
|---|---|---|
varlik_id | string | |
no_metni | string | YHA-360-000412 |
tur | foto_360 · video_360 | |
durum | hazir · hazirlaniyor · yok | |
izdusum | esdikdortgen | |
kaynak_olcusu | object | |
acilis | object | |
sinirlar | object | |
taban | DisKureselAdres | null | |
doseme | object | null | |
video | object | null | |
kapak | DisKureselAdres | null | |
kucuk_resim | DisKureselAdres | null | |
yazi_katmani | object | |
baslik | string | null | |
imza | string |
DisHaber
Haber (servisteki son sürüm). İptalde govde, spot ve medya boştur
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
no | string | H-001230 |
surum_no | integer | |
durum | serviste · iptal_edildi | |
tur | object | |
oncelik | flas · onemli · normal | |
baslik | string | |
spot | string | null | |
etiketler | string[] | |
kategori | DisKategori | null | |
il | DisIl | null | |
ilce | DisIlce | null | |
imza | string | |
kaynak_kurum | object | null | |
ilk_servis_zamani | string | ISO 8601, UTC |
servis_zamani | string | ISO 8601, UTC |
embargo | DisEmbargo | null | |
kullanim | object | |
tanitim | boolean | |
iptal | object | null | |
zincir_id | string | null | |
dil (isteğe bağlı) | string | Haberin dili (BCP 47 dil alt etiketi: tr, en, ar; Faz 22) |
ceviri (isteğe bağlı) | object | null | Çeviri haberinde Türkçe aslı (Faz 22); Türkçe haberde null |
adres | string | |
deneme (isteğe bağlı) | boolean | Yalnızca deneme ortamında: true |
govde | string | |
duzeltmeler | DisDuzeltme[] | |
medya | DisVarlik[] | Yalnızca erişilebilen medya; paket dışı medya ve sayısı yoktur |
DisHaberListesi
Haber listesi (yeniden eskiye)
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | DisHaberOzet[] | |
sonraki_imlec | string | null | |
devami_var | boolean |
DisHaberOzet
Liste satırı (gövde, düzeltmeler ve medya yerine erişilebilen medya sayısı)
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
no | string | H-001230 |
surum_no | integer | |
durum | serviste · iptal_edildi | |
tur | object | |
oncelik | flas · onemli · normal | |
baslik | string | |
spot | string | null | |
etiketler | string[] | |
kategori | DisKategori | null | |
il | DisIl | null | |
ilce | DisIlce | null | |
imza | string | |
kaynak_kurum | object | null | |
ilk_servis_zamani | string | ISO 8601, UTC |
servis_zamani | string | ISO 8601, UTC |
embargo | DisEmbargo | null | |
kullanim | object | |
tanitim | boolean | |
iptal | object | null | |
zincir_id | string | null | |
dil (isteğe bağlı) | string | Haberin dili (BCP 47 dil alt etiketi: tr, en, ar; Faz 22) |
ceviri (isteğe bağlı) | object | null | Çeviri haberinde Türkçe aslı (Faz 22); Türkçe haberde null |
adres | string | |
deneme (isteğe bağlı) | boolean | Yalnızca deneme ortamında: true |
medya_sayisi | object |
DisHata
Hata biçimi (Faz 1) ve hata kodunun belge adresi
| Alan | Tür | Açıklama |
|---|---|---|
hata | object |
DisIl
İl (plaka kodu)
| Alan | Tür | Açıklama |
|---|---|---|
id | integer | |
ad | string |
DisIlce
İlçe
| Alan | Tür | Açıklama |
|---|---|---|
id | integer | |
ad | string |
DisKategori
Ajans kategorisi
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
kod | string | |
ad | string |
DisKuresel
360° içeriğin izdüşümü, açılış görünümü (derece) ve görüntüleyici yanıtının adresi
| Alan | Tür | Açıklama |
|---|---|---|
izdusum | esdikdortgen | |
acilis | object | |
goruntuleyici_adresi | string | GET /v1/varliklar/:id/goruntuleyici (kapsam icerik.indir) |
DisKureselAdres
Görüntüleyicinin imzalı, süreli dosya adresi (taban, kapak, küçük resim, video, şerit)
| Alan | Tür | Açıklama |
|---|---|---|
adres | string | null | |
bitis_zamani | string | null | |
onbellek_anahtari | string | |
genislik | integer | null | |
yukseklik | integer | null | |
boyut_bayt | integer | |
bicim | string | null | |
mime | string | null | |
sure_ms | integer | null | |
onbellege_alinabilir | boolean |
DisOlay
Akış olayı. Aynı olay iki kez gelebilir: olay_id ile ayıkla, düzeltmeyi surum_no ile uygula
| Alan | Tür | Açıklama |
|---|---|---|
olay_id | string | |
imlec | string | |
olay | yeni · duzeltme · iptal · guncelleme | |
zaman | string | ISO 8601, UTC |
icerik | haber · fotograf · video · foto_360 · video_360 | |
haber | DisHaber | null | |
varlik | DisVarlik | null |
DisOlayListesi
Akış sayfası (eskiden yeniye)
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | DisOlay[] | |
sonraki_imlec | string | null | |
devami_var | boolean |
DisPaket
Anahtarın kapsadığı paket
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
kod | string | |
ad | string | |
ozet | string | |
kanallar | string[] | |
metin | boolean | |
fotograf | boolean | |
video | boolean | |
tum_kategoriler | boolean | |
kategori_idleri | string[] | |
turkiye_geneli | boolean | |
il_idleri | integer[] | |
arsiv_baslangic | string | null |
DisSecenek
İndirilebilir kopya seçeneği; boyut ve filigran kopya bu kurum için hazırsa dolu
| Alan | Tür | Açıklama |
|---|---|---|
secenek | kucuk · web · orijinal · 1080p · 720p · 480p · kapak | string | 360 fotoğrafta kucuk, kapak, web, orijinal; 360 videoda kapak ve 3840x1920, 1920x960 (Faz 20) |
genislik | integer | null | |
yukseklik | integer | null | |
bicim | string | null | |
boyut_bayt | integer | null | |
filigranli | boolean | null |
DisSinama
Uyumluluk sınaması (deneme ortamında, anahtara özel altı adım)
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
ad | string | |
durum | suruyor · tamamlandi · suresi_doldu · iptal | |
sonuc | uyumlu · uyumsuz · eksik | null | |
baslangic_zamani | string | ISO 8601, UTC |
son_gecerlilik_zamani | string | ISO 8601, UTC |
bitis_zamani | string | null | |
yayin_bicimi | taslak · dogrudan | |
anahtar | object | |
baglanti | object | null | |
adimlar | DisSinamaAdimi[] |
DisSinamaAdimi
Uyumluluk sınamasının bir adımı: yayılan içerik, sunucunun gözlemi, bağlantının raporu, insan onayı
| Alan | Tür | Açıklama |
|---|---|---|
no | integer | |
kod | yeni_icerik · duzeltme · iptal · embargo_kullanim · kaynak · yayin_bicimi | |
ad | string | |
yayilma_zamani | string | null | |
icerik | object | null | |
gozlem | object | |
rapor | object | null | |
elle | object | null | |
sonuc | bekliyor · gecti · elle_gecti · kaldi |
DisSinamaListesi
Anahtarın son 20 uyumluluk sınaması
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | DisSinama[] |
DisSozlukIller
İller ve ilçeleri
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | object[] |
DisSozlukKategoriler
Kategoriler
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | DisKategori[] |
DisVarlik
Fotoğraf, video ya da belge (PDF; tek seçenek orijinal, filigransız; indirme kotasına girmez)
| Alan | Tür | Açıklama |
|---|---|---|
id | string | |
no | string | F-000386, V-000412, B-000017 (belge), YHA-360-000412 (360°) |
tur | fotograf · video · belge · foto_360 · video_360 | belge: PDF eki (Faz 15); hakkı metin hakkıdır. foto_360, video_360: 360° (Faz 20; hakkı icerik_360) |
durum | serviste · geri_cekildi | |
baslik | string | null | |
altyazi | string | null | |
kategori | DisKategori | null | |
il | DisIl | null | |
ilce | DisIlce | null | |
yer_adi | string | null | |
cekim_zamani | string | null | |
servis_zamani | string | null | |
imza | string | |
hak_sahibi | string | null | |
kullanim_kisiti | string | null | |
tanitim | boolean | |
genislik | integer | null | |
yukseklik | integer | null | |
sure_ms | integer | null | |
sayfa_sayisi (isteğe bağlı) | integer | null | Yalnızca belgede: PDF sayfa sayısı |
kucuk_resim | DisAdres | null | |
secenekler | DisSecenek[] | |
kuresel (isteğe bağlı) | DisKuresel | null | Yalnızca 360 türlerinde dolu (Faz 20); düz türlerde null |
dosya_adresi | string | |
bagli_haber | object | null | |
deneme (isteğe bağlı) | boolean | Yalnızca deneme ortamında: true |
DisVarlikListesi
Tek başına servis edilen medya
| Alan | Tür | Açıklama |
|---|---|---|
ogeler | DisVarlik[] | |
sonraki_imlec | string | null | |
devami_var | boolean |
DisYayinIsareti
"Yayınladım" işareti: haber kurumun yayınında kullanıldı; habere hukuki cevap ya da düzeltme yayımlanırsa kuruma bildirilir
| Alan | Tür | Açıklama |
|---|---|---|
adres (isteğe bağlı) | string | null | Haberin kurumun sitesindeki adresi |
yayim_zamani (isteğe bağlı) | string | null | Kurumun yayımladığı an (ISO 8601) |
kaynak (isteğe bağlı) | wordpress_eklentisi · kendi_yazilimi | null |
DisYayinIsaretiYaniti
Kurumun bu haberdeki "Yayınladım" işareti (yoksa null)
| Alan | Tür | Açıklama |
|---|---|---|
haber_id | string | |
yayinlandi | object | null |
WebhookGovdesi
Webhook gövdesi (Standard Webhooks imzalı): webhook-id, webhook-timestamp, webhook-signature
| Alan | Tür | Açıklama |
|---|---|---|
surum | 1 | |
olay_turu | haber.yeni · haber.duzeltme · haber.iptal · varlik.yeni · varlik.iptal · varlik.guncelleme · canli_yayin.basladi · canli_yayin.bitti · sinama.ping | |
zaman | string | ISO 8601, UTC |
deneme | boolean | |
govde_kesildi (isteğe bağlı) | boolean | |
veri | DisOlay | CanliYayinOlayi | object | object |
Yazar Haber Ajansı API ile Haber Çekme: Kimlik Doğrulama, JSON ve Örnek Kodlar
Yazar Haber Ajansı API (Abone API'si), servis edilen haberleri, fotoğrafları ve videoları HTTPS üzerinden JSON olarak çekmenizi sağlayan bir REST arayüzüdür. Kök adres https://api.yha.com.tr/v1'dir; her istek Authorization: Bearer <anahtar> başlığı taşır. API ile haber çekmek için paketinizde API kanalı açık bir YHA aboneliği, YHA Abone'de ürettiğiniz anahtar ve HTTP isteği gönderebilen herhangi bir programlama dili yeterlidir. Bu sayfada kimlik doğrulamadan hata yönetimine kadar tüm akışı ve curl, PHP, Python örneklerini bulacaksınız.
API, YHA entegrasyon seçenekleri içinde en esnek olanıdır: akışı imleçle kaldığınız yerden okur, kategoriye, ile, önceliğe ve içerik türüne göre süzer, arşivde arama yapar ve sonuçları kendi içerik yönetim sisteminize istediğiniz biçimde aktarırsınız. Diğer yöntemlerle karşılaştırma için Yazar Haber Ajansı geliştirici belgeleri ana sayfasına bakabilirsiniz.
Bu sayfa bir özettir. Uçların, parametrelerin ve yanıt şemalarının tam listesi OpenAPI 3.1 belgesindedir:
https://api.yha.com.tr/v1/openapi.json(anahtarsız).
API'yi ne zaman kullanmalısınız?
API ile haber çekmek özellikle şu durumlarda doğru tercihtir:
- Kendi yazdığınız ya da özel geliştirilmiş bir haber yazılımınız varsa.
- Haberleri kategori, il, öncelik veya tarih aralığına göre seçici biçimde almak istiyorsanız.
- Mobil uygulama, ekran veya bülten sistemi gibi birden fazla kanala aynı veriyi dağıtıyorsanız.
- Düzeltmeleri ve iptalleri otomatik olarak yansıtmanız gerekiyorsa.
Yalnızca bir besleme okuyabiliyorsanız YHA RSS ve Atom beslemeleri daha hızlı kurulur. WordPress kullanıyorsanız ajansın eklentisi bu API'yi sizin yerinize kullanır.
Kimlik doğrulama
Her istek Authorization: Bearer <anahtar> başlığı taşır. Anahtar sorgu dizgesinde kabul edilmez; böylece sunucu günlüklerine ve vekil sunuculara düşmez.
GET /v1/ben HTTP/1.1
Host: api.yha.com.tr
Authorization: Bearer yha_canli_...
Anahtarları YHA Abone · Çıkışlar · Anahtarlar ekranında siz üretirsiniz; anahtar yalnızca bir kez gösterilir. İki ortam vardır:
| Ön ek | Ortam | Kök |
|---|---|---|
yha_canli_ |
Canlı | https://api.yha.com.tr/v1 |
yha_deneme_ |
Deneme ortamı (örnek içerik) | https://deneme.yha.com.tr/v1 |
Canlı anahtar deneme adresinde, deneme anahtarı canlıda 401 anahtar_ortami_uyusmuyor alır. Canlı anahtar için kurumunuz adına API kullanım şartları bir kez onaylanır. Anahtarın kapsamı hangi uçları açacağını belirler: akis.oku (akış, anlık akış, haberler, varlıklar, sözlükler), icerik.indir (medya dosyası) ve arsiv.ara (arama). İçerik her zaman paket hakkınızla sınırlıdır. Ayrıntılar: Kimlik ve anahtarlar.
API anahtarı için güvenlik kuralları:
- Anahtarı yalnızca sunucu tarafında kullanın. Tarayıcıdan (CORS) istek zaten kabul edilmez; mobil uygulama paketine veya herkese açık bir Git deposuna da koymayın.
- Anahtarı kodun içine yazmak yerine ortam değişkeninde (
YHA_ANAHTARgibi) veya bir gizli bilgi yöneticisinde saklayın. - Anahtarı daraltın: en çok 20 IP bloğu, anahtara özel günlük sınır, paket kısıtı ve son kullanma tarihi tanımlayabilirsiniz.
- Anahtar sızarsa YHA Abone'den hemen iptal edin ve yenisini üretin. Planlı değişimde "Döndür" yeni anahtar üretir; eskisi seçtiğiniz geçiş süresince (0–168 saat, varsayılan 24) çalışmaya devam eder.
Temel uçlar
Bütün okuma uçları GET'tir; yanıtlar UTF-8 JSON, zamanlar ISO 8601 UTC'dir.
| Uç | Ne verir |
|---|---|
GET /v1/ben |
Anahtar, kurum, paketler ve sınırlar (ilk deneme için ideal) |
GET /v1/akis |
Servis edilen içeriğin olayları, eskiden yeniye, imleçli |
GET /v1/olaylar |
Anlık akış (sunucu gönderimli olaylar) |
GET /v1/haberler |
Haber listesi, yeniden eskiye |
GET /v1/haberler/{id} |
Haberin servisteki son sürümü (kimlik ya da H-001230 gibi numara) |
GET /v1/varliklar, GET /v1/varliklar/{id} |
Tek başına servis edilen medya; fotoğraf, video ya da belge |
GET /v1/varliklar/{id}/dosya |
Medya dosyası (303 ile süreli, imzalı adrese yönlendirir) |
GET /v1/ara |
Arşivde arama |
GET /v1/sozluk/kategoriler, GET /v1/sozluk/iller |
Kategori ve il sözlükleri |
PUT /v1/haberler/{id}/yayinladim |
Haberi yayınınızda kullandığınızı bildirir; habere sonradan hukuki cevap ya da düzeltme gelirse yalnızca işaretleyen kurumlara bildirim gider |
Süzgeçler: akışta icerik (haber, fotograf, video), kategori_id (sözlükteki kategori kimlikleri, virgülle birden fazla), il_id (plaka, 1–81), oncelik (flas, onemli, normal), olay (varsayılan yeni,duzeltme,iptal), paket_id ve boyut (varsayılan 50, en çok 100). /v1/haberler ayrıca baslangic, bitis (ISO 8601 ya da YYYY-AA-GG), durum ve dil alır; /v1/ara zorunlu q (1–300 karakter) ile çalışır.
Tarih parametrelerinde saat dilimli bir ISO 8601 değer gönderecekseniz URL içinde + işaretini %2B olarak kodlayın; aksi halde birçok sunucu + karakterini boşluk olarak yorumlar.
Akış ve imleç (sayfa numarası yoktur)
YHA'da sayfa numarası ve toplam sayı yoktur; bütün listeler imleçlidir. Yanıt { "ogeler", "sonraki_imlec", "devami_var" } biçimindedir. Akışta döngü şöyledir:
- İlk istekte imleç vermeyin: akış son 24 saatten (ya da
baslangic'tan) başlar; en çok 7 gün geri gidilir. Daha eskisi için/v1/haberlerve/v1/arakullanılır. - Yanıttaki
sonraki_imlec'i saklayın ve bir sonraki istekte?imlec=olarak verin. devami_vardoğruysa hemen yeniden sorun; yanlışsa en erken 10 saniye bekleyin. Daha sık soran dakikalık sınıra takılır.
Ayrıntılı anlatım: Akış ve imleç.
JSON yanıt örneği
Yanıtlar UTF-8 kodludur ve RFC 8259 JSON standardına uyar. Akıştaki her öğe bir olaydır (DisOlay); olay alanı yeni, duzeltme, iptal ya da guncelleme olabilir. Aşağıda kısaltılmış bir akış yanıtı görüyorsunuz:
{
"ogeler": [
{
"olay_id": "…",
"imlec": "MjAyNi0xMC0wN1Qx…",
"olay": "duzeltme",
"zaman": "2026-10-07T11:19:00Z",
"icerik": "haber",
"haber": {
"id": "…",
"no": "H-001230",
"surum_no": 2,
"durum": "serviste",
"oncelik": "normal",
"baslik": "…",
"spot": "…",
"govde": "…",
"kategori": { "id": "…", "kod": "ekonomi", "ad": "Ekonomi" },
"il": { "id": 61, "ad": "Trabzon" },
"imza": "…",
"ilk_servis_zamani": "2026-10-07T10:02:00Z",
"servis_zamani": "2026-10-07T11:19:00Z",
"embargo": null,
"kullanim": { "kaynak_gosterme_notu": "…", "kullanim_kisiti": null },
"tanitim": false,
"iptal": null,
"duzeltmeler": [ { "zaman": "2026-10-07T11:19:00Z", "surum_no": 2, "not": "…" } ],
"medya": []
},
"varlik": null
}
],
"sonraki_imlec": "MjAyNi0xMC0wN1Qx…",
"devami_var": false
}
En önemli kurallar: haber kimliğini (id) veritabanınızda benzersiz anahtar olarak saklayın, aynı olay iki kez gelebileceği için olay_id'yi ayıklayın ve düzeltmeyi yalnızca surum_no sizdekinden büyükse uygulayın. İptalde govde, spot ve medya boş gelir; haberi yayından kaldırın. Alanların tamamı geliştirici belgelerindeki haber veri modeli bölümünde özetlenir.
Örnek kodlar
curl
export YHA_ANAHTAR=yha_deneme_...
curl -s "https://deneme.yha.com.tr/v1/ben" -H "Authorization: Bearer $YHA_ANAHTAR"
curl -s "https://deneme.yha.com.tr/v1/akis?boyut=50" -H "Authorization: Bearer $YHA_ANAHTAR"
curl -s "https://deneme.yha.com.tr/v1/akis?imlec=$IMLEC" -H "Authorization: Bearer $YHA_ANAHTAR"
PHP
<?php
$kok = getenv('YHA_KOK') ?: 'https://deneme.yha.com.tr';
$anahtar = getenv('YHA_ANAHTAR');
$dosya = __DIR__ . '/imlec.txt';
$imlec = is_file($dosya) ? trim(file_get_contents($dosya)) : '';
$sorgu = ['boyut' => 100] + ($imlec !== '' ? ['imlec' => $imlec] : []);
$ch = curl_init($kok . '/v1/akis?' . http_build_query($sorgu));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $anahtar, 'Accept: application/json'],
]);
$yanit = curl_exec($ch);
$durum = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$g = json_decode((string) $yanit, true);
if ($durum !== 200) {
error_log('YHA API: ' . $durum . ' ' . ($g['hata']['kod'] ?? ''));
exit(1);
}
foreach ($g['ogeler'] as $olay) {
// olay_id ile ayıkla, haber id'sine göre ekle, düzelt ya da kaldır
echo $olay['olay'], ' ', $olay['haber']['no'] ?? $olay['varlik']['no'], PHP_EOL;
}
if ($g['sonraki_imlec']) {
file_put_contents($dosya, $g['sonraki_imlec']);
}
Python
import os, time, requests
KOK = os.environ.get("YHA_KOK", "https://deneme.yha.com.tr")
OTURUM = requests.Session()
OTURUM.headers["Authorization"] = f"Bearer {os.environ['YHA_ANAHTAR']}"
imlec = oku_imlec() # kendi deponuzdan
while True:
y = OTURUM.get(f"{KOK}/v1/akis", params={"imlec": imlec, "boyut": 100}, timeout=30)
if y.status_code == 429:
time.sleep(int(y.headers.get("Retry-After", "10")))
continue
y.raise_for_status()
g = y.json()
for olay in g["ogeler"]:
isle(olay) # olay_id ile ayıkla, surum_no ile düzelt, iptalde kaldır
if g["sonraki_imlec"]:
imlec = g["sonraki_imlec"]
yaz_imlec(imlec)
if not g["devami_var"]:
time.sleep(10)
Daha kapsamlı başvuru bağlayıcıları (Python, JavaScript, PHP, C#) imleç, ayıklama, düzeltme, iptal, embargo, kaynak notu ve medya indirmeyi doğru yapar; entegrasyon kitinde bulunur.
Medya dosyalarını indirme
haber.medya yalnızca paketinizin açtığı medyayı taşır. Dosyayı GET /v1/varliklar/{id}/dosya?secenek=web ile alırsınız: 303 ile süreli, imzalı bir adrese yönlendirilirsiniz (curl -L). İmzalı adrese giderken Authorization başlığını taşımayın. Kopya hazırlanıyorsa 202 ve Retry-After gelir; o kadar bekleyip yeniden deneyin. Seçenekler fotoğrafta kucuk, web, orijinal; videoda 1080p, 720p, 480p'dir. İndirilen fotoğraf ve video aylık indirme kotasına girer; aynı dosya 24 saat içinde yeniden indirilirse düşmez. İptal edilen içeriğin dosyası verilmez (409 icerik_iptal).
HTTP durum kodları ve hata biçimi
API sonucu standart HTTP durum kodlarıyla bildirir; anlamları RFC 9110 HTTP Semantics belgesinde tanımlıdır, MDN HTTP durum kodları sayfası da iyi bir başvuru kaynağıdır. Bütün hatalar aynı gövdeyle gelir:
{ "hata": { "kod": "kapsam_yok", "mesaj": "Bu anahtarın bu uç için kapsamı yok.", "belge": "…", "kapsam": "icerik.indir" } }
mesaj Türkçedir ve değişebilir; yazılımınız kod'a bakmalıdır. Her yanıtta X-YHA-Istek başlığı vardır; destek isterken bu değeri verin. Sık görülen kodlar:
| HTTP | Kod | Ne yapmalısınız? |
|---|---|---|
| 304 | — | If-None-Match ile sordunuz, değişiklik yok; önbelleği kullanın |
| 400 | dogrulama_hatasi |
alanlar hangi parametrenin neden reddedildiğini söyler (ör. imlec_gecersiz) |
| 401 | anahtar_gerekli, anahtar_gecersiz, anahtar_iptal, anahtar_suresi_doldu, anahtar_ortami_uyusmuyor |
Başlığı ve anahtarı kontrol edin; gerekirse yeni anahtar üretin |
| 403 | kanal_paketinde_yok, paket_disi, kapsam_yok, ag_disi, abonelik_askida |
Paketiniz, anahtar kapsamı ya da IP listesi bu isteğe izin vermiyor |
| 404 | bulunamadi |
Kimlik ya da numara yok |
| 409 | kota_doldu, icerik_iptal |
İndirme kotası doldu ya da içerik iptal edildi |
| 429 | yavasla, gunluk_sinir_doldu |
Retry-After kadar bekleyin |
| 500 | sunucu_hatasi |
Kısa süre sonra yeniden deneyin; sürerse X-YHA-Istek değeriyle bildirin |
Tam liste: Hatalar.
Sınırlar, 429 ve geri çekilme
Dakikalık istek sınırı anahtar başına varsayılan 120'dir (anahtara özel olabilir). Aşımda sunucu RFC 6585 ile tanımlanan 429 Too Many Requests kodunu yavasla hata koduyla döndürür ve Retry-After başlığında beklemeniz gereken süreyi verir. Kurumun günlük API çağrısı paketinizde yazılıdır; dolduğunda 429 gunluk_sinir_doldu gelir ve sınır Türkiye saatiyle gece yarısı sıfırlanır. Deneme ortamında sınır dakikada 30, günde 2.000 istektir.
Her yanıtta kalan hakkınızı görebilirsiniz:
| Başlık | Ne |
|---|---|
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset |
Dakikalık sınır, bu dakikada kalan, sıfırlanmaya saniye |
X-YHA-Gunluk-Sinir, X-YHA-Gunluk-Kalan |
Günlük sınır ve bugün kalan |
Retry-After |
429 ve 202'de bekleme süresi (saniye) |
Her anahtarlı istek bir çağrıdır (304 dahil); reddedilen istek sayılmaz. İyi bir istemci 429'da Retry-After'a uyar, 5xx'te bekleme süresini her denemede artırır, belirli bir deneme sayısından sonra durup uyarı üretir. Sık sorgulama yerine değişiklikleri bildirim olarak almak için anlık akışı ya da YHA webhook bildirimlerini kullanabilirsiniz. Ayrıntılar: Sınırlar.
Adım adım senkronizasyon stratejisi
API ile haber çekmeye yeni başlayan ekiplerin en sık yaptığı hata, her çalıştırmada son haberleri baştan çekip hepsini yeniden kaydetmektir. YHA'da doğru yol akışı imleçle okumaktır:
- İmleci saklayın. Son işlediğiniz yanıtın
sonraki_imlecdeğerini veritabanında veya küçük bir dosyada tutun. - İmleçten devam edin. Bir sonraki çalıştırmada bu değeri
?imlec=olarak gönderin; tarih hesabı ve örtüşme payı gerekmez. - Olayları ayıklayın.
olay_id'yi saklayın; daha önce gördüğünüz olayı atlayın. - Kimliğe göre ekle, düzelt ya da kaldır. Aynı
idvarsa ve gelensurum_nodaha büyükse kaydı güncelleyin;iptalolayında haberi yayından kaldırın; yoksa yeni kayıt oluşturun. - Embargoya uyun.
embargo.suruyordoğruysa haberiembargo.zamangelene kadar yayımlamayın. - İmleci en son ilerletin. Olaylar başarıyla işlendikten sonra imleci yazın. Arada hata olursa bir sonraki çalıştırma aynı noktadan devam eder; tekrar gelen olaylar
olay_idile elenir.
Akış en çok 7 gün geriye gider; sunucunuz daha uzun kapalı kaldıysa eksiği /v1/haberler ile tarih aralığı vererek tamamlayın.
Gelen içeriği güvenli yayımlama
Haber gövdesini sitenizde yayımlamadan önce izin verilen etiketlere (paragraf, başlık, liste, bağlantı, kalın/italik) göre temizlemek iyi bir güvenlik alışkanlığıdır. PHP'de HTML Purifier, Python'da nh3 gibi kütüphaneler bu iş için yaygın olarak kullanılır. Bağlantıların href değerlerinde yalnızca http ve https şemalarına izin verin.
Test ve hata ayıklama
- İlk denemeleri deneme ortamında yapın; yapay örnek içerik 10 dakikada bir yeni olay üretir. Bkz. Deneme ortamı.
- Hata durumlarını denemek için yalnızca deneme ortamında
X-YHA-Deneme-Hatabaşlığını gönderin (paket_disi,kota_doldu,yavasla,sunucu_hatasi). - curl'de
-vile başlıkları görebilirsiniz; çıktıyı paylaşırken anahtarı gizleyin. Yanıtlarıjqile inceleyin. - Her isteği adres, durum kodu, hata kodu ve
X-YHA-Istekdeğeriyle kaydedin. - Beklenmedik hatalarda önce YHA servis durumu sayfasında devam eden bir olay olup olmadığını kontrol edin.
Önbellekleme ve verimlilik
- Kategori ve il sözlükleri gibi seyrek değişen verileri önbelleğe alın.
- Ayrıntı uçları (
/v1/haberler/{id},/v1/varliklar/{id})ETagverir;If-None-Matchile sorduğunuzda değişiklik yoksa 304 alırsınız. 304 de bir çağrı sayılır. - Medyayı her seferinde yeniden indirmeyin; aynı varlığın yerel kopyasını kullanın.
- İstekleri zaman aşımı değeriyle gönderin; yanıt vermeyen bir bağlantı tüm iş kuyruğunuzu kilitleyebilir.
- Yanıttaki bilinmeyen alanları ve değerleri yok sayın; bunlar geriye uyumlu eklemelerdir. Kaldırılacak bir uç
DeprecationveSunsetbaşlıklarıyla önceden duyurulur.
Yapay zekâ asistanlarıyla kullanım
Editörlerinizin Claude Code, Cursor gibi bir yapay zekâ istemcisinden "bugünkü ekonomi haberlerini getir" gibi isteklerle YHA verisine ulaşmasını istiyorsanız, Yazar Haber Ajansı MCP sunucusu aynı içeriği istemcilerin anlayacağı araçlar olarak sunar.
API kavramına yeniyseniz önce API nedir? ve JSON nedir? rehberlerine göz atmanızı öneririz.
Sıkça Sorulan Sorular
Yazar Haber Ajansı API ücretsiz mi?
API, abonelik paketine sözleşmeyle eklenen bir çıkıştır; fiyatlar teklifle verilir. Paketler için YHA abonelik ve paketler sayfasına bakabilir, teklif için başvuru formunu kullanabilirsiniz. Deneme ortamı anahtarı ise kullanım şartları onayı gerektirmez ve aboneliğiniz denemedeyken bile çalışır.
API yanıtları hangi formatta?
Yanıtlar UTF-8 kodlu JSON'dur. XML gerekiyorsa dosya çıkışlarındaki NewsML-G2, NITF ya da ajans XML'i biçimlerini veya RSS/Atom beslemesini kullanabilirsiniz.
Haberleri ne sıklıkla çekmeliyim?
Akışta devami_var yanlış döndüğünde en erken 10 saniye sonra yeniden sorun. Saniyeler içinde almak istiyorsanız anlık akışa (/v1/olaylar) bağlanın ya da webhook kullanın.
API anahtarımı JavaScript ile tarayıcıdan kullanabilir miyim?
Hayır. API tarayıcıdan (CORS) gelen isteği kabul etmez ve tarayıcıya gönderilen her şey ziyaretçiler tarafından görülebilir. İstekleri kendi sunucunuz üzerinden yapın.
Hangi programlama dilini kullanmalıyım?
API dilden bağımsızdır; HTTPS isteği gönderip JSON okuyabilen her dil çalışır. Belgelerde ve entegrasyon kitinde curl, Python, JavaScript, PHP ve C# örnekleri vardır.
Birden fazla anahtar kullanabilir miyim?
Evet. Anahtar kurumunuzundur ve Anahtarlar ekranında birden fazla anahtar üretebilirsiniz; her entegrasyon için ayrı anahtar, sızıntıda yalnızca onu iptal etmenizi ve "son kullanım IP'si" ile kimin kullandığını görmenizi sağlar. İçeriği birden fazla sitede yayımlama hakkı ise abonelik sözleşmenize bağlıdır.
Kaldırılan haberleri nasıl anlarım?
Akışta olay: "iptal" gelir; haberin durum alanı iptal_edildi olur, iptal nesnesi zamanı ve gerekçeyi taşır. iptal.kaldirma doğruysa kaldırma hukuki kaynaklıdır. Her iki durumda da haberi kendi yayınınızdan kaldırın.