Coverage for src\scrape\info\info_movie_scraper.py: 100%
56 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 InfoMovieScraper(InfoScraper):
10 OTHER_INFO_FIELDS: List[OtherInfo] = [
11 OtherInfo.SCREENING_DATE,
12 OtherInfo.SCREENING_TIME,
13 OtherInfo.COUNTRY_OF_ORIGIN,
14 OtherInfo.GENRE,
15 OtherInfo.DISTRIBUTOR,
16 ]
18 PERSON_INFO_FIELDS: List[PersonInfo] = [
19 PersonInfo.CREATOR,
20 PersonInfo.DIRECTOR,
21 PersonInfo.SCRIPTWRITER,
22 PersonInfo.ARTIST,
23 PersonInfo.CAST,
24 ]
26 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None:
27 super().__init__(soup, params, view)
29 self.movie_id = int(self.params.get("movie_id"))
30 self.review_id = int(self.params.get("review_id", -1))
32 def set_info_data(self) -> None:
33 self.data["title"] = self._get_title()
35 if original_title := self._get_original_title():
36 self.data["original_title"] = original_title
38 if synopsis := self._get_synopsis():
39 self.data["synopsis"] = synopsis
41 self.data["rating"] = self._get_rating()
43 data_mark = self._get_data_mark()
44 self.data["mark_count"] = data_mark.count
46 data_clip = self._get_data_clip()
47 self.data["clip_count"] = data_clip.count
49 self.data["movie_id"] = self.movie_id
50 self.data["link"] = self._get_link()
52 if official_site := self._get_official_site():
53 self.data["official_site"] = official_site
55 if poster := self._get_poster():
56 self.data["poster"] = poster
58 if production_year := self._get_production_year():
59 self.data["production_year_link"], self.data["production_year"] = production_year
61 for field in self.OTHER_INFO_FIELDS:
62 value = self._get_other_info(field)
63 if value: self.data[field.key] = value
65 for field in self.PERSON_INFO_FIELDS:
66 value = self._get_person_info(field)
67 if value: self.data[field.key] = value
69 Logger.info(self.get_logging(id=[self.movie_id], text=self.data))
71 def set_review_data(self) -> None:
72 self.data["title"] = self._get_title()
74 if original_title := self._get_original_title():
75 self.data["original_title"] = original_title
77 self.data["rating"] = self._get_rating()
79 self.data["movie_id"] = self.movie_id
80 if self.review_id != -1:
81 self.data["review_id"] = self.review_id
83 self.data["link"] = Utils.create_filmarks_link(
84 Endpoint.REVIEW_SPECIFIC_MOVIES.value.path.format(
85 movie_id=self.movie_id,
86 review_id = self.review_id
87 )
88 ) if self.review_id != -1 else self._get_link()
90 if self.review_id != -1:
91 self.data["review"] = self._get_review()
92 Logger.info(self.get_logging(id=[self.movie_id, self.review_id], text=self.data))
94 else:
95 if (condition := self._is_reviews_empty()):
96 self.data["reviews"] = []
97 Logger.warn(self.get_logging(id=[self.movie_id], text=condition.text))
99 else:
100 self.data["reviews"] = self._get_review_info()
101 Logger.info(self.get_logging(id=[self.movie_id], text=self.data))