Skip to main content

将哔哩哔哩返回的数据渲染为类似与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、特别感谢

3、license

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

BiliBili_dynamic-0.0.8.tar.gz (25.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

BiliBili_dynamic-0.0.8-py3-none-any.whl (26.1 MB view details)

Uploaded Python 3

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

Hashes for BiliBili_dynamic-0.0.8.tar.gz
Algorithm Hash digest
SHA256 32665ba426a65a8957ebf9bd60da57c579f9bb96989207274e7332bf0a9243c1
MD5 f7124c49240978f0bf2508e04ac2d7d4
BLAKE2b-256 3c37ea7a54d28dcbf255bb7fdb7ea62d2d225f437b1f15b047015092bd4c078a

See more details on using hashes here.

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

Hashes for BiliBili_dynamic-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 b4ef9d2ae3e131fa080f7089aced479ff01bd5ae1c9c54f48ac9cf94e4bd79c4
MD5 9f29da5c6874edb9291f7aa5095be11d
BLAKE2b-256 bc498e54d66e8efa7695de3a9050659f24131951c8a94ae6a3713fa10c695101

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page