gendesign/tradein-mvp/scripts/probe-db-url-leak.py
lekss361 d2a0257639
All checks were successful
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 32s
feat(tradein-scripts): scrapers + probes + Phase C improvements (#551)
2026-05-24 19:58:38 +00:00

51 lines
1.4 KiB
Python

"""URL-based region leak check для Avito listings."""
from __future__ import annotations
import os
import re
from collections import Counter
import psycopg
dsn = os.environ["DATABASE_URL"].replace("postgresql+psycopg://", "postgresql://")
conn = psycopg.connect(dsn)
cur = conn.cursor()
cur.execute("SELECT source_url FROM listings WHERE source='avito'")
slug_re = re.compile(r"avito\.ru/([a-z_]+)/")
cities = Counter()
no_match = 0
for (url,) in cur.fetchall():
if not url:
no_match += 1
continue
m = slug_re.search(url)
if m:
cities[m.group(1)] += 1
else:
no_match += 1
print("city slug distribution in source_url:")
for city, n in cities.most_common():
flag = " ← EKB" if city == "ekaterinburg" else (" ← OTHER CITY" if city not in ("ekaterinburg",) else "")
print(f" {city:<30} {n}{flag}")
print(f" (no slug parse): {no_match}")
# Дальше — sample non-EKB
cur.execute(
"""
SELECT source_id, source_url, address, price_rub
FROM listings
WHERE source='avito'
AND source_url IS NOT NULL
AND source_url !~ 'avito\\.ru/ekaterinburg/'
ORDER BY scraped_at DESC NULLS LAST
LIMIT 10
"""
)
print("\nsample non-EKB listings (by URL):")
for sid, url, addr, price in cur.fetchall():
print(f" {sid} {price:,}")
print(f" URL: {url}")
print(f" addr: {(addr or '')[:80]!r}")