diff --git a/README.md b/README.md index 50ca743..b3995ef 100644 --- a/README.md +++ b/README.md @@ -1,131 +1,254 @@

- wscraper logo + wscraper logo

+

Gitea - Python - E2E Tests - Platform - Layout + Python + Trackers + Runtime

-HappyFappy için komutlar paketlenmiş `wscraper` CLI üzerinden çalışır. Proje çoklu site desteği için `src/` paket yapısına göre düzenlenmiştir. -## 1) Repo Clone +# wscraper -```bash -git clone -cd -``` +`wscraper`, tracker bookmark / wishlist akışlarını ortak bir Python adapter katmanında toplayan çoklu tracker scraper paketidir. Bugünkü kullanım şekli iki parçalıdır: -## 2) Kurulum +- `bin/wscraper/`: Python paketinin kendisi, tracker adapter'ları ve CLI +- `bin/wscraper-service/server.py`: `q-buffer` backend'in HTTP ile konuştuğu host-side servis + +`q-buffer` watcher akışı artık `wscraper` CLI'yi doğrudan Docker içinde spawn etmek yerine, host makinede çalışan `wscraper-service` üzerinden kullanır. Bunun ana nedeni `scrapling + Playwright` zincirinin tracker tarafında daha stabil çalışmasının host ortamında olmasıdır. + +## Desteklenen Tracker'lar + +- `happyfappy` (`hf`) +- `privatehd` (`phd`) + +Desteklenen ortak aksiyonlar: + +- `get-bookmarks` +- `download-torrent-files` +- `remove-bookmark` + +## Mimari + +`wscraper` paket yapısı artık tracker-registry tabanlıdır: + +- `src/wscraper/registry.py` + - desteklenen tracker adapter'larını kaydeder +- `src/wscraper/types.py` + - ortak `BookmarkItem`, `DownloadResult`, `TrackerAdapter` tiplerini tanımlar +- `src/wscraper/sites/happyfappy.py` + - HappyFappy adapter'ı +- `src/wscraper/sites/privatehd.py` + - PrivateHD adapter'ı +- `src/wscraper/cli.py` + - tüm tracker'lar için ortak CLI entrypoint + +Bu sayede yeni tracker eklemek için mevcut CLI'yi kopyalamak yerine sadece yeni bir adapter yazmak yeterlidir. + +## Kurulum ### macOS / Linux ```bash -python3 -m venv .venv +cd bin/wscraper +python3.12 -m venv .venv source .venv/bin/activate python -m pip install -U pip python -m pip install -e . scrapling install ``` -### Windows (PowerShell) +Alternatif: + +- `python3.12` yoksa `python3.11` veya `python3.10` kullan +- `scrapling install`, Playwright/browser bağımlılıklarını kurar + +### Windows PowerShell ```powershell -py -3.11 -m venv .venv +cd bin/wscraper +py -3.12 -m venv .venv .venv\Scripts\Activate.ps1 python -m pip install -U pip python -m pip install -e . scrapling install ``` -### Windows (CMD) +## CLI Kullanımı -```bat -py -3.11 -m venv .venv -.venv\Scripts\activate.bat -python -m pip install -U pip -python -m pip install -e . -scrapling install +Genel form: + +```bash +wscraper --action [opsiyonlar] ``` -Not: Ortamı aktive ettikten sonra komutlar `wscraper ...` olarak kullanılabilir. İstersen `python -m wscraper ...` da kullanabilirsin. - -## 3) HappyFappy Komutları - -### Bookmarks Çekme +### Bookmark / Wishlist Çekme ```bash wscraper happyfappy --action get-bookmarks -c cookies.txt -o bookmarks.json +wscraper privatehd --action get-bookmarks -c cookies.txt -o bookmarks.json +``` + +İsteğe bağlı `wishlist_url` override: + +```bash +wscraper privatehd --action get-bookmarks -c cookies.txt --wishlist-url "https://privatehd.to/bookmarks" -o bookmarks.json ``` ### Torrent Dosyası İndirme ```bash -wscraper happyfappy --action download-torrent-files -u "https://www.happyfappy.net/torrents.php?id=110178" -c cookies.txt -o torrent +wscraper happyfappy --action download-torrent-files \ + -c cookies.txt \ + -u "https://www.happyfappy.net/torrents.php?id=110178" \ + --title "Sample" \ + --image-url "https://example.com/poster.jpg" \ + -o torrent ``` -### Torrent İndir + Bookmark Kaldır - -`--rm-bookmark` (kisa alias: `-rmb`) flag'i verildiginde, torrent dosyasi basariyla indirildikten sonra ayni torrent detay sayfasindaki bookmark remove mekanizmasi dinamik olarak bulunur ve tetiklenir. - ```bash -wscraper happyfappy --action download-torrent-files --rm-bookmark -u "https://www.happyfappy.net/torrents.php?id=110178" -c cookies.txt -o torrent +wscraper privatehd --action download-torrent-files \ + -c cookies.txt \ + -u "https://privatehd.to/torrent/12345" \ + --download-url "https://privatehd.to/download.php?id=12345" \ + --title "Sample" \ + -o torrent ``` -Davranis kurallari: - -- Torrent indirme basarisizsa bookmark silme adimina gecilmez. -- `--rm-bookmark` verilmis ve bookmark silme basarisizsa komut `exit code 1` ile biter. -- `--rm-bookmark` verilmemisse yalnizca indirme akisi calisir. - -Bookmark remove tespiti tek bir sabit HTML selector'ine bagli degildir: - -- oncelik `onclick`/event sinyalleri (or. `Unbookmark(...)`) -- `id/class/href` icinde bookmark semantigi -- remove/delete/unbookmark benzeri metin ve attribute sinyalleri -- torrent id ile iliskili kontrol eslestirmesi - -## 4) Kısa Alias Kullanımı +### Bookmark Silme + +```bash +wscraper happyfappy --action remove-bookmark \ + -c cookies.txt \ + -u "https://www.happyfappy.net/torrents.php?id=110178" \ + --title "Sample" +``` + +```bash +wscraper privatehd --action remove-bookmark \ + -c cookies.txt \ + -u "https://privatehd.to/torrent/12345" \ + --remove-token "bookmark-delete-token" \ + --title "Sample" +``` + +### Kısa Alias'lar ```bash -# site alias: hf -# action alias: gb (get-bookmarks), dtf (download-torrent-files) wscraper hf -a gb -c cookies.txt -o bookmarks.json -wscraper hf -a dtf -u "https://www.happyfappy.net/torrents.php?id=110178" -c cookies.txt -o torrent -wscraper hf -a dtf --rm-bookmark -u "https://www.happyfappy.net/torrents.php?id=110178" -c cookies.txt -o torrent -wscraper hf -a dtf -rmb -u "https://www.happyfappy.net/torrents.php?id=110178" -c cookies.txt -o torrent +wscraper phd -a gb -c cookies.txt -o bookmarks.json +wscraper hf -a dtf -c cookies.txt -u "https://www.happyfappy.net/torrents.php?id=110178" -o torrent +wscraper phd -a rb -c cookies.txt -u "https://privatehd.to/torrent/12345" --remove-token "token" ``` -## 5) Proje Dizini +## q-buffer ile Entegrasyon + +`q-buffer` içinde watcher tarafı artık şu şekilde çalışır: + +1. UI'dan watcher tanımlanır +2. `q-buffer` backend cookie'yi şifreli saklar +3. Docker içindeki `server`, host'taki `wscraper-service`e HTTP çağrısı yapar +4. `wscraper-service`, `wscraper` adapter'ı ile bookmarkları çeker +5. yeni bookmark için torrent dosyasını indirir +6. `q-buffer` backend `.torrent` içeriğini alır ve qBittorrent'e yollar +7. başarılı import sonrası bookmark tracker tarafında kaldırılır + +Bu yüzden `wscraper` tek başına bir CLI olmanın ötesinde artık `q-buffer watcher` entegrasyonunun backend scraping motorudur. + +## wscraper-service API + +`bin/wscraper-service/server.py` şu endpoint'leri sunar: + +- `GET /health` +- `GET /trackers` +- `POST /bookmarks` +- `POST /download` +- `POST /remove-bookmark` + +Örnek `POST /bookmarks` payload: + +```json +{ + "tracker": "happyfappy", + "cookie": "raw-cookie", + "wishlistUrl": "optional-override" +} +``` + +Örnek `POST /download` payload: + +```json +{ + "tracker": "privatehd", + "cookie": "raw-cookie", + "wishlistUrl": "optional-override", + "item": { + "pageURL": "https://privatehd.to/torrent/12345", + "title": "Example", + "downloadURL": "https://privatehd.to/download.php?id=12345", + "removeToken": "bookmark-token" + } +} +``` + +## q-buffer İlk Kurulumunda wscraper Nasıl Hazırlanır? + +Bu adım özellikle önemlidir. `q-buffer` reposunda scraping logic `bin/wscraper/` içindedir. Host servis ise `bin/wscraper-service/server.py` dosyasıdır. Yani: + +- `bin/wscraper/` yalnızca `server.py` değildir +- `server.py`, ayrı `wscraper-service` klasöründedir +- asıl tracker kodları `bin/wscraper/src/wscraper/...` altındadır + +İlk kurulum için önerilen yol: + +1. repo root'ta `.env.example` dosyasını `.env` olarak kopyala +2. `.env` içinde watcher servis ayarlarını gözden geçir: + - `WSCRAPER_SERVICE_BASE_URL` + - `WSCRAPER_SERVICE_TOKEN` + - `WSCRAPER_SERVICE_HOST` + - `WSCRAPER_SERVICE_PORT` + - `WSCRAPER_SERVICE_PYTHON_BIN` +3. repo root'ta şu komutu çalıştır: + +```bash +./scripts/bootstrap.sh --dev-mode +``` + +Bu script: + +- Docker `web` ve `server` servislerini `up --build` ile kaldırır +- host'ta `.runtime/wscraper-service/.venv` oluşturur +- `scrapling[fetchers]` kurar +- `scrapling install` çalıştırır +- `bin/wscraper-service/server.py` servis sürecini başlatır + +Kurulum daha önce tamamsa script aynı işlemleri baştan yapmaz; sadece eksikleri tamamlar. + +## Dizin Yapısı ```text -. -├── pyproject.toml -├── requirements.txt -├── src/ -│ └── wscraper/ -│ ├── __init__.py -│ ├── __main__.py -│ ├── cli.py -│ └── sites/ -│ ├── __init__.py -│ └── happyfappy.py -└── README.md +bin/ +├── wscraper/ +│ ├── README.md +│ ├── pyproject.toml +│ ├── setup.py +│ └── src/ +│ └── wscraper/ +│ ├── cli.py +│ ├── registry.py +│ ├── types.py +│ └── sites/ +│ ├── happyfappy.py +│ └── privatehd.py +└── wscraper-service/ + └── server.py ``` -## 6) E2E Test (Canli) +## Notlar -Bu testler gercek siteye istek atar ve link/selector kirilmalarini yakalamayi hedefler. - -```bash -python -m pip install -e ".[test]" -WSCRAPER_E2E=1 pytest -m e2e -s -vv --color=yes -``` - -Opsiyonel degiskenler: - -- `WSCRAPER_COOKIE_FILE` (varsayilan: `cookies.txt`) -- `WSCRAPER_TEST_TORRENT_URL` (varsayilan: `https://www.happyfappy.net/torrents.php?id=110178`) +- Cookie hem raw string hem Netscape cookie file formatında verilebilir +- Tracker metadata alanları (`backgroundImage`, `downloadURL`, `removeToken`, `size`, `seeders`, `leechers`) adapter tarafından normalize edilir +- `q-buffer` tarafında image proxy, watcher item cache ve qBittorrent enrichment katmanları bu scraper çıktısını kullanır