mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-12 15:50:01 -08:00
feat: aniwave??
This commit is contained in:
@@ -6,5 +6,6 @@ anime_sources = {
|
||||
"allanime": "api.AllAnimeAPI",
|
||||
"animepahe": "api.AnimePaheApi",
|
||||
"aniwatch": "api.AniWatchApi",
|
||||
"aniwave": "api.AniWaveApi",
|
||||
}
|
||||
SERVERS_AVAILABLE = [*ALLANIME_SERVERS, *ANIMEPAHESERVERS, *ANIWATCHSERVERS]
|
||||
|
||||
65
fastanime/libs/anime_provider/aniwave/api.py
Normal file
65
fastanime/libs/anime_provider/aniwave/api.py
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
20
fastanime/libs/anime_provider/aniwave/constants.py
Normal file
20
fastanime/libs/anime_provider/aniwave/constants.py
Normal file
@@ -0,0 +1,20 @@
|
||||
ANIWAVE_BASE = "https://aniwave.to"
|
||||
|
||||
SEARCH_HEADERS = {
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8",
|
||||
"Accept-Language": "en-US,en;q=0.5",
|
||||
# 'Accept-Encoding': 'Utf-8',
|
||||
"Referer": "https://aniwave.to/filter",
|
||||
"DNT": "1",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"Sec-Fetch-Dest": "document",
|
||||
"Sec-Fetch-Mode": "navigate",
|
||||
"Sec-Fetch-Site": "same-origin",
|
||||
"Sec-Fetch-User": "?1",
|
||||
"Connection": "keep-alive",
|
||||
"Alt-Used": "aniwave.to",
|
||||
# 'Cookie': '__pf=1; usertype=guest; session=BElk9DJdO3sFdDmLiGxuNiM9eGYO1TjktGsmdwjV',
|
||||
"Priority": "u=0, i",
|
||||
# Requests doesn't support trailers
|
||||
# 'TE': 'trailers',
|
||||
}
|
||||
Reference in New Issue
Block a user