Coverage for src\scrape\info\info_drama_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 InfoDramaScraper(InfoScraper):
10 OTHER_INFO_FIELDS: List[OtherInfo] = [
11 OtherInfo.RELEASE_DATE,
12 OtherInfo.PLAYBACK_TIME,
13 OtherInfo.COUNTRY_OF_ORIGIN,
14 OtherInfo.GENRE,
15 ]
17 PERSON_INFO_FIELDS: List[PersonInfo] = [
18 PersonInfo.CREATOR,
19 PersonInfo.PLANNER,
20 PersonInfo.PRODUCER_2,
21 PersonInfo.EXECUTIVE_PRODUCER_2,
22 PersonInfo.DIRECTOR,
23 PersonInfo.SCRIPTWRITER,
24 PersonInfo.ARTIST,
25 PersonInfo.CAST,
26 ]
28 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None:
29 super().__init__(soup, params, view)
31 self.series_id = int(self.params.get("drama_series_id"))
32 self.season_id = int(self.params.get("drama_season_id"))
33 self.review_id = int(self.params.get("review_id", -1))
35 def set_info_data(self) -> None:
36 self.data["title"] = self._get_title()
38 if original_title := self._get_original_title():
39 self.data["original_title"] = original_title
41 if synopsis := self._get_synopsis():
42 self.data["synopsis"] = synopsis
44 self.data["rating"] = self._get_rating()
46 data_mark = self._get_data_mark()
47 self.data["mark_count"] = data_mark.count
49 data_clip = self._get_data_clip()
50 self.data["clip_count"] = data_clip.count
52 self.data["series_id"] = self.series_id
53 self.data["season_id"] = self.season_id
54 self.data["link"] = self._get_link()
56 if official_site := self._get_official_site():
57 self.data["official_site"] = official_site
59 if poster := self._get_poster():
60 self.data["poster"] = poster
62 if production_year := self._get_production_year():
63 self.data["production_year_link"], self.data["production_year"] = production_year
65 for field in self.OTHER_INFO_FIELDS:
66 value = self._get_other_info(field)
67 if value: self.data[field.key] = value
69 for field in self.PERSON_INFO_FIELDS:
70 value = self._get_person_info(field)
71 if value: self.data[field.key] = value
73 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data))
75 def set_review_data(self) -> None:
76 self.data["title"] = self._get_title()
78 if original_title := self._get_original_title():
79 self.data["original_title"] = original_title
81 self.data["rating"] = self._get_rating()
83 self.data["series_id"] = self.series_id
84 self.data["season_id"] = self.season_id
85 if self.review_id != -1:
86 self.data["review_id"] = self.review_id
88 self.data["link"] = Utils.create_filmarks_link(
89 Endpoint.REVIEW_SPECIFIC_DRAMAS.value.path.format(
90 drama_series_id=self.series_id,
91 drama_season_id=self.season_id,
92 review_id = self.review_id
93 )
94 ) if self.review_id != -1 else self._get_link()
96 if self.review_id != -1:
97 self.data["review"] = self._get_review()
98 Logger.info(self.get_logging(id=[self.series_id, self.season_id, self.review_id], text=self.data))
100 else:
101 if (condition := self._is_reviews_empty()):
102 self.data["reviews"] = []
103 Logger.warn(self.get_logging(id=[self.series_id, self.season_id], text=condition.text))
105 else:
106 self.data["reviews"] = self._get_review_info()
107 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data))