Coverage for src\scrape\search\search_anime_scraper.py: 100%
38 statements
« prev ^ index » next coverage.py v7.10.1, created at 2025-10-19 21:13 +0800
« prev ^ index » next coverage.py v7.10.1, created at 2025-10-19 21:13 +0800
1from bs4 import BeautifulSoup
2from src.scrape.search.search_scraper import SearchScraper
3from src.utility.endpoints import Endpoint
4from src.utility.lib import Logger
5from src.utility.utils import OtherInfo, PersonInfo, Utils, ViewType
6from typing import Dict, List
9class SearchAnimeScraper(SearchScraper):
10 OTHER_INFO_FIELDS: List[OtherInfo] = [
11 OtherInfo.RELEASE_DATE,
12 OtherInfo.PLAYBACK_TIME,
13 OtherInfo.PRODUCTION_COMPANY,
14 ]
16 PERSON_INFO_FIELDS: List[PersonInfo] = [
17 PersonInfo.PRODUCER_1,
18 PersonInfo.EXECUTIVE_PRODUCER_1,
19 PersonInfo.DIRECTOR,
20 PersonInfo.SERIES_COMPOSER,
21 PersonInfo.CAST,
22 ]
24 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None:
25 super().__init__(soup, params, view)
27 def set_search_results(self) -> None:
28 self.search_heading = self._get_heading()
30 animes = []
32 if not self._is_results_empty():
33 results = self._get_results_container()
35 for ctr, result in enumerate(results[:int(self.results_limit)]):
36 a = {}
38 a["title"] = self._get_title(result)
39 a["rating"] = self._get_rating(result)
41 data_mark = self._get_data_mark(result)
42 a["mark_count"] = data_mark.count
44 data_clip = self._get_data_clip(result)
45 a["clip_count"] = data_clip.count
46 a["series_id"] = data_clip.anime_series_id
47 a["season_id"] = data_clip.anime_season_id
49 a["link"] = Utils.create_filmarks_link(Endpoint.INFO_ANIMES.value.path.format(
50 anime_series_id=data_clip.anime_series_id,
51 anime_season_id=data_clip.anime_season_id,
52 ))
54 if poster := self._get_poster(result):
55 a["poster"] = poster
57 for field in self.OTHER_INFO_FIELDS:
58 value = self._get_other_info(result, field)
59 if value: a[field.key] = value
61 for field in self.PERSON_INFO_FIELDS:
62 value = self._get_person_info(result, field)
63 if value: a[field.key] = value
65 Logger.info(self.get_logging(idx=ctr + 1, text=a))
66 animes.append(a)
68 self.search_results["animes"] = animes