# Amazon Fiyat Alma Extension

Bu Chrome extension, Amazon'dan CORS hatası almadan fiyat bilgilerini almak için geliştirilmiştir. Extension, Amazon sayfalarını yeni sekmede açarak fiyat bilgisini çıkarır ve otomatik olarak sekmeyi kapatır.

## Özellikler

- ✅ **CORS Hatası Yok**: Amazon sayfalarını yeni sekmede açarak fiyat alır
- ✅ **Otomatik Sekme Yönetimi**: Fiyat alındıktan sonra Amazon sekmesi otomatik kapanır
- ✅ **Cache Sistemi**: Aynı ASIN için tekrar fiyat alınmaz
- ✅ **Timeout Koruması**: 30 saniye içinde fiyat alınamazsa işlem iptal edilir
- ✅ **Hata Yönetimi**: Hata durumlarında güvenli şekilde sekmeler kapatılır

## Nasıl Çalışır?

1. **ASIN ile Fiyat Alma**: `getAmazonPrice(asin)` fonksiyonu çağrılır
2. **Yeni Sekme Açma**: Mevcut `SekmeAc()` metodu ile Amazon ürün sayfası yeni sekmede açılır
3. **Fiyat Çıkarma**: Amazon sekmesinde çalışan content script ile fiyat bilgisi çıkarılır
4. **Cache'e Kaydetme**: Fiyat bilgisi global cache'e kaydedilir
5. **Sekme Kapatma**: Amazon sekmesi otomatik olarak kapanır
6. **Sonuç Döndürme**: Fiyat bilgisi Promise olarak döndürülür
7. **Sıralı İşlem**: Her ASIN için fiyat alınana kadar beklenir, sonraki ASIN'e geçilir

**Önemli**: Bu yaklaşım mevcut `background.js` dosyasını değiştirmez, sadece `content.js` içinde çalışır.

## Kurulum

1. Chrome'da `chrome://extensions/` adresine gidin
2. "Developer mode" seçeneğini aktif edin
3. "Load unpacked" butonuna tıklayın
4. Bu proje klasörünü seçin

## Kullanım

### Temel Kullanım

```javascript
// ASIN ile fiyat alma (background.js değiştirilmeden)
const amazonPrice = await getAmazonPrice('B0771V1JZX');
if (amazonPrice) {
    console.log(`Amazon fiyatı: $${amazonPrice}`);
} else {
    console.log('Fiyat bulunamadı');
}

// Cache'den fiyat kontrolü
if (window.amazonPriceCache && window.amazonPriceCache['B0771V1JZX']) {
    console.log(`Cache'den fiyat: $${window.amazonPriceCache['B0771V1JZX']}`);
}
```

### Sepete Ekleme İşlemi

```javascript
async function sepeteEkle(asin) {
    try {
        // Amazon fiyatını al (fiyat alınana kadar bekler)
        const amazonPrice = await getAmazonPrice(asin);
        
        if (!amazonPrice) {
            console.log('Amazon fiyatı alınamadı');
            return;
        }
        
        // eBay fiyatını al
        const ebayPrice = getEbayPrice();
        
        if (!ebayPrice) {
            console.log('eBay fiyatı alınamadı');
            return;
        }
        
        // Fiyat karşılaştırması yap
        const shouldAddToCart = await checkPriceComparison(asin, amazonPrice, ebayPrice);
        
        if (shouldAddToCart) {
            // Sepete ekle
            let btn = document.querySelector('#atcBtn_btn_1');
            if (btn) {
                btn.click();
                console.log('Ürün sepete eklendi');
            }
        }
        
        // 5 saniye sonra sekmeyi kapat
        SekmeKapat(5);
        
    } catch (error) {
        console.error('Hata:', error);
        SekmeKapat(5);
    }
}
```

### Sıralı ASIN İşleme

```javascript
async function BirinciLinkKontrol() {
    chrome.storage.sync.get(['LastIndex'], async function (item) {
        let existingAsins = JSON.parse(localStorage.getItem('AsinList') || '[]')
        
        for (let i = parseInt(item.LastIndex); i < existingAsins.length; i++) {
            let asin = existingAsins[i].asin || existingAsins[i]
            console.log(`İşleniyor: ${asin} (${i}/${existingAsins.length})`)
            
            // Her ASIN için fiyat alınana kadar bekle
            try {
                await araEbay(asin) // Bu fonksiyon fiyat alınana kadar bekler
                console.log(`${asin} için işlem tamamlandı`)
                
                // Sonraki ASIN'e geçmeden önce 5 saniye bekle
                await new Promise((r) => setTimeout(r, 5000))
                
                // LastIndex'i güncelle
                chrome.storage.sync.set({ LastIndex: parseInt(i) }, function () {})
                
            } catch (error) {
                console.error(`${asin} için hata:`, error)
                // Hata durumunda da devam et
                chrome.storage.sync.set({ LastIndex: parseInt(i) }, function () {})
            }
        }
    })
}
```

## Dosya Yapısı

```
EbayManuelExt/
├── background.js          # Background script - sekme yönetimi
├── content.js            # Content script - fiyat çıkarma
├── manifest.json         # Extension manifest
├── test.html            # Test sayfası
├── README.md            # Bu dosya
└── ...                  # Diğer dosyalar
```

## API Referansı

### `getAmazonPrice(asin)`

Amazon'dan ASIN ile fiyat alır.

**Parametreler:**
- `asin` (string): Amazon ürün ASIN'i

**Dönüş Değeri:**
- `Promise<number|null>`: Fiyat bilgisi veya null

**Örnek:**
```javascript
const price = await getAmazonPrice('B0771V1JZX');
```

### `extractAmazonPrice()`

Amazon sayfasından fiyat bilgisini çıkarır.

**Dönüş Değeri:**
- `number|null`: Fiyat bilgisi veya null

### `SekmeKapat(sure)`

Belirtilen süre sonra sekmeyi kapatır.

**Parametreler:**
- `sure` (number): Kapanma süresi (saniye)

## Test

Extension'ı test etmek için:

1. `test.html` dosyasını tarayıcıda açın
2. Test ASIN'lerinden birini girin
3. "Fiyat Al" butonuna tıklayın
4. Amazon sayfası yeni sekmede açılacak
5. Fiyat alındıktan sonra sekme otomatik kapanacak

## Güvenlik

- Extension sadece gerekli izinlere sahiptir
- Amazon sayfaları sadece fiyat alma amacıyla açılır
- Otomatik olarak kapatılır
- CORS hatası önlenir

## Hata Durumları

- **Timeout**: 30 saniye içinde fiyat alınamazsa işlem iptal edilir
- **Sekme Bulunamadı**: Hata durumunda sekme güvenli şekilde kapatılır
- **Fiyat Bulunamadı**: null değeri döndürülür

## Geliştirme

Extension'ı geliştirmek için:

1. `content.js` dosyasında fiyat çıkarma mantığını güncelleyin
2. `background.js` dosyasında sekme yönetimini düzenleyin
3. `manifest.json` dosyasında gerekli izinleri ekleyin
4. Test için `test.html` dosyasını kullanın

## Lisans

Bu proje özel kullanım için geliştirilmiştir.

## Destek

Herhangi bir sorun yaşarsanız:

1. Console loglarını kontrol edin
2. Extension'ın yüklü olduğundan emin olun
3. Gerekli izinlerin verildiğini kontrol edin
4. Test sayfasını kullanarak işlevselliği test edin
