90 lines
1.8 KiB
Python
90 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import pymysql
|
|
import bencodepy
|
|
|
|
# ===============================
|
|
# DB CONFIG
|
|
# ===============================
|
|
|
|
DB_CONFIG = dict(
|
|
host="192.168.1.50",
|
|
user="root",
|
|
password="Vlado9674+",
|
|
database="torrents",
|
|
charset="utf8mb4"
|
|
)
|
|
|
|
LIMIT = 5 # kolik torrentů zobrazit
|
|
|
|
|
|
# ===============================
|
|
# TORRENT PARSER
|
|
# ===============================
|
|
|
|
def parse_torrent(blob):
|
|
data = bencodepy.decode(blob)
|
|
|
|
info = data[b'info']
|
|
|
|
files = []
|
|
|
|
# multi-file torrent
|
|
if b'files' in info:
|
|
for f in info[b'files']:
|
|
path = "/".join(p.decode(errors="ignore") for p in f[b'path'])
|
|
size = f[b'length']
|
|
files.append((path, size))
|
|
|
|
# single-file torrent
|
|
else:
|
|
name = info[b'name'].decode(errors="ignore")
|
|
size = info[b'length']
|
|
files.append((name, size))
|
|
|
|
return files
|
|
|
|
|
|
# ===============================
|
|
# MAIN
|
|
# ===============================
|
|
|
|
def main():
|
|
|
|
conn = pymysql.connect(**DB_CONFIG)
|
|
cur = conn.cursor()
|
|
|
|
cur.execute(f"""
|
|
SELECT id, title_visible, qb_savepath, torrent_content
|
|
FROM torrents
|
|
WHERE torrent_content IS NOT NULL
|
|
LIMIT {LIMIT}
|
|
""")
|
|
rows = cur.fetchall()
|
|
|
|
for tid, title, savepath, blob in rows:
|
|
|
|
print("\n" + "="*80)
|
|
print(f"Torrent ID : {tid}")
|
|
print(f"Title : {title}")
|
|
print(f"Savepath : {savepath}")
|
|
|
|
try:
|
|
files = parse_torrent(blob)
|
|
|
|
print(f"Files inside torrent: {len(files)}")
|
|
|
|
for path, size in files:
|
|
print(f" {size:>12} B {path}")
|
|
|
|
except Exception as e:
|
|
print("ERROR parsing torrent:", e)
|
|
|
|
cur.close()
|
|
conn.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|