Merhaba, Amazon’dan tüm stok bilgisini çekerken ülke bazında dosya desenlerinin farklı olduğunu fark ettim. Sebebini tam olarak anlayamasam da “Amazon’dur, vardır bir bildiği” diyerek yoluma devam ettim. En azından header değerlerinden hangi kolonda ne olduğunu anlayabiliyoruz. Bu nedenle kodu, dinamik olarak kolonları bulacak şekilde değiştirdim. Belki bir gün birine lazım olur diye buraya bırakıyorum.
Kod:
public async Task> GetirTumStok(string ulkeKodu)
{
List lst = [];
try
{
baglanAmazon(ulkeKodu);
string dosyaYolu = await _connAmazon.Reports.CreateReportAndDownloadFileAsync(ReportTypes.GET_MERCHANT_LISTINGS_ALL_DATA);
if (!string.IsNullOrEmpty(dosyaYolu))
{
using (StreamReader sr = new(dosyaYolu))
{
string headerLine = await sr.ReadLineAsync();
string[] headers = headerLine.Split('\t');
int asinIndex = Array.FindIndex(headers, h => h.Trim().Equals("asin1", StringComparison.OrdinalIgnoreCase)
|| h.Trim().Equals("product-id", StringComparison.OrdinalIgnoreCase));
int skuIndex = Array.FindIndex(headers, h => h.Trim().Equals("seller-sku", StringComparison.OrdinalIgnoreCase));
int qtyIndex = Array.FindIndex(headers, h => h.Trim().Equals("quantity", StringComparison.OrdinalIgnoreCase));
if (asinIndex == -1 || skuIndex == -1 || qtyIndex == -1)
throw new ArgumentException("Gerekli kolonlardan biri bulunamadı (asin1 / product-id / seller-sku / quantity).");
while (sr.Peek() != -1)
{
string satir = await sr.ReadLineAsync();
if (string.IsNullOrWhiteSpace(satir))
throw new ArgumentException("satir boş geldi!");
string[] dizi = satir.Split('\t');
if (dizi.Length < Math.Max(asinIndex, Math.Max(skuIndex, qtyIndex)))
throw new ArgumentException("dizi.Length az geldi!");
string asin = dizi[asinIndex].Trim();
string sku = dizi[skuIndex].Trim();
string qtyStr = dizi[qtyIndex].Trim();
if (string.IsNullOrEmpty(sku))
throw new ArgumentException("sku boş geldi!");
if (string.IsNullOrEmpty(asin))
throw new ArgumentException($"UYARI: ASIN bilgisi boş olan SKU: {sku} atlandı.");
if (!int.TryParse(qtyStr, out int qty))
throw new ArgumentException($"qtyStr hatalı: {qtyStr}.");
lst.Add(new Sku()
{
ItemId = asin,
SkuCode = sku,
Quantity = qty
});
}
}
File.Delete(dosyaYolu);
}
}
catch (Exception ex)
{
Console.WriteLine($"Hata Mesajı: {ex.Message}");
Console.WriteLine($"Inner Exception: {ex.InnerException?.Message}");
Console.WriteLine($"Stack Trace: {ex.StackTrace}");
if (ex.Data.Count > 0)
{
foreach (var key in ex.Data.Keys)
{
Console.WriteLine($"{key}: {ex.Data[key]}");
}
}
throw;
}
return lst;
}
Selamlar!
