z230
This commit is contained in:
94
Seedbox/50 PrintFilenamesFromTorrentFiles.py
Normal file
94
Seedbox/50 PrintFilenamesFromTorrentFiles.py
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pymysql
|
||||
import bencodepy
|
||||
|
||||
# ============================================================
|
||||
# DB CONFIG – UPRAV
|
||||
# ============================================================
|
||||
|
||||
DB_CONFIG = {
|
||||
"host": "192.168.1.50",
|
||||
"user": "root",
|
||||
"password": "Vlado9674+",
|
||||
"database": "torrents",
|
||||
"charset": "utf8mb4",
|
||||
"cursorclass": pymysql.cursors.SSCursor # streaming
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# HELPERS
|
||||
# ============================================================
|
||||
|
||||
def decode_if_bytes(value):
|
||||
if isinstance(value, bytes):
|
||||
return value.decode("utf-8", errors="replace")
|
||||
return value
|
||||
|
||||
|
||||
def parse_torrent(blob):
|
||||
data = bencodepy.decode(blob)
|
||||
|
||||
info = data[b"info"]
|
||||
|
||||
torrent_name = decode_if_bytes(info[b"name"])
|
||||
|
||||
files = []
|
||||
|
||||
# multi-file torrent
|
||||
if b"files" in info:
|
||||
for f in info[b"files"]:
|
||||
path = "/".join(decode_if_bytes(p) for p in f[b"path"])
|
||||
length = f[b"length"]
|
||||
files.append((path, length))
|
||||
|
||||
# single file torrent
|
||||
else:
|
||||
length = info[b"length"]
|
||||
files.append((torrent_name, length))
|
||||
|
||||
return torrent_name, files
|
||||
|
||||
|
||||
# ============================================================
|
||||
# MAIN
|
||||
# ============================================================
|
||||
|
||||
def main():
|
||||
|
||||
conn = pymysql.connect(**DB_CONFIG)
|
||||
|
||||
with conn.cursor() as cursor:
|
||||
|
||||
cursor.execute("""
|
||||
SELECT id, title_visible, torrent_content
|
||||
FROM torrents
|
||||
WHERE torrent_content IS NOT NULL
|
||||
""")
|
||||
|
||||
for row in cursor:
|
||||
torrent_id = row[0]
|
||||
title_visible = row[1]
|
||||
blob = row[2]
|
||||
|
||||
try:
|
||||
name, files = parse_torrent(blob)
|
||||
|
||||
print("=" * 70)
|
||||
print(f"DB ID : {torrent_id}")
|
||||
print(f"Title visible : {title_visible}")
|
||||
print(f"Torrent name : {name}")
|
||||
print("Files:")
|
||||
|
||||
for f, size in files:
|
||||
print(f" - {f} ({size} bytes)")
|
||||
|
||||
except Exception as e:
|
||||
print(f"ERROR parsing torrent ID {torrent_id}: {e}")
|
||||
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user