mirror of
				https://github.com/karl0ss/GoGoDownloader.git
				synced 2025-11-04 08:31:04 +00:00 
			
		
		
		
	Update backend.py
Fixed quality selection and website from slowing down the download due to multiple requests at once.
This commit is contained in:
		
							parent
							
								
									fbf352579c
								
							
						
					
					
						commit
						4d456ba9b9
					
				@ -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."
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user