import re
import requests
class FindMyAnime:
base_url = "https://find-my-anime.dtimur.de/api"
def get_anime_data(self, anime_id, anime_id_provider):
params = {"id": anime_id, "provider": anime_id_provider, "includeAdult": "true"}
return self.make_request(params=params)
def make_request(self, params):
res = requests.get(
self.base_url,
params=params,
)
if res.status_code == 200:
return res.json()
else:
raise Exception(f"FMA error::{res.text}")
def extract_season(res):
regexes = [
r"season\s(\d+)",
r"\s(\d+)st\sseason(?:\s|$)",
r"\s(\d+)nd\sseason(?:\s|$)",
r"\s(\d+)rd\sseason(?:\s|$)",
r"\s(\d+)th\sseason(?:\s|$)",
]
s_ids = []
for regex in regexes:
if isinstance(res.get("title"), dict):
s_ids += [
re.findall(regex, name, re.IGNORECASE)
for lang, name in res.get("title").items()
if name is not None
]
else:
s_ids += [re.findall(regex, name, re.IGNORECASE) for name in res.get("title")]
s_ids += [re.findall(regex, name, re.IGNORECASE) for name in res.get("synonyms")]
s_ids = [s[0] for s in s_ids if s]
if not s_ids:
regex = r"\s(\d+)$"
cour = False
if isinstance(res.get("title"), dict):
for _lang, name in res.get("title").items():
if name is not None and (" part " in name.lower() or " cour " in name.lower()):
cour = True
break
if not cour:
s_ids += [
re.findall(regex, name, re.IGNORECASE)
for lang, name in res.get("title").items()
if name is not None
]
s_ids += [re.findall(regex, name, re.IGNORECASE) for name in res.get("synonyms")]
else:
for name in res.get("title"):
if " part " in name.lower() or " cour " in name.lower():
cour = True
break
if not cour:
s_ids += [re.findall(regex, name, re.IGNORECASE) for name in res.get("title")]
s_ids += [re.findall(regex, name, re.IGNORECASE) for name in res.get("synonyms")]
s_ids = [s[0] for s in s_ids if s and int(s[0]) < 20]
return s_ids