diff --git a/src/plugins/nonebot_bison/platform/bilibili.py b/src/plugins/nonebot_bison/platform/bilibili.py index f8ac52d..f5acf43 100644 --- a/src/plugins/nonebot_bison/platform/bilibili.py +++ b/src/plugins/nonebot_bison/platform/bilibili.py @@ -231,7 +231,7 @@ class Bilibililive(StatusChange): ) -class BilibiliBangumi(NewMessage): +class BilibiliBangumi(StatusChange): categories = {} platform_name = "bilibili-bangumi" @@ -264,9 +264,10 @@ class BilibiliBangumi(NewMessage): return { "index": res_dict["result"]["media"]["new_ep"]["index"], "index_show": res_dict["result"]["media"]["new_ep"]["index"], + "season_id": res_dict["result"]["media"]["season_id"], } else: - return [] # TODO + raise self.FetchError def compare_status(self, target: Target, old_status, new_status) -> list[RawPost]: if new_status["index"] != old_status["index"]: @@ -275,13 +276,26 @@ class BilibiliBangumi(NewMessage): return [] async def parse(self, raw_post: RawPost) -> Post: - url = "https://live.bilibili.com/{}".format(raw_post["room_id"]) - pic = [raw_post["cover"]] - target_name = raw_post["uname"] - title = raw_post["title"] + async with http_client() as client: + detail_res = await client.get( + f'http://api.bilibili.com/pgc/view/web/season?season_id={raw_post["season_id"]}' + ) + detail_dict = detail_res.json() + lastest_episode = None + for episode in detail_dict["result"]["episodes"][::-1]: + if episode["badge"] in ("", "会员"): + lastest_episode = episode + break + if not lastest_episode: + lastest_episode = detail_dict["result"]["episodes"] + + url = lastest_episode["link"] + pic = [lastest_episode["cover"]] + target_name = detail_dict["result"]["season_title"] + text = lastest_episode["share_copy"] return Post( self.name, - text=title, + text=text, url=url, pics=pic, target_name=target_name, diff --git a/tests/platforms/static/bilibili-gangumi-hanhua0.json b/tests/platforms/static/bilibili-gangumi-hanhua0.json new file mode 100644 index 0000000..8329145 --- /dev/null +++ b/tests/platforms/static/bilibili-gangumi-hanhua0.json @@ -0,0 +1 @@ +{"code":0,"message":"success","result":{"media":{"areas":[{"id":1,"name":"中国大陆"}],"cover":"http://i0.hdslb.com/bfs/bangumi/image/206428990cb5b54f4c114c0b3fcc10d8f5724f7c.jpg","media_id":28235413,"new_ep":{"id":519207,"index":"1","index_show":"更新至第2话"},"season_id":39719,"share_url":"https://www.bilibili.com/bangumi/media/md28235413","title":"汉化日记 第三季","type_name":"国创"}}} diff --git a/tests/platforms/static/bilibili-gangumi-hanhua1-detail.json b/tests/platforms/static/bilibili-gangumi-hanhua1-detail.json new file mode 100644 index 0000000..a8f5066 --- /dev/null +++ b/tests/platforms/static/bilibili-gangumi-hanhua1-detail.json @@ -0,0 +1 @@ +{"code":0,"message":"success","result":{"activity":{"head_bg_url":"","id":0,"title":""},"alias":"","areas":[{"id":1,"name":"中国大陆"}],"bkg_cover":"","cover":"http://i0.hdslb.com/bfs/bangumi/image/206428990cb5b54f4c114c0b3fcc10d8f5724f7c.jpg","episodes":[{"aid":598928582,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1VB4y1C77U","cid":788396456,"cover":"http://i0.hdslb.com/bfs/archive/2438136bdd9d6ffa1ec3f8cfdc8dd92cd19a9e5b.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":786000,"from":"bangumi","id":519206,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep519206","long_title":"人气不行的时候就换个片尾","pub_time":1659240000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》第1话 人气不行的时候就换个片尾","share_url":"https://www.bilibili.com/bangumi/play/ep519206","short_link":"https://b23.tv/ep519206","skip":{"ed":{"end":785,"start":694},"op":{"end":19,"start":0}},"status":2,"subtitle":"已观看734.5万次","title":"1","vid":""},{"aid":386431330,"badge":"预告","badge_info":{"bg_color":"#00C0FF","bg_color_night":"#0B91BE","text":"预告"},"badge_type":1,"bvid":"BV1od4y1m7S2","cid":787606574,"cover":"http://i0.hdslb.com/bfs/archive/ea0a302c954f9dbc3d593e676486396c551529c9.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":28000,"from":"bangumi","id":668350,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep668350","long_title":"什么是战区导弹防御系统工作日","pub_time":1659240000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》第2集预告 ","share_url":"https://www.bilibili.com/bangumi/play/ep668350","short_link":"https://b23.tv/ep668350","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"status":2,"subtitle":"已观看734.5万次","title":"2","vid":""},{"aid":728928222,"badge":"会员","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":"会员"},"badge_type":0,"bvid":"BV16S4y1t7yX","cid":788396289,"cover":"http://i0.hdslb.com/bfs/archive/ea0a302c954f9dbc3d593e676486396c551529c9.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":1000000,"from":"bangumi","id":519207,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep519207","long_title":"什么是战区导弹防御系统工作日","pub_time":1659240000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》第2话 什么是战区导弹防御系统工作日","share_url":"https://www.bilibili.com/bangumi/play/ep519207","short_link":"https://b23.tv/ep519207","skip":{"ed":{"end":964,"start":880},"op":{"end":100,"start":0}},"status":13,"subtitle":"已观看734.5万次","title":"2","vid":""},{"aid":471469401,"badge":"预告","badge_info":{"bg_color":"#00C0FF","bg_color_night":"#0B91BE","text":"预告"},"badge_type":1,"bvid":"BV1dT411j7HZ","cid":787606626,"cover":"http://i0.hdslb.com/bfs/archive/b8157629018e9bb31be09b6f1d4696d742e1f65e.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":29000,"from":"bangumi","id":668353,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep668353","long_title":"","pub_time":1659240000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》第3集预告 ","share_url":"https://www.bilibili.com/bangumi/play/ep668353","short_link":"https://b23.tv/ep668353","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"status":2,"subtitle":"已观看734.5万次","title":"3","vid":""}],"evaluate":"苏莫婷是一个带着“神妖之子”身份的社畜女青年,在被父母以“独立自强”为理由请出家门后,遇到了同样流落人间的二货帅气小萌神——天机星以及神秘沉稳酷猫妖——地魁。在土地的主导下,三人结成救世组合,开始上演搞笑而又扎心的无厘头日常。","freya":{"bubble_desc":"","bubble_show_cnt":0,"icon_show":1},"jp_title":"","link":"bilibili://pgc/media/28235413","media_id":28235413,"mode":2,"new_ep":{"desc":"连载中, 每周日 12:00更新","id":519207,"is_new":0,"title":"2"},"payment":{"discount":100,"pay_type":{"allow_discount":0,"allow_pack":0,"allow_ticket":0,"allow_time_limit":0,"allow_vip_discount":0,"forbid_bb":0},"price":"0.0","promotion":"","tip":"大会员专享观看特权哦~","view_start_time":0,"vip_discount":100,"vip_first_promotion":"","vip_promotion":"成为大会员抢先看"},"positive":{"id":62584,"title":"正片"},"publish":{"is_finish":0,"is_started":1,"pub_time":"2022-07-31 12:00:00","pub_time_show":"07月31日12:00","unknow_pub_date":0,"weekday":0},"record":"","rights":{"allow_bp":0,"allow_bp_rank":0,"allow_download":0,"allow_review":0,"area_limit":316,"ban_area_show":1,"can_watch":1,"copyright":"dujia","forbid_pre":0,"freya_white":0,"is_cover_show":0,"is_preview":1,"only_vip_download":0,"resource":"","watch_platform":0},"season_id":39719,"season_title":"汉化日记 第三季","seasons":[{"badge":"出品","badge_info":{"bg_color":"#00C0FF","bg_color_night":"#0B91BE","text":"出品"},"badge_type":1,"cover":"http://i0.hdslb.com/bfs/bangumi/2aec3712f01aeadaa45bc4796f3145eda3cf3bf5.jpg","horizontal_cover_1610":"","horizontal_cover_169":"","media_id":4314622,"new_ep":{"cover":"http://i0.hdslb.com/bfs/archive/18478d4717e5248b5f858b32e63af7ba21289f59.jpg","id":282930,"index_show":"全12话"},"season_id":26228,"season_title":"第一季","season_type":4,"stat":{"favorites":2104990,"series_follow":2665125,"views":81055076}},{"badge":"出品","badge_info":{"bg_color":"#00C0FF","bg_color_night":"#0B91BE","text":"出品"},"badge_type":1,"cover":"http://i0.hdslb.com/bfs/bangumi/image/9c8a87bdc83d0db7909300099b911beff5e1e543.jpg","horizontal_cover_1610":"","horizontal_cover_169":"","media_id":28229502,"new_ep":{"cover":"http://i0.hdslb.com/bfs/archive/bd622a03a4579992c2ead021f4143785e28a7a73.jpg","id":350333,"index_show":"全12话"},"season_id":34062,"season_title":"第二季","season_type":4,"stat":{"favorites":1971918,"series_follow":2665125,"views":53387854}},{"badge":"出品","badge_info":{"bg_color":"#00C0FF","bg_color_night":"#0B91BE","text":"出品"},"badge_type":1,"cover":"http://i0.hdslb.com/bfs/bangumi/image/206428990cb5b54f4c114c0b3fcc10d8f5724f7c.jpg","horizontal_cover_1610":"http://i0.hdslb.com/bfs/bangumi/image/713750c464ad375426e857b1e13b7794977bad7a.jpg","horizontal_cover_169":"http://i0.hdslb.com/bfs/bangumi/image/787de9344675fffe2512d1d23ca77b386c327e3b.jpg","media_id":28235413,"new_ep":{"cover":"http://i0.hdslb.com/bfs/archive/ea0a302c954f9dbc3d593e676486396c551529c9.jpg","id":519207,"index_show":"更新至第2话"},"season_id":39719,"season_title":"第三季","season_type":4,"stat":{"favorites":2405164,"series_follow":2665125,"views":7344742}}],"section":[{"attr":0,"episode_id":0,"episode_ids":[],"episodes":[{"aid":599112425,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1zB4y1r74K","cid":790321856,"cover":"http://i0.hdslb.com/bfs/archive/458e89803160d2eec922bf1505c751132fc89792.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":83000,"from":"bangumi","id":668793,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep668793","long_title":"《该热血了》","pub_time":1659337893,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》主题曲 《该热血了》","share_url":"https://www.bilibili.com/bangumi/play/ep668793","short_link":"https://b23.tv/ep668793","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"stat":{"coin":810,"danmakus":167,"likes":7918,"play":83688,"reply":274},"status":2,"subtitle":"已观看734.5万次","title":"主题曲","vid":""},{"aid":427869876,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1qG411s7vy","cid":757167930,"cover":"http://i0.hdslb.com/bfs/archive/ec25bb11b1fafe4e03aed978d470dc87281be60a.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":70000,"from":"bangumi","id":518947,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep518947","long_title":"7月31日开播 接下来自平行宇宙的挑战吧!","pub_time":1656216000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》定档PV 7月31日开播 接下来自平行宇宙的挑战吧!","share_url":"https://www.bilibili.com/bangumi/play/ep518947","short_link":"https://b23.tv/ep518947","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"stat":{"coin":3328,"danmakus":1103,"likes":22852,"play":661759,"reply":1779},"status":2,"subtitle":"已观看734.5万次","title":"定档PV","vid":""},{"aid":896632218,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1CA4y1f77T","cid":723830178,"cover":"http://i0.hdslb.com/bfs/archive/c3e429c99e223dbb430438c2611dfd3a76fa4180.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":87000,"from":"bangumi","id":511778,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep511778","long_title":"我们真的已经在做了!","pub_time":1653012000,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》先导PV 我们真的已经在做了!","share_url":"https://www.bilibili.com/bangumi/play/ep511778","short_link":"https://b23.tv/ep511778","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"stat":{"coin":3096,"danmakus":433,"likes":19987,"play":500465,"reply":1954},"status":2,"subtitle":"已观看734.5万次","title":"先导PV","vid":""},{"aid":549179122,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1Dq4y137Hy","cid":443872982,"cover":"http://i0.hdslb.com/bfs/archive/42f025a29c8aae4c93000480268d3bc508a674ef.png","dimension":{"height":1080,"rotate":0,"width":1920},"duration":97000,"from":"bangumi","id":431179,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep431179","long_title":"再次开启无厘头爆笑日常!","pub_time":1637413392,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》PV1 再次开启无厘头爆笑日常!","share_url":"https://www.bilibili.com/bangumi/play/ep431179","short_link":"https://b23.tv/ep431179","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"stat":{"coin":13469,"danmakus":2892,"likes":44175,"play":2084102,"reply":3554},"status":2,"subtitle":"已观看734.5万次","title":"PV1","vid":""},{"aid":643767981,"badge":"","badge_info":{"bg_color":"#FB7299","bg_color_night":"#BB5B76","text":""},"badge_type":0,"bvid":"BV1CY4y1j73S","cid":785989258,"cover":"http://i0.hdslb.com/bfs/archive/e44dc610357099b2b095ec0dc245808744e49ba5.jpg","dimension":{"height":1080,"rotate":0,"width":1920},"duration":29000,"from":"bangumi","id":664380,"is_view_hide":false,"link":"https://www.bilibili.com/bangumi/play/ep664380","long_title":"","pub_time":1659153600,"pv":0,"release_date":"","rights":{"allow_demand":0,"allow_dm":1,"allow_download":1,"area_limit":0},"share_copy":"《汉化日记 第三季》第1集预告 ","share_url":"https://www.bilibili.com/bangumi/play/ep664380","short_link":"https://b23.tv/ep664380","skip":{"ed":{"end":0,"start":0},"op":{"end":0,"start":0}},"stat":{"coin":1004,"danmakus":430,"likes":10149,"play":207046,"reply":1163},"status":2,"subtitle":"已观看734.5万次","title":"第1集预告","vid":""}],"id":62596,"title":"PV花絮","type":1}],"series":{"series_id":4252,"series_title":"汉化日记"},"share_copy":"《汉化日记 第三季》爆笑日常再次开启","share_sub_title":"爆笑日常再次开启","share_url":"https://www.bilibili.com/bangumi/play/ss39719","show":{"wide_screen":0},"show_season_type":4,"square_cover":"http://i0.hdslb.com/bfs/bangumi/image/72b2a4d9e09d26571eaaad94e1dd13109f76adb0.jpg","stat":{"coins":60604,"danmakus":36012,"favorite":11413,"favorites":2405163,"likes":200205,"reply":14835,"share":12514,"views":7344742},"status":13,"subtitle":"已观看734.5万次","title":"汉化日记 第三季","total":12,"type":4,"up_info":{"avatar":"http://i2.hdslb.com/bfs/face/38fbf0a10f7fb0e8910be0e662b05bcb0aed830c.jpg","avatar_subscript_url":"","follower":4287201,"is_follow":0,"mid":98627270,"nickname_color":"#FB7299","pendant":{"image":"http://i2.hdslb.com/bfs/garb/item/4ab1a5a6e07a99e649cde625c06eeb1c15585156.png","name":"罗小黑战记","pid":5108},"theme_type":0,"uname":"哔哩哔哩国创","verify_type":3,"vip_label":{"bg_color":"#FB7299","bg_style":1,"border_color":"","text":"十年大会员","text_color":"#FFFFFF"},"vip_status":1,"vip_type":2},"user_status":{"area_limit":0,"ban_area_show":0,"follow":0,"follow_status":0,"login":0,"pay":0,"pay_pack_paid":0,"sponsor":0}}} \ No newline at end of file diff --git a/tests/platforms/static/bilibili-gangumi-hanhua1.json b/tests/platforms/static/bilibili-gangumi-hanhua1.json new file mode 100644 index 0000000..d0cf6a6 --- /dev/null +++ b/tests/platforms/static/bilibili-gangumi-hanhua1.json @@ -0,0 +1 @@ +{"code":0,"message":"success","result":{"media":{"areas":[{"id":1,"name":"中国大陆"}],"cover":"http://i0.hdslb.com/bfs/bangumi/image/206428990cb5b54f4c114c0b3fcc10d8f5724f7c.jpg","media_id":28235413,"new_ep":{"id":519207,"index":"2","index_show":"更新至第2话"},"season_id":39719,"share_url":"https://www.bilibili.com/bangumi/media/md28235413","title":"汉化日记 第三季","type_name":"国创"}}} \ No newline at end of file diff --git a/tests/platforms/test_bilibili_bangumi.py b/tests/platforms/test_bilibili_bangumi.py new file mode 100644 index 0000000..39c5106 --- /dev/null +++ b/tests/platforms/test_bilibili_bangumi.py @@ -0,0 +1,62 @@ +import typing + +import pytest +import respx +from httpx import Response +from nonebug.app import App + +from .utils import get_json + +if typing.TYPE_CHECKING: + from nonebot_bison.platform.bilibili import BilibiliBangumi + + +@pytest.fixture +def bili_bangumi(app: App): + from nonebot_bison.platform import platform_manager + + return platform_manager["bilibili-bangumi"] + + +@pytest.mark.asyncio +@respx.mock +async def test_fetch_bilibili_bangumi_status( + bili_bangumi: "BilibiliBangumi", dummy_user_subinfo +): + from nonebot_bison.types import Target + + bili_bangumi_router = respx.get( + "https://api.bilibili.com/pgc/review/user?media_id=28235413" + ) + bili_bangumi_detail_router = respx.get( + "http://api.bilibili.com/pgc/view/web/season?season_id=39719" + ) + bili_bangumi_router.mock( + return_value=Response(200, json=get_json("bilibili-gangumi-hanhua0.json")) + ) + target = Target("28235413") + res = await bili_bangumi.fetch_new_post(target, [dummy_user_subinfo]) + assert len(res) == 0 + + res = await bili_bangumi.fetch_new_post(target, [dummy_user_subinfo]) + assert len(res) == 0 + + bili_bangumi_router.mock( + return_value=Response(200, json=get_json("bilibili-gangumi-hanhua1.json")) + ) + bili_bangumi_detail_router.mock( + return_value=Response( + 200, json=get_json("bilibili-gangumi-hanhua1-detail.json") + ) + ) + res2 = await bili_bangumi.fetch_new_post(target, [dummy_user_subinfo]) + + post = res2[0][1][0] + assert post.target_type == "Bilibili剧集" + assert post.text == "《汉化日记 第三季》第2话 什么是战区导弹防御系统工作日" + assert post.url == "https://www.bilibili.com/bangumi/play/ep519207" + assert post.target_name == "汉化日记 第三季" + assert post.pics == [ + "http://i0.hdslb.com/bfs/archive/ea0a302c954f9dbc3d593e676486396c551529c9.jpg" + ] + assert post.compress == True diff --git a/tests/platforms/test_bilibili_live.py b/tests/platforms/test_bilibili_live.py index 53885ef..eb7cbb6 100644 --- a/tests/platforms/test_bilibili_live.py +++ b/tests/platforms/test_bilibili_live.py @@ -1,13 +1,9 @@ -from datetime import datetime - -import feedparser import pytest import respx from httpx import Response from nonebug.app import App -from pytz import timezone -from .utils import get_file, get_json +from .utils import get_json @pytest.fixture