git
This commit is contained in:
133
93 Final SingleThreaded Cleanup.py
Normal file
133
93 Final SingleThreaded Cleanup.py
Normal file
@@ -0,0 +1,133 @@
|
||||
import pymysql
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
|
||||
# ============================================================
|
||||
# KONFIGURACE
|
||||
# ============================================================
|
||||
DB_CONFIG = {
|
||||
"host": "192.168.1.50",
|
||||
"port": 3306,
|
||||
"user": "root",
|
||||
"password": "Vlado9674+",
|
||||
"database": "torrents",
|
||||
"charset": "utf8mb4",
|
||||
"autocommit": True,
|
||||
}
|
||||
|
||||
COOKIE_FILE = Path("sktorrent_cookies.json")
|
||||
BACKUP_DIR = "saved_torrents"
|
||||
|
||||
|
||||
# ============================================================
|
||||
# POMOCNÉ FUNKCE
|
||||
# ============================================================
|
||||
def sanitize_filename(name):
|
||||
clean = re.sub(r'[^\w\s\.-]', '', name)
|
||||
return clean.strip()[:100]
|
||||
|
||||
|
||||
def get_browser_identity():
|
||||
print("🤖 Startuji Selenium (Single Thread Mode)...")
|
||||
opts = Options()
|
||||
opts.add_argument("--headless=new")
|
||||
opts.add_argument("--disable-gpu")
|
||||
driver = webdriver.Chrome(options=opts)
|
||||
driver.get("https://sktorrent.eu")
|
||||
|
||||
if COOKIE_FILE.exists():
|
||||
with open(COOKIE_FILE, "r", encoding="utf-8") as f:
|
||||
cookies_list = json.load(f)
|
||||
for c in cookies_list:
|
||||
driver.add_cookie(c)
|
||||
driver.refresh()
|
||||
time.sleep(2)
|
||||
|
||||
user_agent = driver.execute_script("return navigator.userAgent;")
|
||||
browser_cookies = driver.get_cookies()
|
||||
driver.quit()
|
||||
return user_agent, browser_cookies
|
||||
|
||||
|
||||
# ============================================================
|
||||
# MAIN
|
||||
# ============================================================
|
||||
if __name__ == "__main__":
|
||||
if not os.path.exists(BACKUP_DIR):
|
||||
os.makedirs(BACKUP_DIR)
|
||||
|
||||
# 1. Načíst zbývající chyby
|
||||
db = pymysql.connect(**DB_CONFIG)
|
||||
cursor = db.cursor()
|
||||
cursor.execute(
|
||||
"SELECT torrent_hash, download_url, title_visible FROM torrents WHERE torrent_content IS NULL AND download_url IS NOT NULL")
|
||||
rows = cursor.fetchall()
|
||||
|
||||
print(f"📋 Zbývá opravit: {len(rows)} položek.")
|
||||
if not rows:
|
||||
print("🎉 Hotovo! Vše je staženo.")
|
||||
exit()
|
||||
|
||||
# 2. Získat identitu
|
||||
ua, cookies = get_browser_identity()
|
||||
|
||||
session = requests.Session()
|
||||
session.headers.update({"User-Agent": ua})
|
||||
for c in cookies:
|
||||
session.cookies.set(c['name'], c['value'])
|
||||
|
||||
# 3. Pomalá smyčka (1 vlákno)
|
||||
success = 0
|
||||
dead_links = 0
|
||||
|
||||
print("🚀 Spouštím jemné dočištění...")
|
||||
|
||||
for i, row in enumerate(rows):
|
||||
t_hash, url, title = row
|
||||
print(f"[{i + 1}/{len(rows)}] {title[:50]}...", end=" ")
|
||||
|
||||
try:
|
||||
# Delší pauza pro stabilitu
|
||||
time.sleep(random.uniform(1.5, 3.0))
|
||||
|
||||
resp = session.get(url, timeout=20) # Delší timeout
|
||||
|
||||
if resp.status_code == 404:
|
||||
print("❌ 404 Nenalezeno (soubor na serveru neexistuje)")
|
||||
dead_links += 1
|
||||
continue
|
||||
|
||||
if resp.status_code != 200:
|
||||
print(f"❌ Chyba {resp.status_code}")
|
||||
continue
|
||||
|
||||
content = resp.content
|
||||
if len(content) > 100:
|
||||
# DB
|
||||
cursor.execute("UPDATE torrents SET torrent_content = %s WHERE torrent_hash = %s", (content, t_hash))
|
||||
|
||||
# Disk
|
||||
fname = f"{sanitize_filename(title)}_{t_hash[:6]}.torrent"
|
||||
with open(os.path.join(BACKUP_DIR, fname), "wb") as f:
|
||||
f.write(content)
|
||||
|
||||
print("✅ OK")
|
||||
success += 1
|
||||
else:
|
||||
print("⚠️ Prázdný soubor")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Selhalo: {e}")
|
||||
|
||||
db.close()
|
||||
print("\n" + "=" * 30)
|
||||
print(f"🏁 FINÁLE: Opraveno {success} z {len(rows)}")
|
||||
if dead_links > 0:
|
||||
print(f"💀 Mrtvé odkazy (404): {dead_links} (ty už opravit nejdou)")
|
||||
Reference in New Issue
Block a user