Mobile / OTA: - Enable Expo Updates (app.json + AndroidManifest) → api.goon-foss.org - Bump 0.1.6 → 0.1.9 (build.gradle, app.json, appVersion.ts, main.py /version) - backend.ts: default public backend auto-connect (no manual login) WebView fallback fix (PlayerScreen INJECTED_JS): - Auto-dismiss cookie/consent gates (hqporner et al. blocked kt_player init) - Context-scoped: only clicks consent buttons inside cookie/gdpr containers - Retry window for <source>.src polling raised 5→15 ticks (post-dismiss init) Resolver: - Series-position + modifier mismatch detector (Episode 2≠4, BTS/unedited) → composite_score hard-reject / cap; wired into scene_score + bulk_dedup - aggregator-mode candidate query: LIMIT 500 + title-match ordering Connectors: - porndoe.com browse scraper (JSON-LD VideoObject) — theporndude audit pilot landing: APK links → goon-v0.1.9.apk Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""Smoke test PornDoeScraper — fetch sample + sprawdz parsing."""
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
from app.connectors.direct_scrapers.porndoe import PornDoeScraper
|
|
|
|
|
|
def main():
|
|
scraper = PornDoeScraper()
|
|
print(f"sitetag: {scraper.sitetag}")
|
|
print(f"listing url p1: {scraper._listing_url(1)}")
|
|
print(f"listing url p2: {scraper._listing_url(2)}")
|
|
print()
|
|
|
|
count = 0
|
|
ok_studio = ok_perf = ok_date = ok_dur = ok_thumb = ok_phash = 0
|
|
for scene in scraper.latest_scenes(max_pages=1):
|
|
count += 1
|
|
if scene.studio:
|
|
ok_studio += 1
|
|
if scene.performers:
|
|
ok_perf += 1
|
|
if scene.release_date:
|
|
ok_date += 1
|
|
if scene.duration_sec:
|
|
ok_dur += 1
|
|
if scene.playback_sources and scene.playback_sources[0].thumbnail_url:
|
|
ok_thumb += 1
|
|
if scene.fingerprints:
|
|
ok_phash += 1
|
|
if count <= 5:
|
|
print(f"--- scene {count} ---")
|
|
print(f" ext_id: {scene.external_id}")
|
|
print(f" title: {scene.title[:60]}")
|
|
print(f" studio: {scene.studio.name if scene.studio else None}")
|
|
print(f" perf: {[p.name for p in scene.performers]}")
|
|
print(f" date: {scene.release_date}")
|
|
print(f" duration: {scene.duration_sec}s")
|
|
print(f" tags: {[t.name for t in scene.tags][:5]}")
|
|
print(f" thumb: {(scene.playback_sources[0].thumbnail_url or '')[:70]}")
|
|
print(f" phash: {[f.value for f in scene.fingerprints]}")
|
|
print()
|
|
if count >= 15:
|
|
break
|
|
|
|
print("=" * 50)
|
|
print(f"total scraped: {count}")
|
|
if count:
|
|
print(f" studio: {ok_studio}/{count} ({100*ok_studio//count}%)")
|
|
print(f" performer: {ok_perf}/{count} ({100*ok_perf//count}%)")
|
|
print(f" date: {ok_date}/{count} ({100*ok_date//count}%)")
|
|
print(f" duration: {ok_dur}/{count} ({100*ok_dur//count}%)")
|
|
print(f" thumbnail: {ok_thumb}/{count} ({100*ok_thumb//count}%)")
|
|
print(f" phash: {ok_phash}/{count} ({100*ok_phash//count}%)")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|