From 8210e0b07b9c5e8bc9a5d6c359c7f80947419032 Mon Sep 17 00:00:00 2001 From: "karl.hudgell" Date: Tue, 28 Jun 2022 08:48:05 +0100 Subject: [PATCH] working CLI tool --- GoGoDownloaderCLI.py | 92 ++++++++++++++++++++++++++++++++++++++------ README.md | 14 ++++--- backend.py | 3 +- config.json.default | 3 +- 4 files changed, 94 insertions(+), 18 deletions(-) diff --git a/GoGoDownloaderCLI.py b/GoGoDownloaderCLI.py index 64fe3c1..c5050c7 100644 --- a/GoGoDownloaderCLI.py +++ b/GoGoDownloaderCLI.py @@ -1,24 +1,81 @@ -from backend import * import json import io import os +import re +from backend import * + + +def renameFile(filename: str): + """_summary_ + + Args: + filename (str): _description_ + + Returns: + _type_: _description_ + """ + newFileName = "".join(re.split("\(|\)|\[|\]", filename)[::2]) + try: + os.rename(filename, newFileName) + return True + except OSError as err: + return err def loadDownloadHistory(): + """Loads the downloadHistory.json, creates it if it doesn't exist + + Returns: + object: download history list + """ if os.path.isfile("./downloadHistory.json") and os.access( "./downloadHistory.json", os.R_OK ): return json.load(open("./downloadHistory.json")) else: - print("Either file is missing or is not readable, creating file...") with io.open(os.path.join("./", "downloadHistory.json"), "w") as db_file: db_file.write(json.dumps([])) return json.load(open("./downloadHistory.json")) +def writeShowToDownloadHistory(showName: str, downloadHistory: list): + """Writes the showName and latestEpisode to the downloadHistory.json file + + Args: + showName (str): _description_ + downloadHistory (list): _description_ + + Returns: + _type_: _description_ + """ + downloadHistory.append(showName) + with io.open(os.path.join("./", "downloadHistory.json"), "w") as db_file: + db_file.write(json.dumps(downloadHistory)) + return json.load(open("./downloadHistory.json")) + + +def readDownloadHistory(fileNameObject: object, downloadHistory: list): + """Reads the downloadHistory.json and checks if the fileName is present + + Args: + fileNameObject (str): _description_ + downloadHistory (list): _description_ + + Returns: + _type_: _description_ + """ + dhFileName = ( + fileNameObject["showName"] + " - " + str(fileNameObject["latestEpisode"]) + ) + if dhFileName not in downloadHistory: + writeShowToDownloadHistory(dhFileName, downloadHistory) + return False + else: + return True + + def main(): dh = loadDownloadHistory() - config = config_check() downloader = gogoanime( config, @@ -33,18 +90,28 @@ def main(): list = downloader.get_show_from_bookmark() dl_links = {} for ep in list: - print( - "{OK}Scraping DL for " + ep["showName"] + " Ep " + str(ep["latestEpisode"]) - ) - dl_links[downloader.get_download_link(ep["downloadURL"])] = ( - ep["showName"], - ep["latestEpisode"], - ) + if readDownloadHistory(ep, dh): + showName = ep["showName"] + " - " + str(ep["latestEpisode"]) + print(f"{IN}{showName} already downloaded") + else: + print( + f"{IN}Scraping DL for " + + ep["showName"] + + " Ep " + + str(ep["latestEpisode"]) + ) + dl_links[downloader.get_download_link(ep["downloadURL"])] = ( + ep["showName"], + ep["latestEpisode"], + ) result = downloader.file_downloader(dl_links) + if config["CleanUpFileName"]: + for file in result.data: + renameFile(file) if len(result.errors) > 0: while len(result.errors) > 0: print(f"{ERR}{len(result.errors)} links failed retrying.") - print(f"{OK}Re-Scraping Links") + print(f"{IN}Re-Scraping Links") dl_links.clear() for ep in list: dl_links[downloader.get_download_link(ep["downloadURL"])] = ( @@ -52,6 +119,9 @@ def main(): ep["latestEpisode"], ) result = downloader.file_downloader(dl_links, overwrite_downloads=0) + if config["CleanUpFileName"]: + for file in result.data: + renameFile(file) if __name__ == "__main__": diff --git a/README.md b/README.md index 62c2176..990f7a6 100644 --- a/README.md +++ b/README.md @@ -57,16 +57,20 @@ If you want to run from source, or are using Linux/Mac you can run directly from ## Usage -The anime name is separated by "-". You can either type it manually, or go to [gogoanime.film](https://gogoanime.film/) and search for the anime you want to download and copy the name from the URL. +The anime name is separated by "-". You can either type it manually, or go to [gogoanime.gg](https://gogoanime.gg/) and search for the anime you want to download and copy the name from the URL. ### Examples ##### One word title -- https://gogoanime.film/category/bakemonogatari >> bakemonogatari -- https://gogoanime.film/category/steinsgate >> steinsgate +- https://gogoanime.gg/category/bakemonogatari >> bakemonogatari +- https://gogoanime.gg/category/steinsgate >> steinsgate ##### Multiple word title -- https://gogoanime.film/category/shadows-house >> shadows-house -- https://gogoanime.film/category/kono-subarashii-sekai-ni-shukufuku-wo- >> kono-subarashii-sekai-ni-shukufuku-wo- +- https://gogoanime.gg/category/shadows-house >> shadows-house +- https://gogoanime.gg/category/kono-subarashii-sekai-ni-shukufuku-wo- >> kono-subarashii-sekai-ni-shukufuku-wo- + + +# GoGoDownloader CLI +I have now also created the GoGoDownloader CLI, this tool can be used to run on a scheduled basis, it will login and get the latest episodes from your GoGoAnime bookmarks, and download the latest episode if it has not been downloaded yet. \ No newline at end of file diff --git a/backend.py b/backend.py index b852d71..9b79c69 100644 --- a/backend.py +++ b/backend.py @@ -214,10 +214,11 @@ class gogoanime: return files def get_show_from_bookmark(self): + print(f"{IN}Loading shows from bookmarks") bookmarkList = [] a = dict(auth=gogoanime.get_gogoanime_auth_cookie(self)) resp = requests.get( - "https://gogoanime.gg/user/bookmark", + f"https://gogoanime.{self.config['CurrentGoGoAnimeDomain']}/user/bookmark", cookies=a, ) soup = BeautifulSoup(resp.text, "html.parser") diff --git a/config.json.default b/config.json.default index d4a7487..5bce992 100644 --- a/config.json.default +++ b/config.json.default @@ -5,5 +5,6 @@ "CurrentGoGoAnimeDomain": "gg", "OverwriteDownloads": 0, "CLIQuality":"720", - "CLIDownloadLocation": "CLIOutput" + "CLIDownloadLocation": "CLIOutput", + "CleanUpFileName": false }