将哔哩哔哩返回的数据渲染为类似与B站APP官方的分享图片
Project description
几乎一致的动态样式渲染!
一、项目介绍
1、介绍
形象担当:@禾咕咕
2、基本功能
本项目实现了将哔哩哔哩返回的数据渲染为类似与B站APP官方的分享图片。 如下图所示:
3、环境
本项目基于Python3.9.0开发,在其他版本的运行状态未知。本项目使用2021年7月的哔哩哔哩API接口,不保证后续接口与数据结构不会发生变化。
4、依赖
| Package | Version |
|---|---|
| Pillow | 8.0.1 |
| aiohttp | 3.7.2 |
| qrcode | 6.1 |
| pydantic | 1.7.3 |
| pathlib | 1.0.1 |
| matplotlib | 3.4.0 |
| urllib3 | 1.25.11 |
| fonttools | 4.24.4 |
5、项目结构
本项目结构如下:
├─ bilibili_dynamic
│ │
│ │ DynamicRender.py 主要的程序文件
│ │ format.py 进行数据验证的程序文件
│ │ initialize.py 进行初始化的程序文件
│ │ network.py 进行网络通信的程序文件
│ │ textTools.py 进行渲染的部分文字工具
│ │ __init__.py __init__.py
│ │ _version.py 版本信息
│ ├─ typeface 字体文件夹
│ │ │ Unifont.ttf Unifont字体
│ │ │ CODE2000.ttf CODE2000字体
│ │ │ NotoColorEmoji.ttf Noto emoji字体
│ │ │ NotoSansCJKsc-Regular.otf 思源黑体
│ │ │ NONT LICENSE Noto字体 LICENSE
│ │ ├─ reserve 后备字体
│ │
│ ├─ element 图片组件文件夹
│
│ README.md 自述文件
│ LICENSE LICENSE
│ test.py 示例
6、交流
外联群QQ:781665797
二、使用
1、安装
(1)、pip安装(推荐)
您可以使用pip快速的安装
pip install bilibili-dynamic
目前 pip 源中的0.0.7版本存在问题。请根据(3)、使用releases中的版本 安装 我们会在0.0.8修复
(2)、自行构建
- 克隆仓库中的代码。
- 您可以使用
poetry工具,如果您没有,可以执行下列pip 命令。
pip install poetry
- 在项目根目录执行以下命令bulid
poetry publish --build
- ./dist 中是构建完成的项目,然后执行(3) 所述的方法安装。
(3)、使用releases中的版本
请您前往releases页面,自行下载后缀名为.whl的文件,并牢记文件名称。然后使用:
pip install 下载下来的文件名称
2、使用
- 传入 API返回数据中的
data下的card或与结构之一样的数据。
from bilibili_dynamic import DynamicRender
import asyncio
# 导入数据示例
from dylist import dylist
Render = DynamicRender.DynamicPictureRendering(path="./tmp")
async def test():
for element in dylist:
await Render.ReneringManage(element)
# 您可以在实例化的类中的 ReprenderIMG 获得图片对象
Render.ReprenderIMG.show()
break
# 运行协程函数需要在事件循环中运行
loop = asyncio.get_event_loop()
loop.run_until_complete(test())
注意: 这个写法只适用于
0.0.7(含)以上的版本。
我们在
test.py中准备了一个小示例,您可以参考其使用。
三、如何工作
我们将动态的渲染分为五大部分,每部分独立渲染:
头部信息、文字部分、功能块(图片动态的图片、视频的视频等)、附加卡片(相关游戏、直播预约等)、转发信息(转发内容)
每部分根据动态的内容渲染,如果没有该部分则不渲染。
每个模块渲染是异步的,其关系您可以根据下图理解:
此图仅供参考,在使用过程中有诸多因素会影响渲染的流程。
附加卡片通常不会下载图片,除了卡片展示游戏相关时。
转发信息就是将上述流程嵌套了一次,只是不渲染头部信息,其余基本一致,故不赘述。
1、头部信息
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的headRendering方法。
如项目介绍图片当中的一致,本模块实现了将头像、挂件缓存与渲染,同时本模块可以对该动态发布的时间、账号是否大会员、认证账号进行详细的渲染。
2、文字部分
该部分是本项目的核心模块,主要实现了将动态文字进行富文本化。实现是在DynamicRender.py中的DynamicPictureRendering类中的NGSSTrcker方法。
为了方便您更好对这个理解这个模块的运作方式,下图介绍了该模块的工作细节:
NGSS识别了特殊文本的样式,和在字符串中的位置,是后续文本处理的指导性数据。RenderList包含了以特殊文本为分隔符的所有文本信息。rl包含了以字符为单位的文本渲染信息。pl包含了以bilibili表情包为单位的渲染信息。tl包含了以特殊功能图片的渲染信息,如动态抽奖前的小礼物,投票的柱状图,网页链接的链接图标。
3、功能块
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的FunctionBlock方法。
它实现了渲染九宫格与专栏封面,视频封面,与直播封面。
4、附加卡片
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的AddCard方法。
它实现了渲染投票,视频预约,直播预约,游戏信息等。
5、转发信息
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的Reprender方法。
渲染源动态内容,原理与总动态基本一致,差别仅在字体颜色和对于头部信息渲染的省略。
这个模块调用了上述除过头部信息以外的三个模块。
四、贡献 - 特别感谢 - license
1、贡献
如果您发现了更好的使用方法,不妨分享出来!你可以使用pr功能提交请求,我会审阅。或者在使用中出现了什么问题,都可以提交issue,或者加入我们的外联群(QQ:781665797)交流。
2、特别感谢
bilibili-API-collect:非常详细的 B站 api 文档HarukaBot:非常nb的机器人Google Noto Fonts:适用于所有语言的漂亮且免费的字体!unifont:伟大的字体项目
3、license
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file BiliBili_dynamic-0.0.8.tar.gz.
File metadata
- Download URL: BiliBili_dynamic-0.0.8.tar.gz
- Upload date:
- Size: 25.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32665ba426a65a8957ebf9bd60da57c579f9bb96989207274e7332bf0a9243c1
|
|
| MD5 |
f7124c49240978f0bf2508e04ac2d7d4
|
|
| BLAKE2b-256 |
3c37ea7a54d28dcbf255bb7fdb7ea62d2d225f437b1f15b047015092bd4c078a
|
File details
Details for the file BiliBili_dynamic-0.0.8-py3-none-any.whl.
File metadata
- Download URL: BiliBili_dynamic-0.0.8-py3-none-any.whl
- Upload date:
- Size: 26.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4ef9d2ae3e131fa080f7089aced479ff01bd5ae1c9c54f48ac9cf94e4bd79c4
|
|
| MD5 |
9f29da5c6874edb9291f7aa5095be11d
|
|
| BLAKE2b-256 |
bc498e54d66e8efa7695de3a9050659f24131951c8a94ae6a3713fa10c695101
|