Metadata-Version: 2.4
Name: bilet-asistani
Version: 0.1.0
Summary: Biletix icin yarim-otomatik Playwright asistani (odeme oncesi durur).
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: playwright>=1.40.0
Requires-Dist: fastapi>=0.110.0
Requires-Dist: uvicorn[standard]>=0.27.0
Provides-Extra: package
Requires-Dist: pyinstaller>=6.0.0; extra == "package"

# Biletix yarı-otomatik bilet asistanı

Python 3.11+, [Playwright](https://playwright.dev/python/) ile gerçek Chromium penceresi açılır; akış ödeme / kart bilgisi ekranına gelindiğinde durur, kalanını kullanıcı tamamlar.

## Yerel panel (varsayılan)

Argümansız çalıştırınca `http://127.0.0.1:8765/` adresinde bir kontrol paneli açılır:

- Varsayılan URL: Şebnem Ferah etkinlik sayfası (`/etkinlik/5PSF1/TURKIYE/tr`).
- **localStorage:** hedef URL ve adım listesi tarayıcıda saklanır.
- **Kayıt modu:** Chromium’da Biletix’e gidip tıkladığınız her düğme/link için CSS seçici + HTML parçası sunucuya düşer; durdurunca listeye eklenir.
- **HTML analizi:** DevTools’tan kopyalanan HTML’i yapıştırıp düğmeleri adım olarak ekleyebilirsiniz.
- **Sunucuya / diske kaydet:** `var/user_plan.json` (panel ile aynı makinede).
- **Otomasyonu başlat:** Kayıtlı adımları sırayla oynatır; `--stop-at` panelden seçilir.

```bash
python -m bilet_asistani
python -m bilet_asistani --port 8766 --no-open-browser
```

## Sınırlar (MVP)

- Koltuk / salon planı **canvas veya özel widget** ise otomatik tıklama bu sürümde yok; Biletix DOM’una göre `biletix_flow.py` içine adım eklemeniz gerekir.
- Liste ve buton metinleri [`selectors/biletix.py`](src/bilet_asistani/selectors/biletix.py) içindeki sabitlere göre filtrelenir; sayfa değişince güncelleyin.

## Kurulum (geliştirme)

```bash
cd /Users/eminkartci/Desktop/codenv/bilet-uygulamasi
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .
playwright install chromium
```

İsteğe bağlı paketleme bağımlılığı: `pip install -e ".[package]"` (PyInstaller).

## Kullanım

### Doğrudan CLI (heuristic akış, URL zorunlu)

```bash
python -m bilet_asistani "https://www.biletix.com/..." --log-level INFO
```

veya kurulum yapmadan:

```bash
python main.py "https://www.biletix.com/..."
```

### Yararlı bayraklar

| Bayrak | Açıklama |
|--------|----------|
| `--stop-at payment` | Varsayılan: URL veya sayfada kart alanı algılanınca durur ve ekran görüntüsü alır. |
| `--stop-at basket` | Sepet URL’si (`sepet`, `cart`, …) görülünce durur. |
| `--stop-at manual` | Sadece `--max-steps` dolunca durur (deneme). |
| `--debug` | İlk yükleme ve (mümkünse) etkinlik seçiminden sonra `page.pause()` — Playwright Inspector ile seçici keşfi. |
| `--slow-mo 200` | Her işlemi yavaşlatır (ms). |
| `--artifacts-dir var/artifacts` | Durma / hata PNG’leri. |

Kayıtlı seçici ve metin ipuçları: [`src/bilet_asistani/selectors/biletix.py`](src/bilet_asistani/selectors/biletix.py). Sayfa yapısı değişince burayı güncelleyin; keşif için:

```bash
playwright codegen https://www.biletix.com/...
```

## Kullanıcılara gönderme (Windows .exe ve macOS)

### Özet

| Yöntem | Kim için | Artı | Eksi |
|--------|----------|------|------|
| **ZIP + Python** | Teknik kullanıcı / ekip | En sorunsuz, Playwright güncel kalır | Python kurulumu gerekir |
| **PyInstaller tek dosya** | Son kullanıcı | Çift tıkla çalışır | Çok büyük dosya; imzalama gerekir; Playwright tarayıcısı ayrı konu |

**Önemli:** `.exe` dosyasını **Windows’ta**, Mac uygulamasını **Apple Silicon veya Intel Mac’te** üretin; PyInstaller ile “bir OS’ta derleyip diğerine” doğrudan taşıyamazsınız.

---

### Seçenek A — Önerilen: klasör ZIP’i (Python ile)

1. Projeyi (veya sadece `src/`, `pyproject.toml`, `requirements.txt`, `main.py`) paylaşın.
2. Kullanıcıya kısa talimat verin:

   ```text
   Python 3.11+ kur
   python -m venv .venv
   .venv\Scripts\activate          (Mac/Linux: source .venv/bin/activate)
   pip install -e .
   playwright install chromium
   python -m bilet_asistani
   ```

3. **Paylaşım:** GitHub / Google Drive / WeTransfer ile ZIP; veya özel indirme linki.

Bu yöntemde **code signing** zorunlu değildir; kullanıcı `pip` ile güvenilir paketleri indirir.

---

### Seçenek B — PyInstaller ile tek çalıştırılabilir

**Nerede derlenecek?** Aynı işletim sisteminde derleyin (Windows → `.exe`, macOS → Mach-O binary).

```bash
pip install -e ".[package]"
pyinstaller bilet_asistani.spec
```

Çıktı: `dist/bilet-asistani` (macOS’ta uzantısız, Windows’ta `bilet-asistani.exe`).

**Kullanıcıya gönderirken:**

1. `dist/` içindeki çalıştırılabilir dosyayı **ZIP** içinde gönderin (bazı e-posta sağlayıcıları .exe engeller).
2. Yanına bir **KULLANIM.txt** ekleyin:
   - İlk çalıştırmada güvenlik uyarısı çıkabilir (aşağıdaki imzalama).
   - Otomasyon için hedef makinede **Chromium** gerekir: aynı bilgisayarda bir kez `playwright install chromium` çalıştırılabilir **yalnızca Python + Playwright kuruluysa**; saf exe ile bazen tarayıcı yolu sorun çıkarır — bu durumda Seçenek A’ya yönlendirin veya [Playwright “deploy”](https://playwright.dev/python/docs/browsers#hermetic-install) dokümantasyonuna göre ikilileri paketlemeyi deneyin (gelişmiş, büyük boyut).

**macOS:** İmzasız uygulamada “bilet-asistani açılamıyor” / Gatekeeper uyarısı normaldir. Dağıtım için **Apple Developer** hesabıyla **code signing + notarization** (Apple’a gönderme) yapılmalıdır; aksi halde kullanıcı Sağ tık → Aç veya Sistem Ayarları → Gizlilik ve Güvenlik’ten onay vermelidir.

**Windows:** İmzasız `.exe` için **SmartScreen** “bilinmeyen yayıncı” uyarısı çıkar. Ticari dağıtım için **Authenticode** ile imzalama önerilir.

---

### Ne göndermem yeterli?

- **Minimum (Python yolu):** repo ZIP + yukarıdaki 5 satırlık kurulum metni.
- **Exe / Mac binary yolu:** `dist/` içindeki tek dosya + kısa kullanım metni + mümkünse `playwright install` talimatı veya “Python kurulu makinede çalıştırın” notu.

`var/user_plan.json` ve `var/artifacts/` kullanıcı çalıştırınca **çalışma dizininde** oluşur; bunları siz göndermek zorunda değilsiniz.

## Yasal uyarı

Biletix kullanım koşulları otomasyonu kısıtlayabilir. Bu araç kişisel yardımcı deneme amaçlıdır; aşırı istek, bot veya haksız avantaj oluşturmayın.
