2021-09-01 16:34:08 +08:00
|
|
|
# Dependencies
|
|
|
|
|
|
|
|
import requests
|
|
|
|
import ctypes
|
|
|
|
import os
|
|
|
|
import backend as bd
|
|
|
|
import colorama
|
|
|
|
from tqdm.contrib.concurrent import thread_map
|
|
|
|
from bs4 import BeautifulSoup
|
|
|
|
from colorama import Fore
|
|
|
|
|
|
|
|
colorama.init(autoreset=True)
|
2021-09-01 16:23:47 +02:00
|
|
|
try:
|
|
|
|
ctypes.windll.kernel32.SetConsoleTitleW("BitAnime")
|
|
|
|
except(AttributeError):
|
|
|
|
pass
|
2021-09-01 16:34:08 +08:00
|
|
|
|
|
|
|
def bitanime():
|
|
|
|
again = True
|
|
|
|
while again:
|
|
|
|
print(
|
|
|
|
f""" {Fore.LIGHTBLUE_EX}
|
|
|
|
____ _ _ _ _
|
|
|
|
| __ )(_) |_ / \ _ __ (_)_ __ ___ ___
|
|
|
|
| _ \| | __| / _ \ | '_ \| | '_ ` _ \ / _ \\
|
|
|
|
| |_) | | |_ / ___ \| | | | | | | | | | __/
|
|
|
|
|____/|_|\__/_/ \_\_| |_|_|_| |_| |_|\___|
|
|
|
|
{Fore.LIGHTYELLOW_EX}
|
|
|
|
By: sh1nobu
|
|
|
|
Github: https://github.com/sh1nobuu/BitAnime
|
|
|
|
"""
|
|
|
|
)
|
|
|
|
"""
|
|
|
|
Ask user for input and then check if the anime provided exists or if not, loop
|
|
|
|
"""
|
|
|
|
check = True
|
|
|
|
while check:
|
|
|
|
name = input(f"Enter anime name >> ").lower()
|
|
|
|
if "-" in name:
|
|
|
|
title = name.replace("-", " ").title().strip()
|
|
|
|
else:
|
|
|
|
title = name.title().strip()
|
|
|
|
source = f"https://gogoanime.pe/category/{name}"
|
|
|
|
resp = requests.get(source)
|
|
|
|
if resp.status_code == 200:
|
|
|
|
print(f"{Fore.LIGHTGREEN_EX}====================================")
|
|
|
|
check = False
|
|
|
|
else:
|
|
|
|
print(
|
|
|
|
f"{Fore.LIGHTRED_EX}Error 404: Anime not found. Please try again."
|
|
|
|
)
|
|
|
|
check = True
|
|
|
|
"""
|
|
|
|
Get how many episode/s the anime has
|
|
|
|
"""
|
|
|
|
soup = BeautifulSoup(resp.content, "html.parser")
|
|
|
|
episode_number = soup.find("ul", {"id": "episode_page"})
|
|
|
|
episode_number = episode_number.get_text().split("-")[1].strip()
|
|
|
|
"""
|
|
|
|
Print the anime name, episode, and the link of the anime
|
|
|
|
"""
|
|
|
|
print(f"Title: {Fore.LIGHTCYAN_EX}{title}")
|
|
|
|
print(f"Episode/s: {Fore.LIGHTCYAN_EX}{episode_number}")
|
|
|
|
print(f"Link: {Fore.LIGHTCYAN_EX}{source}")
|
|
|
|
print(f"{Fore.LIGHTGREEN_EX}====================================")
|
|
|
|
"""
|
|
|
|
Create a download folder for the anime
|
|
|
|
"""
|
|
|
|
folder = os.path.join(os.getcwd(), title)
|
|
|
|
if not os.path.exists(folder):
|
|
|
|
os.mkdir(folder)
|
|
|
|
"""
|
|
|
|
Check if the anime has episode 0 or not
|
|
|
|
"""
|
|
|
|
source = f"https://gogoanime.pe/{name}"
|
|
|
|
resp = requests.get(source)
|
|
|
|
soup = BeautifulSoup(resp.content, "html.parser")
|
|
|
|
episode_zero = soup.find("h1", {"class": "entry-title"})
|
|
|
|
if episode_zero is None:
|
|
|
|
# Episode 0 does exist
|
|
|
|
episode_links = bd.get_links(name, episode_number, source)
|
|
|
|
download_links = bd.get_download_links(episode_links)
|
|
|
|
download_urls = bd.get_download_urls(download_links, True)
|
|
|
|
print(f"Downloading {Fore.LIGHTCYAN_EX}{len(download_urls)} episode/s")
|
|
|
|
print(f"{Fore.LIGHTGREEN_EX}====================================")
|
|
|
|
print(download_urls)
|
|
|
|
bd.get_path(folder)
|
|
|
|
thread_map(
|
|
|
|
bd.download_episodes, download_urls, ncols=75, total=len(download_urls)
|
|
|
|
)
|
2021-09-01 16:23:47 +02:00
|
|
|
try:
|
|
|
|
os.startfile(folder)
|
|
|
|
except(AttributeError):
|
|
|
|
import sys, subprocess
|
|
|
|
opener = "open" if sys.platform == "darwin" else "xdg-open"
|
|
|
|
subprocess.call([opener, folder])
|
2021-09-01 16:34:08 +08:00
|
|
|
|
|
|
|
else:
|
|
|
|
# Episode 0 does not exist
|
|
|
|
episode_links = bd.get_links(name, episode_number)
|
|
|
|
download_links = bd.get_download_links(episode_links)
|
|
|
|
download_urls = bd.get_download_urls(download_links, False)
|
|
|
|
print(
|
|
|
|
f"Downloading {Fore.LIGHTCYAN_EX}{len(download_urls)}{Fore.RESET} episode/s"
|
|
|
|
)
|
|
|
|
print(f"{Fore.LIGHTGREEN_EX}====================================")
|
|
|
|
bd.get_path(folder)
|
|
|
|
thread_map(
|
|
|
|
bd.download_episodes, download_urls, ncols=75, total=len(download_urls)
|
|
|
|
)
|
2021-09-01 16:23:47 +02:00
|
|
|
try:
|
|
|
|
os.startfile(folder)
|
|
|
|
except(AttributeError):
|
|
|
|
import sys, subprocess
|
|
|
|
opener = "open" if sys.platform == "darwin" else "xdg-open"
|
|
|
|
subprocess.call([opener, folder])
|
|
|
|
|
2021-09-01 16:34:08 +08:00
|
|
|
use_again = input("Do you want to download other anime? (y|n) >> ").lower()
|
|
|
|
if use_again == "y":
|
|
|
|
again = True
|
|
|
|
os.system("cls")
|
|
|
|
else:
|
|
|
|
again = False
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
bitanime()
|