API

Amazon Türkiye API: amazon.com.tr'de fiyat takibi ve ürün verisi

Bu API amazon.com.tr'yi alıcı gözüyle okur: arama sonucundaki ürünler, TL fiyat, yıldız ve değerlendirme sayısı, kupon ve kampanya rozetleri, aynı ürün için başka satıcıların teklifleri. Amazon'da satıcı ya da ortaklık hesabı açmanız gerekmez. Bu servisin Amazon Satıcı Merkezi'nin SP-API'siyle ilgisi yok: sipariş, envanter ya da kendi ilanlarınızı buradan yönetemezsiniz, yalnız herkese açık katalog okunur. Türkiye mağazası için her isteğe `"marketplace": "com.tr"` ekleyin. Fiyat takibi kuruyorsanız iş genelde iki uçla biter: takip listesini `products_batch` ile toplu yenilemek, düşüş gördüğünüz üründe `product/offers` ile kimin kaça sattığına bakmak.

Uçlar

endpointNe döndürürZorunlu
searchAnahtar kelimeyle arama: ASIN, tam başlık, TL fiyat, yıldız, değerlendirme sayısı, görsel, sponsorlu bayrağı, kupon ve kampanya rozeti. TL cinsinden fiyat aralığı, en düşük puan ve marka filtresi; alaka, fiyat, puan ve yenilik sıralaması. Bir sorgu için `max_results` ile 336 sonuca kadar.query
product/detailASIN'le tam ürün sayfası: başlık, marka, fiyat, liste fiyatı, stok metni, özellik maddeleri, görseller, varyantlar, teknik özellikler tablosu, kategori yolu, buybox satıcısı ve gönderimi Amazon'un yapıp yapmadığı, 'Geçen ay … satın alındı' bilgisi, yıldız dağılımı, barkodlar ve sayfadaki ilk sekiz yorum.asin
product/offersBir ürünün bütün teklifleri: buybox'taki teklif ve diğerleri, her biri fiyat, durum (yeni/ikinci el), gönderim yeri ve teslimat bilgisiyle.asin
product/reviewsYorumlar: puan, başlık, tarih, metin, doğrulanmış satın alma ve 'faydalı' oyları; varsa Amazon'un sayfada gösterdiği yorum özeti. `marketplaces` ile birkaç Amazon mağazasının yorumları tekrarsız birleştirilebilir.asin
product/relatedÜrün sayfasındaki öneri şeritleri, ilişki türüne göre ayrılmış (birlikte alınanlar, bunu inceleyenlerin baktıkları, benzer ürünler); her üründe ASIN, fiyat ve yıldız.asin
products_batchTek çağrıda 40'a kadar ASIN: başlık, güncel fiyat, yıldız, görsel, kupon. Özet karttır; teknik özellik ya da yorum için `product/detail` gerekir. Amazon'un döndürmediği ASIN'ler `not_found` içinde listelenir.asins
gtin-to-asinBarkoddan ASIN'e: EAN, UPC ya da ISBN verin, eşleşen Amazon ürünlerini alın. `verify` ile ürün sayfasının o barkodu gerçekten taşıyıp taşımadığı da kontrol edilir.hepsi opsiyonel
category/browseBir kategoriyi node numarasıyla sayfa sayfa gezer; bir kelimeye uyanları değil, bölümün bütün ürünlerini istediğinizde.node
bestsellersBir bölümün çok satanlar listesi, 100. sıraya kadar.category
new-releasesBir bölümün yeni çıkanlar listesi, çok satanlarla aynı yapıda.category
dealsAmazon'un Fırsatlar sayfası: her üründe ASIN, başlık, fiyat, eski fiyat ve indirim oranı, görsel.hepsi opsiyonel
autocompleteBirkaç harf verin, Amazon'un arama kutusunda tamamlayacağı ifadeleri alın.query
seller/profileSatıcının herkese açık profili: olumlu değerlendirme oranı ve değerlendirme sayısı.seller_id
seller/productsSatıcının mağaza vitrinindeki ürünler, sayfalı olarak.seller_id
seller/reviewsAlıcıların satıcıya verdiği puanlar ve yorumlar, tarihleriyle.seller_id

Her çağrı kredi ile ücretlendirilir. Başarısız ve engellenen çağrılar ücretsizdir.

Çalışan örnek

`campaign` Amazon'un kartın üstüne koyduğu rozettir; bu aramada 20 satırın birinde 'Fırsat', birinde '365 günün en düşük fiyatı' yazıyordu. İkincisi Amazon'un kendi beyanıdır, bizim hesapladığımız bir fiyat geçmişi değildir; fiyat takibinde bu değeri fiyatın yanına kaydedin ki kampanyalı fiyat sonradan kalıcı indirim gibi görünmesin. Birkaç kartta fiyat yoktu (iki Philips modeli, Arçelik TKM 9961 B); fiyat `null` gelir, teklif olup olmadığına `product/offers` ile bakılır. Arzum satırındaki `rating_count` değerine bakmadan geçmeyin: o sayı yanlış, nedeni Sınırlar bölümünde.

İstek
curl -X POST https://api.reefapi.com/amazon/v1/search \
  -H "x-api-key: ANAHTARINIZ" \
  -H "content-type: application/json" \
  -d '{"query": "türk kahvesi makinesi", "marketplace": "com.tr", "max_results": 20}'
