Package: bilibili-dynamic
几乎一致的动态样式渲染！一、项目介绍1、介绍形象担当：@禾咕咕2、基本功能本项目实现了将哔哩哔哩返回的数据渲染为类似与B站APP官方的分享图片。
如下图所示：3、环境本项目基于Python3.9.0开发，在其他版本的运行状态未知。本项目使用2021年7月的哔哩哔哩API接口，不保证后续接口与数据结构不会发生变化。4、依赖PackageVersionPillow8.0.1aiohttp3.7.2qrcode6.1pydantic1.7.3pathlib1.0.1matplotlib3.4.0urllib31.25.11fonttools4.24.45、项目结构本项目结构如下：├─ 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在项目根目录执行以下命令bulidpoetry publish --build./dist 中是构建完成的项目，然后执行（3） 所述的方法安装。(3)、使用releases中的版本请您前往releases页面，自行下载后缀名为.whl的文件，并牢记文件名称。然后使用：pip install 下载下来的文件名称2、使用传入 API返回数据中的data下的card或与结构之一样的数据。frombilibili_dynamicimportDynamicRenderimportasyncio# 导入数据示例fromdylistimportdylistRender=DynamicRender.DynamicPictureRendering(path="./tmp")asyncdeftest():forelementindylist:awaitRender.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方法。
渲染源动态内容，原理与总动态基本一致，差别仅在字体颜色和对于头部信息渲染的省略。
这个模块调用了上述除过头部信息以外的三个模块。四、贡献 - 特别感谢 - license1、贡献如果您发现了更好的使用方法，不妨分享出来！你可以使用pr功能提交请求，我会审阅。或者在使用中出现了什么问题，都可以提交issue，或者加入我们的外联群（QQ:781665797）交流。2、特别感谢bilibili-API-collect：非常详细的 B站 api 文档HarukaBot：非常nb的机器人Google Noto Fonts：适用于所有语言的漂亮且免费的字体！unifont：伟大的字体项目3、licenseMIT.