diff --git a/src/plugins/hk_reporter/platform/arkninghts.py b/src/plugins/hk_reporter/platform/arkninghts.py index 53a8612..5f16180 100644 --- a/src/plugins/hk_reporter/platform/arkninghts.py +++ b/src/plugins/hk_reporter/platform/arkninghts.py @@ -1,3 +1,5 @@ +from _typeshed import NoneType +from typing import Any import httpx import json import time @@ -6,10 +8,14 @@ from bs4 import BeautifulSoup as bs from datetime import datetime from nonebot import logger +from ..types import Category, RawPost, Tag, Target + +from .platform import PlatformNoTarget, CategoryNotSupport + from ..utils import Singleton, Render from ..post import Post -class Arknights(metaclass=Singleton): +class Arknights_(metaclass=Singleton): def __init__(self): self.exists_posts = defaultdict(set) @@ -65,3 +71,41 @@ class Arknights(metaclass=Singleton): logger.warning("network connection error: {}, url: {}".format(type(err), err.request.url)) return [] +class Arknights(PlatformNoTarget): + + categories = {} + platform_name = 'arknights' + enable_tag = False + + @staticmethod + async def get_account_name() -> str: + return '明日方舟游戏内公告' + + async def get_sub_list(self) -> list[RawPost]: + async with httpx.AsyncClient() as client: + raw_data = await client.get('http://ak-fs.hypergryph.com/announce/IOS/announcement.meta.json') + return json.loads(raw_data.text)['announceList'] + + def get_id(self, post: RawPost) -> Any: + return post['announceId'] + + def get_date(self, post: RawPost) -> None: + return None + + async def parse(self, raw_post: RawPost) -> Post: + announce_url = raw_post['webUrl'] + async with httpx.AsyncClient() as client: + raw_html = await client.get(announce_url) + soup = bs(raw_html, 'html.parser') + pics = [] + if soup.find("div", class_="standerd-container"): + # 图文 + render = Render() + viewport = {'width': 320, 'height': 6400, 'deviceScaleFactor': 3} + pic_data = await render.render(announce_url, viewport=viewport, target='div.main') + pics.append('base64://{}'.format(pic_data)) + elif (pic := soup.find('img', class_='banner-image')): + pics.append(pic['src']) + else: + raise CategoryNotSupport() + return Post('arknights', '', announce_url, pics=pics) diff --git a/src/plugins/hk_reporter/platform/utils.py b/src/plugins/hk_reporter/platform/utils.py index 53449d5..f150997 100644 --- a/src/plugins/hk_reporter/platform/utils.py +++ b/src/plugins/hk_reporter/platform/utils.py @@ -2,6 +2,7 @@ import nonebot from nonebot import logger from collections import defaultdict from typing import Type +from .arkninghts import Arknights from .weibo import Weibo from .bilibili import Bilibili from .rss import Rss @@ -16,7 +17,8 @@ async def check_sub_target(target_type, target): platform_manager: dict[str, PlatformProto] = { 'bilibili': Bilibili(), 'weibo': Weibo(), - 'rss': Rss() + 'rss': Rss(), + 'arknights': Arknights() } async def fetch_and_send(target_type: str):