Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/bilibili/bilibili.py

68 lines
2.2 KiB
Python
Raw Normal View History

2023-07-02 06:25:49 +00:00
from datetime import datetime
from core.builtins import Bot
from core.builtins import Image, Plain, ErrorMessage
from core.utils.http import get_url
2023-07-02 06:46:55 +00:00
async def get_info(msg: Bot.MessageSession, url, get_detail=False):
2023-07-02 06:25:49 +00:00
try:
2023-07-02 06:46:55 +00:00
res = await get_url(url, 200, fmt='json')
2023-07-02 06:25:49 +00:00
except ValueError as e:
if str(e).startswith('404'):
await msg.finish(msg.locale.t("bilibili.message.error"))
else:
2023-07-02 06:37:49 +00:00
await msg.finish(ErrorMessage(str(e)))
2023-07-02 06:25:49 +00:00
2023-07-02 06:57:49 +00:00
view = res["data"]["View"]
stat = view["stat"]
2023-07-02 06:25:49 +00:00
2023-07-02 06:57:49 +00:00
pic = view["pic"]
video_url = f'https://www.bilibili.com/video/{view["bvid"]}'
title = view["title"]
tname = view["tname"]
2023-07-02 06:25:49 +00:00
2023-07-02 06:57:49 +00:00
timestamp = view["ctime"]
2023-07-02 06:25:49 +00:00
dt_object = datetime.fromtimestamp(timestamp)
time = dt_object.strftime('%Y-%m-%d %H:%M:%S')
2023-07-02 06:57:49 +00:00
if len(view["pages"]) > 1:
pages = f' ({len(view["pages"])} P)'
2023-07-02 06:25:49 +00:00
else:
pages = ''
2023-07-02 06:57:49 +00:00
stat_view = format_num(stat["view"])
stat_danmaku = format_num(stat["danmaku"])
stat_reply = format_num(stat["reply"])
stat_favorite = format_num(stat["favorite"])
stat_coin = format_num(stat["coin"])
stat_share = format_num(stat["share"])
stat_like = format_num(stat["like"])
2023-07-02 06:25:49 +00:00
2023-07-02 06:57:49 +00:00
owner = view["owner"]["name"]
fans = format_num(res["data"]["Card"]["card"]["fans"])
2023-07-02 06:25:49 +00:00
if get_detail:
2023-07-02 06:57:49 +00:00
output = video_url + msg.locale.t("bilibili.message", title=title, tname=tname, owner=owner, time=time)
2023-07-02 06:25:49 +00:00
else:
2023-07-02 06:57:49 +00:00
output = video_url + msg.locale.t("bilibili.message.detail", title=title, pages=pages, tname=tname,
2023-07-02 06:25:49 +00:00
owner=owner, fans=fans, view=stat_view, danmaku=stat_danmaku, reply=stat_reply,
like=stat_like, coin=stat_coin, favorite=stat_favorite, share=stat_share)
2023-07-02 06:46:55 +00:00
await msg.finish([Image(pic), Plain(output)])
2023-07-02 06:25:49 +00:00
2023-07-02 06:37:49 +00:00
def format_num(number):
2023-07-02 06:25:49 +00:00
if number >= 1000000000:
return f'{number/1000000000:.1f}B'
elif number >= 1000000:
return f'{number/1000000:.1f}M'
elif number >= 1000:
return f'{number/1000:.1f}k'
else:
return str(number)