def save_bangumi(data: WebsiteBangumi) -> None: """save bangumi to database""" b, obj_created = Bangumi.get_or_create(keyword=data.keyword, defaults=data.dict()) if not obj_created: should_save = False if data.cover and b.cover != data.cover: b.cover = data.cover should_save = True if data.update_time != "Unknown" and data.update_time != b.update_time: b.update_time = data.update_time should_save = True subtitle_group = Bangumi( subtitle_group=data.subtitle_group).subtitle_group if b.status != STATUS_UPDATING or b.subtitle_group != subtitle_group: b.status = STATUS_UPDATING b.subtitle_group = subtitle_group should_save = True if should_save: b.save() for subtitle_group in data.subtitle_group: (Subtitle.insert({ Subtitle.id: str(subtitle_group.id), Subtitle.name: str(subtitle_group.name), }).on_conflict_replace()).execute()
def get_models(self) -> List[WebsiteBangumi]: m = [] for s in self.scripts: model = s.Model() m.append( WebsiteBangumi( name=model.bangumi_name, update_time=model.update_time, keyword=model.bangumi_name, cover=model.cover, )) return m
def get_models(self) -> List[WebsiteBangumi]: m = [] for s in self.scripts: d = dict(s.Model()) m.append( WebsiteBangumi( name=d["bangumi_name"], update_time=d["update_time"], keyword=d["bangumi_name"], cover=d["cover"], )) return m
def fetch_single_bangumi( self, bangumi_id: str, subtitle_list: Optional[List[str]] = None, max_page: int = 0, ) -> Optional[WebsiteBangumi]: html = get_text(server_root + f"Home/Bangumi/{bangumi_id}") info = self.parse_bangumi_details_page(html) return WebsiteBangumi( name=info["name"], keyword=bangumi_id, status=info["status"], update_time=info["update_time"], subtitle_group=info["subtitle_group"], episodes=parse_episodes(html, bangumi_id, subtitle_list), )
def parser_day_bangumi(soup) -> List[WebsiteBangumi]: """ :param soup: :type soup: bs4.Tag """ li = [] for soup in soup.find_all("li"): url = soup.select_one("a") span = soup.find("span") if url: name = url["title"] url = url["href"] bangumi_id = url.split("/")[-1] soup.find("li") li.append( WebsiteBangumi(name=name, keyword=bangumi_id, cover=_COVER_URL + span["data-src"])) return li
def parse_bangumi_with_week_days( content, update_time, array_name ) -> List[WebsiteBangumi]: r = re.compile( array_name + "\\.push\\(\\['(.*?)','(.*?)','(.*?)','(.*?)','(.*?)'\\]\\)" ) ret = r.findall(content) bangumi_list = [] for bangumi_row in ret: (cover_url, name, keyword, subtitle_raw, _) = bangumi_row bangumi = WebsiteBangumi(keyword=keyword) cover = re.findall("(/images/.*)$", cover_url)[0] bs = BeautifulSoup(subtitle_raw, "html.parser") a_list = bs.find_all("a") for a in a_list: subtitle_group_name = a.get_text(strip=True) subtitle_group_id_raw = re.findall("team_id%3A(.+)$", a["href"]) if (len(subtitle_group_id_raw) == 0) or subtitle_group_name == "": continue subtitle_group_id = subtitle_group_id_raw[0] bangumi.subtitle_group.append( SubtitleGroup(id=subtitle_group_id, name=subtitle_group_name) ) bangumi.name = name bangumi.update_time = update_time bangumi.keyword = keyword bangumi.cover = SHARE_DMHY_URL + cover # append to bangumi_list bangumi_list.append(bangumi) return bangumi_list
def fetch_bangumi_calendar(self) -> List[WebsiteBangumi]: response = get_response(FETCH_URL) if not response: return [] bangumi_result = parser_bangumi(response) return [WebsiteBangumi(**x) for x in bangumi_result]