fix(latestpornvideo): miniatury z imgds zamiast martwego ticdn, bez tagu "mixed porn"
Proxy miniatur oddaje 404 dla banera usunietego obrazka pixhost i dla odpowiedzi tekstowych (link do strony podgladu), zamiast 200 z atrapa. Kategorie mixed-porn i porn-movie pomijane: serwis daje je kazdemu wpisowi. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d521e6379d
commit
6379e98dd9
2 changed files with 17 additions and 1 deletions
|
|
@ -451,6 +451,15 @@ async def proxy_image(
|
|||
media_type="image/jpeg",
|
||||
)
|
||||
ct = r.headers.get("content-type", "image/jpeg")
|
||||
# Atrapy zamiast obrazka (zgloszenia eb20f1c0/4d8d5daf, latestpornvideo): pixhost
|
||||
# przekierowuje usuniete obrazki na baner `/image/removed.png`, a link do strony
|
||||
# podgladu (`pixhost.to/show/...`) daje HTML. Oba szly do apki jako 200, wiec kafelek
|
||||
# pokazywal baner albo byl pusty. 404 = apka rysuje swoj zastepnik.
|
||||
final_url = str(getattr(r, "url", "") or "")
|
||||
# Tylko text/*: czesc CDN-ow (S3) podaje prawdziwe obrazki jako octet-stream.
|
||||
if final_url.endswith("/image/removed.png") or ct.lower().startswith("text/"):
|
||||
log.info("img proxy: atrapa zamiast obrazka (%s, %s) dla %s", ct, final_url[:80], target)
|
||||
return Response(content=b"", status_code=404, media_type="image/jpeg")
|
||||
return Response(
|
||||
content=r.content,
|
||||
media_type=ct,
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ _BASE = "https://latestpornvideo.com"
|
|||
_ARTICLE_RE = re.compile(r'<article[^>]*\bclass="([^"]+)"', re.IGNORECASE)
|
||||
_LINK_RE = re.compile(r'<a\s+href="([^"]+)"\s+title="([^"]+)"', re.IGNORECASE)
|
||||
_THUMB_RE = re.compile(r'data-main-thumb="([^"]+)"', re.IGNORECASE)
|
||||
_TICDN_RE = re.compile(r"^https?://(?:[a-z0-9-]+\.)*ticdn\.net/snaps/", re.IGNORECASE)
|
||||
_CLASS_TAG_RE = re.compile(r"\btag-([a-z0-9-]+)")
|
||||
_CLASS_CAT_RE = re.compile(r"\bcategory-([a-z0-9-]+)")
|
||||
# Nazwa thumba: `<Studio>-YYYY-MM-DD-<rest>-cover.jpg`.
|
||||
|
|
@ -52,7 +53,9 @@ _THUMB_NAME_RE = re.compile(r"/([A-Za-z0-9][A-Za-z0-9-]*?)-(\d{4})-(\d{2})-(\d{2
|
|||
# Tytuł: `<Studio> YY MM DD <rest>` (np. "MySexMobile 20 10 23 Abella Danger").
|
||||
_TITLE_DATE_RE = re.compile(r"^(.*?)\s*\b(\d{2})\s+(\d{2})\s+(\d{2})\b")
|
||||
# Karty homepage zawsze siedzą w kategorii "latest-porn-videos", to nie jest tag.
|
||||
_CAT_SKIP = {"latest-porn-videos", "uncategorized", ""}
|
||||
# "mixed-porn" i "porn-movie": od 09.2026 serwis daje KAZDEMU wpisowi tylko te kategorie,
|
||||
# wiec nic nie mowia (zgloszenie 3204ee85, 2026-10-12: "tylko mixed porn").
|
||||
_CAT_SKIP = {"latest-porn-videos", "uncategorized", "", "mixed-porn", "porn-movie"}
|
||||
|
||||
|
||||
def _name_from_slug(slug: str) -> str:
|
||||
|
|
@ -103,6 +106,10 @@ class LatestPornVideoScraper(BaseBrowseScraper):
|
|||
|
||||
thumb_m = _THUMB_RE.search(window)
|
||||
thumb = thumb_m.group(1) if thumb_m else None
|
||||
if thumb:
|
||||
# ticdn.net (stary serwer miniatur DoodStream) nie istnieje, te same pliki
|
||||
# leza na imgds.net (2026-10-15, 8 tys. martwych kafelkow).
|
||||
thumb = _TICDN_RE.sub("https://imgds.net/snaps/", thumb)
|
||||
|
||||
# Studio + release_date z nazwy thumba (`<Studio>-YYYY-MM-DD-`).
|
||||
studio: RawStudio | None = None
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue