Esempio n. 1
0
    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()
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
File: mikan.py Progetto: scjtqs/BGmi
 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),
     )
Esempio n. 5
0
File: mikan.py Progetto: scjtqs/BGmi
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
Esempio n. 6
0
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
Esempio n. 7
0
 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]