# Formatlar

XML, JSON ve push desteği
Kaynak: https://selwise.com/docs/product-feeds/formats

Selwise üç besleme formatını okur: XML, JSON ve CSV. Üçü de akış hâlinde okunur: belge asla bütünüyle belleğe alınmaz, bu yüzden büyük kataloglar sorun değildir.

## Panelde nerede

**Katalog → Ürün Beslemesi** (Catalog → Product Feed) → **Configuration** → **Feed URL** sekmesi → **Feed Type** (XML / JSON / CSV). Dosya yüklemede ve push'ta format seçilmez; baytlardan anlaşılır.

## Format seçimi bir bildirimdir

Panelde bir format seçersiniz, ama asıl belirleyici dosyanın kendisidir: ilk baytlara bakılır ve `<` ile başlıyorsa XML, `{` ya da `[` ile başlıyorsa JSON, ilk satırında virgül, noktalı virgül veya sekme geçen bir tablo ise CSV okunur. Seçtiğinizle dosya uyuşmuyorsa Selwise doğru okuyucuyu kullanır ve panelde yazan formatı düzeltir; XML olarak işaretlenmiş bir JSON dışa aktarımı bu yüzden hata vermez. `.gz` ile sıkıştırılmış içerik, içerik türü ne derse desin kendiliğinden açılır. Beklenmedik bir uzantı (`.txt`, `.tsv`) da okunur.

## XML

En yaygın format. Google Merchant uyumlu beslemeler dahil çoğu e-ticaret altyapısının ürettiği XML doğrudan okunur. Bir ürünü saran öğe şöyle bulunur:

1. Belgenin ilk 256 KB'ında `item`, `product`, `entry`, `offer`, `urun` ya da `record` adlı bir öğe varsa ürün odur (bu sırayla).
2. Yoksa en çok tekrar eden öğe seçilir (en az iki kez; eşitlikte en sığ olan).
3. Hiçbir şey tekrar etmiyorsa "No products found in feed" olur.

```xml
<products>
  <product>
    <id>SKU-001</id>
    <name>Örnek Ürün</name>
    <price>299.90</price>
    <originalPrice>399.90</originalPrice>
    <stock>12</stock>
    <category>Kadın &gt; Ayakkabı</category>
    <image>https://magaza.com/img/1.jpg</image>
    <url>https://magaza.com/urun/ornek</url>
  </product>
</products>
```

Etiket adlarınız farklıysa sorun değil — eşleştirme ile bağlarsınız. Selwise'in kendiliğinden tanıdığı adlar için bkz. [Otomatik Tanınan Alan Adları](/docs/product-feeds/field-aliases). Öneklenmiş etiketler (`g:price`, `c:category_hierarchy`) ve öznitelikler (`id="…"`) öneksiz adla bulunur: eşleştirmede `price` ya da `item_group_id` yazmanız yeter.

## JSON

Belge bir dizi olabilir ya da ürün dizisi şu anahtarlardan birinde durabilir: `products`, `items`, `results` (Akinon/Omnitron sayfalanmış dışa aktarımı), `data`, `rows`.

```json
{
  "products": [
    {
      "id": "SKU-001",
      "name": "Örnek Ürün",
      "price": 299.90,
      "originalPrice": 399.90,
      "stock": 12,
      "category": "Kadın > Ayakkabı",
      "image": "https://magaza.com/img/1.jpg",
      "url": "https://magaza.com/urun/ornek"
    }
  ]
}
```

Ürünler başka bir anahtarın altındaysa belgeyi bu anahtarlardan birinde sarın ya da kökte bir dizi gönderin; ürün dizisinin yolu panelden ayarlanamaz.

## CSV

Her PIM ve her elektronik tablo bu formatı dışa aktarabilir. İlk satır başlık satırıdır; sütun adları eşleştirmede kullandığınız alan adlarıdır.

```
sku;title;price;stock;image
SKU-001;Örnek Ürün;299,90;12;https://magaza.com/img/1.jpg
```

Ayırıcıyı siz seçmezsiniz: başlık satırından okunur (`,`, `;`, sekme ya da `|`; tırnak içindeki ayırıcılar sayılmaz). Excel makinenin diline göre virgül ya da noktalı virgül yazdığı için Türkçe ve Almanca dışa aktarımlar noktalı virgüllüdür ve bu kendiliğinden anlaşılır. Başlıklar kırpılır, boş satırlar ve UTF-8 BOM atlanır; eksik ya da fazla hücreli bir satır tüm dosyayı düşürmez, eşlenebildiği kadar okunur (hiçbir şeye eşlenmeyen satır **Rows skipped** sayılır).

Fiyatta hem `1.299,90` hem `1299.90` doğru okunur: son nokta ya da virgül ondalık ayracıdır; arkasında tam üç hane varsa binlik ayracıdır (`2.500` → 2500).

## İç içe yapılar

Alanlarınız iç içe nesnelerde duruyorsa nokta gösterimiyle erişebilirsiniz:

```json
{
  "sku": "SKU-001",
  "pricing": { "current": 299.90, "list": 399.90 },
  "media": { "primary": "https://..." }
}
```

Eşleştirmede `pricing.current` yazarsınız. Dizi elemanı için sıra numarası kullanılır (`productimage_set.0.image` ya da `productimage_set[0].image`); numara yazmazsanız ilk eleman alınır (`productimage_set.image`). En fazla 12 düzey derinliğe inilir. Bir yol nesneye ya da diziye inerse okunabilir ilk değer alınır (nesnede `label`, `value`, `name`, `image`, `url` anahtarları sırayla denenir). Ayrıntı: [Alan Eşleştirme](/docs/product-feeds/field-mapping).

## Gereksinimler

| Konu | Kural |
|---|---|
| Kodlama | UTF-8 |
| Erişim (URL yöntemi) | Herkese açık `http` ya da `https` adresi; kimlik bilgisi adresin içinde olamaz |
| Boyut | URL: en fazla 200 MB ve 120 saniye. Dosya yükleme ve push: 50 MB. Feed başına en fazla 100.000 satır |
| Sıkıştırma | `.gz` dosyalar kendiliğinden açılır |
| Güncellik | Fiyat ve stok değişiklikleri beslemede yansımalı; Selwise yalnızca senkronizasyon anında okur |
| Tekrarlayan kod | Aynı ürün kodunu taşıyan ikinci satır atlanır (**Rows skipped** artar); ilk satır kazanır |

## Google Merchant beslemesi

Google Merchant Center için ürettiğiniz beslemeyi olduğu gibi kullanabilirsiniz. Bu biçim satır başına bir satılabilir ürün taşır ve Selwise her satırı ayrı ürün olarak alır; `item_group_id` alanı ise hangi ürünlerin kardeş olduğunu söyler — bkz. [Varyant Gruplama](/docs/product-feeds/variant-grouping). **Field Mapping** sekmesindeki **Google Merchant Center** hazır eşlemesini uygulayın: Google'ın `price` alanı liste fiyatı, `sale_price` ödenecek fiyattır; hazır eşleme bunu doğru kurar.
