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
| endpoint | Ne döndürür | Zorunlu |
|---|---|---|
| search | Anahtar 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/detail | ASIN'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/offers | Bir ü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/reviews | Yorumlar: 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_batch | Tek ç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-asin | Barkoddan 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/browse | Bir kategoriyi node numarasıyla sayfa sayfa gezer; bir kelimeye uyanları değil, bölümün bütün ürünlerini istediğinizde. | node |
| bestsellers | Bir bölümün çok satanlar listesi, 100. sıraya kadar. | category |
| new-releases | Bir bölümün yeni çıkanlar listesi, çok satanlarla aynı yapıda. | category |
| deals | Amazon'un Fırsatlar sayfası: her üründe ASIN, başlık, fiyat, eski fiyat ve indirim oranı, görsel. | hepsi opsiyonel |
| autocomplete | Birkaç harf verin, Amazon'un arama kutusunda tamamlayacağı ifadeleri alın. | query |
| seller/profile | Satıcının herkese açık profili: olumlu değerlendirme oranı ve değerlendirme sayısı. | seller_id |
| seller/products | Satıcının mağaza vitrinindeki ürünler, sayfalı olarak. | seller_id |
| seller/reviews | Alı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.
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}'{
"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.