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

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 

7 

8 

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 ] 

16 

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 ] 

27 

28 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None: 

29 super().__init__(soup, params, view) 

30 

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)) 

34 

35 def set_info_data(self) -> None: 

36 self.data["title"] = self._get_title() 

37 

38 if original_title := self._get_original_title(): 

39 self.data["original_title"] = original_title 

40 

41 if synopsis := self._get_synopsis(): 

42 self.data["synopsis"] = synopsis 

43 

44 self.data["rating"] = self._get_rating() 

45 

46 data_mark = self._get_data_mark() 

47 self.data["mark_count"] = data_mark.count 

48 

49 data_clip = self._get_data_clip() 

50 self.data["clip_count"] = data_clip.count 

51 

52 self.data["series_id"] = self.series_id 

53 self.data["season_id"] = self.season_id 

54 self.data["link"] = self._get_link() 

55 

56 if official_site := self._get_official_site(): 

57 self.data["official_site"] = official_site 

58 

59 if poster := self._get_poster(): 

60 self.data["poster"] = poster 

61 

62 if production_year := self._get_production_year(): 

63 self.data["production_year_link"], self.data["production_year"] = production_year 

64 

65 for field in self.OTHER_INFO_FIELDS: 

66 value = self._get_other_info(field) 

67 if value: self.data[field.key] = value 

68 

69 for field in self.PERSON_INFO_FIELDS: 

70 value = self._get_person_info(field) 

71 if value: self.data[field.key] = value 

72 

73 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data)) 

74 

75 def set_review_data(self) -> None: 

76 self.data["title"] = self._get_title() 

77 

78 if original_title := self._get_original_title(): 

79 self.data["original_title"] = original_title 

80 

81 self.data["rating"] = self._get_rating() 

82 

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 

87 

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() 

95 

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)) 

99 

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)) 

104 

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))