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

65 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
2023-09-03 08:50:12 +00:00
from core.builtins import Image, Plain
2023-07-02 06:25:49 +00:00
from core.utils.http import get_url
2023-07-02 07:34:12 +00:00
async def get_info(msg: Bot.MessageSession, url, get_detail):
res = await get_url(url, 200, fmt='json')
2023-07-02 07:49:03 +00:00
if res['code'] != 0:
2023-08-28 15:41:59 +00:00
if res['code'] == -400:
2023-08-28 15:42:25 +00:00
await msg.finish(msg.locale.t("bilibili.message.error.invalid"))
2023-07-02 07:49:03 +00:00
else:
2023-08-28 15:42:25 +00:00
await msg.finish(msg.locale.t('bilibili.message.not_found'))
2023-09-03 08:50:12 +00:00
2023-07-02 07:34:12 +00:00
view = res['data']['View']
stat = view['stat']
2023-09-03 08:50:12 +00:00
2023-07-02 07:34:12 +00:00
pic = view['pic']
2023-07-02 07:56:33 +00:00
video_url = f"https://www.bilibili.com/video/{view['bvid']}\n"
2023-07-02 07:34:12 +00:00
title = view['title']
tname = view['tname']
2023-07-02 06:25:49 +00:00
2023-07-02 07:34:12 +00:00
timestamp = view['ctime']
timeobject = datetime.fromtimestamp(timestamp)
time = timeobject.strftime('%Y-%m-%d %H:%M:%S')
2023-07-02 06:25:49 +00:00
2023-07-02 07:34:12 +00:00
if len(view['pages']) > 1:
2023-07-02 09:31:42 +00:00
pages = f" ({len(view['pages'])}P)"
2023-07-02 06:25:49 +00:00
else:
pages = ''
2023-07-02 07:34:12 +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 07:34:12 +00:00
owner = view['owner']['name']
fans = format_num(res['data']['Card']['card']['fans'])
2023-07-02 06:25:49 +00:00
2023-07-02 07:52:03 +00:00
if not 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-09-03 08:50:12 +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,
time=time)
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:
2023-09-03 08:50:12 +00:00
return f'{number / 1000000000:.1f}G'
2023-07-02 06:25:49 +00:00
elif number >= 1000000:
2023-09-03 08:50:12 +00:00
return f'{number / 1000000:.1f}M'
2023-07-02 06:25:49 +00:00
elif number >= 1000:
2023-09-03 08:50:12 +00:00
return f'{number / 1000:.1f}k'
2023-07-02 06:25:49 +00:00
else:
2023-07-02 07:56:33 +00:00
return str(number)