Yanıt (kısaltılmış)
{
  "ok": true,
  "data": {
    "results": [
      {
        "asin": "B0GNN6JYSC",
        "title": "Emsan Közde Türk Kahve Makinesi Shiny Black",
        "brand": null,
        "price": 1363.21,
        "currency": "TL",
        "currency_code": "TRY",
        "rating": 4.1,
        "rating_count": 126,
        "sponsored": false,
        "coupon": null,
        "campaign": null,
        "in_stock": true,
        "...": "..."
      },
      {
        "asin": "B01N0Y6D8Z",
        "title": "Arzum OK004 Okka Minio Türk Kahvesi Makinesi, 4 Fincan Kapasiteli, Taşma Önleyici Sistem, 480 W, Krom",
        "price": 1813.9,
        "rating": 4.3,
        "rating_count": 1800000000,
        "...": "..."
      },
      {
        "asin": "B0CNW7VGW4",
        "title": "Philips 5000 Serisi Türk Kahvesi Makinesi, Közde Türk Kahvesi Pişirme Fonksiyonu, ...",
        "price": null,
        "currency": null,
        "rating": 4,
        "rating_count": 922,
        "in_stock": null,
        "...": "..."
      },
      {
        "asin": "B0GS6HD9ZZ",
        "title": "Sinbo SCM-2990 Otomatik Türk Kahve Makinesi, 1-4 Fincan Kapasiteli, ...",
        "price": 1299,
        "rating": 2.6,
        "rating_count": 3,
        "campaign": "365 günün en düşük fiyatı",
        "...": "..."
      }
    ],
    "page": 1
  },
  "meta": {
    "marketplace": "com.tr",
    "currency_code": "TRY",
    "record_count": 20,
    "pagination": { "returned": 20, "has_more": true, "page_ceiling": 7 },
    "charged_credits": 1,
    "cache_hit": false,
    "mode": "live"
  }
}

Amazon scraper'ı Python'da kendiniz yazmadan önce

amazon.com.tr'de olmayan bir ASIN istendiğinde Amazon'un cevabı her zaman bir 404 değil; yerine yaklaşık 2 KB'lık bir 'Sayfa Bulunamadı' sayfası gelebiliyor. Bunu 28 Haziran'da amazon.com'dan alınmış bir ASIN'i Türkiye mağazasında isterken yakaladık: yalnız durum koduna bakan bir script bu sayfayı geçerli ürün sanar ve veri tabanına başlıksız, fiyatsız bir satır yazar. Motor bu sayfayı tanır ve NOT_FOUND döndürür.

Kupon metninde de bir tuzak var. Arama kartında Amazon kuponun iki hâlini birden basıyor: oturum açmamış ziyaretçiye görünen hâli ve gizli duran, '… indirim kuponu uygulandı' diye biten hâli. Oturum açmamış bir istemci için hiçbir kupon uygulanmış değildir, ama gizli metni okuyan bir parser öyle kaydeder. `coupon` alanı teklifi verir, sondaki 'uygulandı' kelimesi atılır.

Fırsatlar sayfası ise amazon.com'dakinden farklı kurulmuş: amazon.com.tr'de ürünler HTML'de bağlantı olarak değil, sayfaya gömülü bir JSON bloğunda geliyor. amazon.com için yazılmış bir fırsat scraper'ı Türkiye'de hiç hata vermeden 0 ürün bulur.

Üç durumun ortak yanı, hiçbirinin hata üretmemesi: script çalışmayı sürdürür, yalnız veri tabanına boş satır, 'uygulandı' sanılan kupon ya da sıfır fırsat yazılır. Fiyat alarmı kuruyorsanız sorun genelde alarm susunca fark edilir.

Sınırlar ve dürüst notlar

  • Amazon'la bağımız yok: bu, Amazon'un yayımladığı bir API değil; aramızda bir ortaklık ya da sözleşme de bulunmuyor.
  • `marketplace` varsayılanı `com`: alan unutulursa amazon.com sorgulanır, fiyatlar USD ve başlıklar İngilizce gelir.
  • Bilinen kusur: arama kartında 1.000'in üzerindeki değerlendirme sayıları yanlış dönüyor. Amazon Türkiye kartta 'bin'i 'B' diye kısaltıyor ('1,8 B'), motor bunu İngilizcedeki gibi milyar okuyor: 25 Ekim'de bu aramadaki 1.000 üstü üç kartın üçü de milyarlık bir sayıyla geldi; Arzum OK004 için arama `rating_count: 1800000000` verdi, aynı ürünün `product/detail` yanıtı 1810. Düzeltilene kadar 1.000 üstü sayılar için `product/detail` değerini kullanın.
  • Arama satırında `brand` boş kalıyor (bu sorguda 20/20); marka `product/detail` içinde gelir. Kartta fiyat basılmamış ürünlerde (25 Ekim'deki iki ölçümde 20 kartın 3'ü ve 4'ü) fiyat null'dır.
  • Fiyat geçmişi yok: yanıt yalnız çağrı anındaki fiyatı taşır. Fiyat grafiği istiyorsanız aynı ASIN'leri düzenli çağırıp kendiniz saklamalısınız.
  • Amazon bir arama için en fazla 7 sayfa gösteriyor; tek sorguyla 336 sonucun ötesine geçilmez. Bir bölümün tamamı için `category/browse` kullanılır.
  • `prime` yaklaşık çalışır, çünkü Amazon güvenilir bir Prime filtresi sunmuyor. `brand` markayı aramaya kelime olarak ekler, sonuçta başka markalar da kalabilir; Amazon'un kendi marka süzgeci için `brand_exact` kullanın. `min_rating` ve `deals` filtrelerini amazon.com.tr'de ölçmedik.
  • `product/detail` ürün sayfasının tamamını okuduğu için 2 kredi düşer (25 Ekim'deki ölçümde 1,9 MB'lık sayfa). Arama, getirilen her sonuç sayfası için 1 kredidir: `max_results` 20 tek sayfa, 336'ya kadar en çok 7 sayfa.