#!/usr/bin/env python3 """Python Script for generating an rss.xml for the Guide. Requires bencodepy from pypy.""" import os import hashlib import urllib.parse import datetime import bencodepy dir = os.path.join(os.getcwd(), "torrents") rss = os.path.join(os.getcwd(), "rss.xml") with open(rss, "w") as xml: xml.write("\n") xml.write("\n") xml.write("\t\n") xml.write("\t\tPlailect Guide Feed\n") xml.write("\t\t{0}\n".format(datetime.datetime.utcnow().strftime("%a, %d %b %Y %X +0000"))) xml.write("\t\thttps://github.com/Plailect/Guide_3DS/\n") for filename in os.listdir(dir): if filename.endswith(".torrent"): filepath = os.path.join(dir, filename) with open(filepath, "rb") as a: raw = a.read() tor = bencodepy.decode(raw) trackers = [] infohash = hashlib.sha1(bencodepy.encode(tor[b"info"])).hexdigest().upper() magp = {"xt": "urn:btih:{0}".format(infohash), "dn": tor[b"info"][b"name"], "xl": tor[b"info"][b"length"]} magstr = urllib.parse.urlencode(magp) for anncl in tor[b"announce-list"]: if isinstance(anncl, list): for annc in anncl: trackers.append(annc.decode("utf-8")) else: trackers.append(anncl.decode("utf-8")) length = tor[b"info"][b"length"] name = tor[b"info"][b"name"].decode("utf-8") ts = tor[b"creation date"] pubdate = datetime.datetime.utcfromtimestamp(int(ts)) xml.write("\t\t\n") xml.write("\t\t\t{0}\n".format(name)) xml.write("\t\t\t{0}\n".format(name)) xml.write("\t\t\t{0}\n".format(infohash)) xml.write("\t\t\tmagnet:?xt=urn:btih:{0}\n".format(infohash)) xml.write("\t\t\t{0}\n".format(pubdate.strftime("%a, %d %b %Y %X +0000"))) xml.write("\t\t\t{0}\n".format(length)) xml.write("\t\t\t{0}\n".format(infohash)) xml.write("\t\t\tmagnet:?xt=urn:btih:{0}\n".format(infohash)) #xml.write("\t\t\t{0}\n".format(name)) xml.write("\t\t\t\n".format(infohash)) if trackers: xml.write("\t\t\t\n") xml.write("\t\t\t\t\n") for tracker in trackers: xml.write("\t\t\t\t\t\n") xml.write("\t\t\t\t\t\t{0}\n".format(tracker)) xml.write("\t\t\t\t\t\n") xml.write("\t\t\t\t\n") xml.write("\t\t\t\n") xml.write("\t\t\n") xml.write("\t\n") xml.write("")