import requests from bs4 import BeautifulSoup from datetime import datetime import pandas as pd import argparse import os from urlencode import urlencode from dotenv import load_dotenv import logging ########################################## #Logging logger = logging.getLogger('Uploadbot') ########################################## XML_BEGIN_RECENT = """Torfiles Last 25 https://torfiles.fieryeagle.org Torfiles RSS Feed en 5 """ XML_BEGIN_LAST = """Torfiles Last 48h https://torfiles.fieryeagle.org Torfiles RSS Feed en 5 """ XML_END = """""" load_dotenv() copyparty_token = os.getenv('COPYPARTY_TOKEN') def make_torrent_entry(name, timestamp, category): if category: category = "DODI_Repack" else: category = "Non_Repack" return f""" <![CDATA[{name}]]> {timestamp} +0000 {category} {name} """ def write_file(path, data): if not os.path.exists("RSS"): logger.warning('RSS folder not found, creating...') os.mkdir("RSS") with open(os.path.realpath(path), "wt") as f: f.write(data) def create_25_recent_feed(df): most_recent_25 = df.sort_values("timestamp", ascending=False).head(25) latest_25_xml = "\n".join([make_torrent_entry(i[0], i[2], i[3]) for i in most_recent_25.values]) write_file("RSS/recent_25.xml", XML_BEGIN_RECENT+latest_25_xml+XML_END) def create_48h_latest(df): last_48_hours = df[df['timestamp'] > datetime.now() - pd.Timedelta(days=2)] last_48_hours = last_48_hours.sort_values("timestamp", ascending=False) last_48_xml = "\n".join([make_torrent_entry(i[0], i[2], i[3]) for i in last_48_hours.values]) write_file("RSS/latest_48h.xml", XML_BEGIN_LAST+last_48_xml+XML_END) def create_df(): torfiles_scrape = requests.get("https://upload.fieryeagle.org/torfiles", auth=("torbot",copyparty_token)) soup = BeautifulSoup(torfiles_scrape.content, "html.parser") rows = [i.find_all("td") for i in soup.tbody.find_all("tr")] filtered_rows = [[i[1].text, i[6].text, datetime.strptime(i[9].text, "%Y-%m-%d %H:%M:%S")] for i in rows] df = pd.DataFrame( data=filtered_rows, columns=["name", "upload_ip", "timestamp"] ) df['is_repack'] = df['name'].str.contains('DODI', case=False) return df[df["upload_ip"] == "49.12.185.202"]