mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-30 22:50:45 -08:00
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from html.parser import HTMLParser
|
|
|
|
from yt_dlp.utils import clean_html, get_element_by_class, get_elements_by_class
|
|
|
|
from ..base_provider import AnimeProvider
|
|
from .constants import ANIWAVE_BASE, SEARCH_HEADERS
|
|
|
|
|
|
class ParseAnchorAndImgTag(HTMLParser):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.img_tag = None
|
|
self.a_tag = None
|
|
|
|
def handle_starttag(self, tag, attrs):
|
|
if tag == "img":
|
|
self.img_tag = {attr[0]: attr[1] for attr in attrs}
|
|
if tag == "a":
|
|
self.a_tag = {attr[0]: attr[1] for attr in attrs}
|
|
|
|
|
|
class AniWaveApi(AnimeProvider):
|
|
def search_for_anime(self, anime_title, *args):
|
|
self.session.headers.update(SEARCH_HEADERS)
|
|
search_url = f"{ANIWAVE_BASE}/filter"
|
|
params = {"keyword": anime_title}
|
|
res = self.session.get(search_url, params=params)
|
|
search_page = res.text
|
|
search_results_html_list = get_elements_by_class("item", search_page)
|
|
results = []
|
|
for result_html in search_results_html_list:
|
|
aniposter_html = get_element_by_class("poster", result_html)
|
|
episode_html = get_element_by_class("sub", aniposter_html)
|
|
episodes = clean_html(episode_html) or 12
|
|
if not aniposter_html:
|
|
return
|
|
parser = ParseAnchorAndImgTag()
|
|
parser.feed(aniposter_html)
|
|
image_data = parser.img_tag
|
|
anime_link_data = parser.a_tag
|
|
if not image_data or not anime_link_data:
|
|
continue
|
|
|
|
episodes = int(episodes)
|
|
|
|
# finally!!
|
|
image_link = image_data["src"]
|
|
title = image_data["alt"]
|
|
anime_id = anime_link_data["href"]
|
|
|
|
results.append(
|
|
{
|
|
"availableEpisodes": list(range(1, episodes)),
|
|
"id": anime_id,
|
|
"title": title,
|
|
"poster": image_link,
|
|
}
|
|
)
|
|
self.search_results = results
|
|
return {"pageInfo": {}, "results": results}
|
|
|
|
def get_anime(self, anime_id, *args):
|
|
anime_page_url = f"{ANIWAVE_BASE}{anime_id}"
|
|
self.session.get(anime_page_url)
|
|
# TODO: to be continued; mostly js so very difficult
|