Coverage for src\scrape\info\info_anime_scraper.py: 100%
59 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.info.info_scraper import InfoScraper
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 InfoAnimeScraper(InfoScraper):
10 OTHER_INFO_FIELDS: List[OtherInfo] = [
11 OtherInfo.RELEASE_DATE,
12 OtherInfo.PLAYBACK_TIME,
13 OtherInfo.COUNTRY_OF_ORIGIN,
14 OtherInfo.PRODUCTION_COMPANY,
15 ]
17 PERSON_INFO_FIELDS: List[PersonInfo] = [
18 PersonInfo.CREATOR,
19 PersonInfo.PLANNER,
20 PersonInfo.PRODUCER_1,
21 PersonInfo.EXECUTIVE_PRODUCER_1,
22 PersonInfo.CHIEF_DIRECTOR,
23 PersonInfo.DIRECTOR,
24 PersonInfo.SERIES_COMPOSER,
25 PersonInfo.SCRIPTWRITER,
26 PersonInfo.CHARACTER_ORIGINAL_DESIGNER,
27 PersonInfo.CHARACTER_DESIGNER,
28 PersonInfo.NARRATOR,
29 PersonInfo.ARTIST,
30 PersonInfo.CAST,
31 ]
33 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None:
34 super().__init__(soup, params, view)
36 self.series_id = int(self.params.get("anime_series_id"))
37 self.season_id = int(self.params.get("anime_season_id"))
38 self.review_id = int(self.params.get("review_id", -1))
40 def set_info_data(self) -> None:
41 self.data["title"] = self._get_title()
43 if original_title := self._get_original_title():
44 self.data["original_title"] = original_title
46 if synopsis := self._get_synopsis():
47 self.data["synopsis"] = synopsis
49 self.data["rating"] = self._get_rating()
51 data_mark = self._get_data_mark()
52 self.data["mark_count"] = data_mark.count
54 data_clip = self._get_data_clip()
55 self.data["clip_count"] = data_clip.count
57 self.data["series_id"] = self.series_id
58 self.data["season_id"] = self.season_id
59 self.data["link"] = self._get_link()
61 if official_site := self._get_official_site():
62 self.data["official_site"] = official_site
64 if poster := self._get_poster():
65 self.data["poster"] = poster
67 if production_year := self._get_production_year():
68 self.data["production_year_link"], self.data["production_year"] = production_year
70 for field in self.OTHER_INFO_FIELDS:
71 value = self._get_other_info(field)
72 if value: self.data[field.key] = value
74 for field in self.PERSON_INFO_FIELDS:
75 value = self._get_person_info(field)
76 if value: self.data[field.key] = value
78 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data))
80 def set_review_data(self) -> None:
81 self.data["title"] = self._get_title()
83 if original_title := self._get_original_title():
84 self.data["original_title"] = original_title
86 self.data["rating"] = self._get_rating()
88 self.data["series_id"] = self.series_id
89 self.data["season_id"] = self.season_id
90 if self.review_id != -1:
91 self.data["review_id"] = self.review_id
93 self.data["link"] = Utils.create_filmarks_link(
94 Endpoint.REVIEW_SPECIFIC_ANIMES.value.path.format(
95 anime_series_id=self.series_id,
96 anime_season_id=self.season_id,
97 review_id = self.review_id
98 )
99 ) if self.review_id != -1 else self._get_link()
101 if self.review_id != -1:
102 self.data["review"] = self._get_review()
103 Logger.info(self.get_logging(id=[self.series_id, self.season_id, self.review_id], text=self.data))
105 else:
106 if (condition := self._is_reviews_empty()):
107 self.data["reviews"] = []
108 Logger.warn(self.get_logging(id=[self.series_id, self.season_id], text=condition.text))
110 else:
111 self.data["reviews"] = self._get_review_info()
112 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data))