Update backend.py

Fixed quality selection and website from slowing down the download due to multiple requests at once.
This commit is contained in:
Arctic4161 2021-10-14 09:22:02 -05:00 committed by GitHub
parent fbf352579c
commit 4d456ba9b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,6 +6,9 @@ import os
from bs4 import BeautifulSoup
from dataclasses import dataclass
from colorama import Fore
from random import choice
import time
@dataclass(init=True)
@ -18,7 +21,7 @@ class Download:
episode_end: int
printed: bool = False
def get_links(self, source=None) -> list[str]:
def get_links(self, source=None):
if source is not None:
source_ep = f"https://gogoanime.pe/{self.name}-episode-"
episode_links = [
@ -34,7 +37,7 @@ class Download:
]
return episode_links
def get_download_links(self, episode_link) -> list[str]:
def get_download_links(self, episode_link):
with req.get(episode_link) as res:
soup = BeautifulSoup(res.content, "html.parser")
exist = soup.find("h1", {"class": "entry-title"})
@ -54,19 +57,23 @@ class Download:
else:
return None
def get_download_urls(self, download_link) -> list[str]:
def get_download_urls(self, download_link):
episode_quality = self.episode_quality
if episode_quality == "FullHDP":
episode_quality = "1080P"
elif episode_quality == "HDP":
episode_quality = "720P"
elif episode_quality == "SDP":
episode_quality = "360P"
with req.get(download_link) as res:
soup = BeautifulSoup(res.content, "html.parser")
link = soup.find("div", {"class": "mirror_link"}).find(
"div",
text=re.compile(fr"\b{self.episode_quality}\b"),
attrs={"class": "dowload"},
)
link = soup.find("div", {"class": "dowload"},text=re.compile(episode_quality))
if link is None:
link = soup.find("div", {"class": "mirror_link"}).find(
"div", {"class": "dowload"}
)
if not self.printed:
episode_quality = "720P"
link = soup.find("div", {"class": "dowload"},text=re.compile(episode_quality))
if link is None:
episode_quality = "360P"
link = soup.find("div", {"class": "dowload"},text=re.compile(episode_quality))
CustomMessage(None, self.episode_quality).qual_not_found()
self.episode_quality = link.text.split()[1][1:]
CustomMessage(None, self.episode_quality).use_default_qual()
@ -76,20 +83,29 @@ class Download:
link.a.get("href"),
] # episode_name: str, episode_link: str
def download_episodes(self, url) -> object:
header = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
def random_headers(self):
desktop_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0']
return {'User-Agent': choice(desktop_agents),"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Referer": "https://gogoanime.pe/",
"Connection": "close",
}
with req.get(url[1], headers=header, stream=True) as res:
episode_name = f"EP.{url[0]}.mp4"
file_loc = os.path.join(self.folder, episode_name)
with open(file_loc, "wb") as file:
shutil.copyfileobj(res.raw, file, 8192)
"Accept-Encoding": "gzip, deflate, br",
"Referer" : "https://goload.one/",
"Connection": "keep-alive"}
def download_episodes(self, url):
with req.get(url[1], headers=self.random_headers(), stream=True) as res:
episode_name = f"EP.{url[0]}.mp4"
file_loc = os.path.join(self.folder, episode_name)
with open(file_loc, "wb") as file:
shutil.copyfileobj(res.raw, file, 8192)
@dataclass(init=True)
@ -99,15 +115,15 @@ class CustomMessage(Exception):
message: str = None
episode_quality: str = None
def print_error(self) -> str:
def print_error(self):
print(self.message)
def qual_not_found(self) -> str:
def qual_not_found(self):
print(
f"[{Fore.RED}-{Fore.RESET}] {Fore.LIGHTCYAN_EX}{self.episode_quality}{Fore.RESET} quality not found."
f"[{Fore.RESET}{Fore.RED}-{Fore.RESET}] {Fore.LIGHTCYAN_EX}{self.episode_quality}{Fore.RESET} quality not found."
)
def use_default_qual(self) -> str:
def use_default_qual(self):
print(
f"[{Fore.GREEN}+{Fore.RESET}] Using {Fore.LIGHTCYAN_EX}{self.episode_quality}{Fore.RESET} as a default quality."
f"[{Fore.RESET}{Fore.GREEN}+{Fore.RESET}] Using {Fore.LIGHTCYAN_EX}{self.episode_quality}{Fore.RESET} as a default quality."
)