72 lines
1.6 KiB
Python
72 lines
1.6 KiB
Python
import nntplib
|
|
import os
|
|
from dotenv import load_dotenv
|
|
from db import get_conn
|
|
|
|
# ================== CONFIG ==================
|
|
GROUP = "alt.binaries.e-book.magazines"
|
|
SUBJECT_KEY = "PC Pro 2011-07.pdf"
|
|
# ============================================
|
|
|
|
load_dotenv()
|
|
|
|
EWEKA_USER = os.getenv("EWEKA_USER")
|
|
EWEKA_PASS = os.getenv("EWEKA_PASS")
|
|
|
|
print("🔌 Connecting to PostgreSQL...")
|
|
conn = get_conn()
|
|
cur = conn.cursor()
|
|
|
|
cur.execute("""
|
|
SELECT article_number
|
|
FROM articles
|
|
WHERE newsgroup = %s
|
|
AND metadata->>'subject' LIKE %s
|
|
ORDER BY article_number
|
|
""", (GROUP, f"%{SUBJECT_KEY}%"))
|
|
|
|
article_numbers = [row[0] for row in cur.fetchall()]
|
|
total = len(article_numbers)
|
|
|
|
print(f"📦 Found {total} parts in DB")
|
|
|
|
if total == 0:
|
|
print("❌ No articles found, aborting.")
|
|
exit(1)
|
|
|
|
print("🔌 Connecting to Eweka NNTP...")
|
|
with nntplib.NNTP_SSL(
|
|
"news.eweka.nl",
|
|
563,
|
|
EWEKA_USER,
|
|
EWEKA_PASS,
|
|
readermode=True,
|
|
) as nntp:
|
|
|
|
nntp.group(GROUP)
|
|
|
|
existing = []
|
|
missing = []
|
|
|
|
for idx, art in enumerate(article_numbers, start=1):
|
|
try:
|
|
nntp.stat(art)
|
|
existing.append(art)
|
|
print(f"✅ [{idx}/{total}] EXISTS article {art}")
|
|
except Exception:
|
|
missing.append(art)
|
|
print(f"❌ [{idx}/{total}] MISSING article {art}")
|
|
|
|
print("\n================ RESULT ================")
|
|
print(f"Total parts : {total}")
|
|
print(f"Existing : {len(existing)}")
|
|
print(f"Missing : {len(missing)}")
|
|
|
|
if existing:
|
|
print("\nExisting article_numbers:")
|
|
print(existing)
|
|
|
|
if missing:
|
|
print("\nMissing article_numbers (first 20):")
|
|
print(missing[:20])
|