Coverage for src\scrape\search\search_drama_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 SearchDramaScraper(SearchScraper):
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.EXECUTIVE_PRODUCER_2,
19 PersonInfo.DIRECTOR,
20 PersonInfo.SCRIPTWRITER,
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 dramas = []
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 d = {}
38 d["title"] = self._get_title(result)
39 d["rating"] = self._get_rating(result)
41 data_mark = self._get_data_mark(result)
42 d["mark_count"] = data_mark.count
44 data_clip = self._get_data_clip(result)
45 d["clip_count"] = data_clip.count
46 d["series_id"] = data_clip.drama_series_id
47 d["season_id"] = data_clip.drama_season_id
49 d["link"] = Utils.create_filmarks_link(Endpoint.INFO_DRAMAS.value.path.format(
50 drama_series_id=data_clip.drama_series_id,
51 drama_season_id=data_clip.drama_season_id,
52 ))
54 if poster := self._get_poster(result):
55 d["poster"] = poster
57 for field in self.OTHER_INFO_FIELDS:
58 value = self._get_other_info(result, field)
59 if value: d[field.key] = value
61 for field in self.PERSON_INFO_FIELDS:
62 value = self._get_person_info(result, field)
63 if value: d[field.key] = value
65 Logger.info(self.get_logging(idx=ctr + 1, text=d))
66 dramas.append(d)
68 self.search_results["dramas"] = dramas