import feedparser import json import re import subprocess import argparse feedparser.USER_AGENT = "anime-rss/1.0" # ANSI escape sequence coloring CSI = "\x1B[" BOLD = CSI + "1;49m" RESET = CSI + "0;0m" RED = CSI + "91;49m" GREEN = CSI + "92;49m" BOLD_RED = BOLD + RED BOLD_GREEN = BOLD + GREEN UNDERLINE = CSI + "4;4m" parser = argparse.ArgumentParser() parser.add_argument("c", help="path to the config.json file", type=str, default="config.json", nargs='?') parser.add_argument("a", help="path to the animes.json file", type=str, default="animes.json", nargs='?') args = parser.parse_args() def build_target_folder(): if config["dirPerAnime"]: return config["animeDownloadDir"] + "/" + anime["Title"].replace(" ", "_") else: return config["animeDownloadDir"] with open(args.a, "r") as feeds: feeds = json.load(feeds) with open(args.c, "r") as config: config = json.load(config) for feed in feeds["Feeds"]: print(BOLD + "Checking feed: " + feed["ID"] + RESET) NewsFeed = feedparser.parse(feed["URL"]) for anime in feed["Animes"]: print( "Checking anime: " + BOLD_RED + anime["Title"] + RESET + " - Airing every " + UNDERLINE + anime["Airing"] + RESET + " " + anime["Local"] + "/x") for entry in NewsFeed.entries: if anime["Title"] in entry.title: regex = feed["Episode-Regex"].replace("$SHOWS$", anime["Title"]) match = re.match(regex, entry.title) if match: episodeNumber = match.groups() if int(episodeNumber[0]) > int(anime["Local"]): print(BOLD_GREEN + "NEW NEW NEW " + anime["Title"] + " " + episodeNumber[0] + RESET) subprocess.run(["transmission-remote", "-a", entry.link, "-w", build_target_folder()]) anime["Local"] = str(int(anime["Local"]) + 1).zfill(2) with open(args.a, "w") as new_feeds: new_feeds.write(json.dumps(feeds, indent=3))