10 KiB
wscraper
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:
bin/wscraper/: Python paketinin kendisi, tracker adapter'ları ve CLIbin/wscraper-service/server.py:q-bufferbackend'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-bookmarksdownload-torrent-filesremove-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,TrackerAdaptertiplerini tanımlar
- ortak
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
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
Alternatif:
python3.12yoksapython3.11veyapython3.10kullanscrapling install, Playwright/browser bağımlılıklarını kurar
Windows PowerShell
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
CLI Kullanımı
Genel form:
wscraper <tracker> --action <action> [opsiyonlar]
Bookmark / Wishlist Çekme
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:
wscraper privatehd --action get-bookmarks -c cookies.txt --wishlist-url "https://privatehd.to/bookmarks" -o bookmarks.json
Torrent Dosyası İndirme
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
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
Bookmark Silme
wscraper happyfappy --action remove-bookmark \
-c cookies.txt \
-u "https://www.happyfappy.net/torrents.php?id=110178" \
--title "Sample"
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
wscraper hf -a gb -c cookies.txt -o bookmarks.json
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"
q-buffer ile Entegrasyon
q-buffer içinde watcher tarafı artık şu şekilde çalışır:
- UI'dan watcher tanımlanır
q-bufferbackend cookie'yi şifreli saklar- Docker içindeki
server, host'takiwscraper-servicee HTTP çağrısı yapar wscraper-service,wscraperadapter'ı ile bookmarkları çeker- yeni bookmark için torrent dosyasını indirir
q-bufferbackend.torrentiçeriğini alır ve qBittorrent'e yollar- 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 /healthGET /trackersPOST /bookmarksPOST /downloadPOST /remove-bookmark
Örnek POST /bookmarks payload:
{
"tracker": "happyfappy",
"cookie": "raw-cookie",
"wishlistUrl": "optional-override"
}
Örnek POST /download payload:
{
"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ızcaserver.pydeğildirserver.py, ayrıwscraper-serviceklasöründedir- asıl tracker kodları
bin/wscraper/src/wscraper/...altındadır
İlk kurulum için önerilen yol:
- repo root'ta
.env.exampledosyasını.envolarak kopyala .enviçinde watcher servis ayarlarını gözden geçir:WSCRAPER_SERVICE_BASE_URLWSCRAPER_SERVICE_TOKENWSCRAPER_SERVICE_HOSTWSCRAPER_SERVICE_PORTWSCRAPER_SERVICE_PYTHON_BIN
- repo root'ta şu komutu çalıştır:
./scripts/bootstrap.sh --dev-mode
Bu script:
- Docker
webveserverservisleriniup --buildile kaldırır - host'ta
.runtime/wscraper-service/.venvoluşturur scrapling[fetchers]kurarscrapling installçalıştırırbin/wscraper-service/server.pyservis sürecini başlatır
Kurulum daha önce tamamsa script aynı işlemleri baştan yapmaz; sadece eksikleri tamamlar.
Testler
wscraper içinde canlı sistemlere karşı çalışan pytest tabanlı e2e testleri vardır. Bunlar varsayılan olarak kapalıdır; yalnızca açıkça etkinleştirildiğinde çalışırlar.
Test dosyaları:
tests/e2e/test_happyfappy_live.pytests/e2e/test_privatehd_live.pytests/e2e/_helpers.py
Testleri Etkinleştirme
Tüm live testler için:
export WSCRAPER_E2E=1
Bu değişken yoksa veya 1 değilse, e2e testleri skip olur.
HappyFappy Live Testleri
Mevcut test kapsamı:
get-bookmarksdownload-torrent-files
Kullanılan env değişkenleri:
WSCRAPER_COOKIE_FILEWSCRAPER_TEST_TORRENT_URL
Örnek:
export WSCRAPER_E2E=1
export WSCRAPER_COOKIE_FILE=/absolute/path/to/happyfappy-cookies.txt
export WSCRAPER_TEST_TORRENT_URL="https://www.happyfappy.net/torrents.php?id=110178"
pytest tests/e2e/test_happyfappy_live.py -m e2e -s
PrivateHD Live Testleri
PrivateHD için eklenen test kapsamı:
get-bookmarksdownload-torrent-filesremove-bookmark
Kullanılan env değişkenleri:
WSCRAPER_PRIVATEHD_COOKIE_FILEWSCRAPER_PRIVATEHD_WISHLIST_URLWSCRAPER_PRIVATEHD_TEST_TORRENT_URLWSCRAPER_PRIVATEHD_TEST_DOWNLOAD_URLWSCRAPER_PRIVATEHD_TEST_REMOVE_URLWSCRAPER_PRIVATEHD_TEST_REMOVE_TOKEN
Fallback kuralı:
WSCRAPER_PRIVATEHD_COOKIE_FILEyoksaWSCRAPER_COOKIE_FILEkullanılır
Örnek:
export WSCRAPER_E2E=1
export WSCRAPER_PRIVATEHD_COOKIE_FILE=/absolute/path/to/privatehd-cookies.txt
export WSCRAPER_PRIVATEHD_WISHLIST_URL="https://privatehd.to/profile/blackdockers/wishlist"
export WSCRAPER_PRIVATEHD_TEST_TORRENT_URL="https://privatehd.to/torrent/12345-example"
export WSCRAPER_PRIVATEHD_TEST_DOWNLOAD_URL="https://privatehd.to/download/torrent/12345.example.torrent"
pytest tests/e2e/test_privatehd_live.py -m e2e -s
remove-bookmark Testi Hakkında
PrivateHD remove-bookmark testi gerçek wishlist kaydını sildiği için özellikle dikkatli kullanılmalıdır.
Bu test:
- yalnızca
WSCRAPER_PRIVATEHD_TEST_REMOVE_URLveWSCRAPER_PRIVATEHD_TEST_REMOVE_TOKENverilirse çalışır - aksi halde güvenli şekilde
skipolur
Örnek:
export WSCRAPER_E2E=1
export WSCRAPER_PRIVATEHD_COOKIE_FILE=/absolute/path/to/privatehd-cookies.txt
export WSCRAPER_PRIVATEHD_WISHLIST_URL="https://privatehd.to/profile/blackdockers/wishlist"
export WSCRAPER_PRIVATEHD_TEST_REMOVE_URL="https://privatehd.to/torrent/12345-example"
export WSCRAPER_PRIVATEHD_TEST_REMOVE_TOKEN="467471"
pytest tests/e2e/test_privatehd_live.py -m e2e -s -k remove
Notlar
- Bu testler gerçek tracker hesaplarına ve geçerli cookie'lere ihtiyaç duyar
remove-bookmarktesti mutasyon yapar; test datası bilinçli seçilmelidirtests/e2e/_helpers.py, tüm tracker live testlerinde ortak CLI çalıştırma ve loglama yardımcılarını içerir
Dizin Yapısı
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
Notlar
- 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-buffertarafında image proxy, watcher item cache ve qBittorrent enrichment katmanları bu scraper çıktısını kullanır
