Skip to main content

DynamicAdaptor


用于将bilibili的grpc动态和web动态转换成特定的数据类型

原理说明

将grpc数据转换成json数据,之后使用pydantic进行信息摘要。 web端的json数据同理

下载安装

pip install dynamicadaptor

使用方法

import httpx
from dynamicadaptor import format_message, formate_message


# web 返回的数据(同步调用)
def sample():
    url = "https://api.bilibili.com/x/polymer/web-dynamic/v1/detail?timezone_offset=-480&id=746530608345251842"
    headers = {
        "Referer": "https://t.bilibili.com/746530608345251842"
    }
    result = httpx.get(url, headers=headers).json()
    dynamic_formate = format_message(result["data"]["item"])
    print(dynamic_formate)


sample()


# 若你的代码处于异步上下文中,可继续使用向后兼容的异步入口 formate_message:
# async def sample_async():
#     result = httpx.AsyncClient().get(url, headers=headers)
#     dynamic_formate = await formate_message(result["data"]["item"])

数据结构

message
├─message_type: str
├─message_id:str
├─header: Head
|   ├─name: str
|   ├─mid: int
|   ├─face: Optional[str]  
|   ├─pub_time: Optional[str]
|   ├─pub_ts: Optional[int]
|   ├─vip: Optional
|   |   ├─status: Optional[int]
|   |   ├─type: int
|   |   └─vatar_subscript: Optional[int]
|   |
|   ├─pendant: Optional
|   |   ├─pid: Optional[int]
|   |   ├─image: Optional[str]
|   |   └─pendant_name: Optional[str]
|   └─official_verify: Optional
|      └─type: int
├─text: Optional
|   ├─text: Optional
|   ├─topic: Optional
|   |   └─name: str
|   └─rich_text_nodes:Optional[List[RichTextDetail]]
|      ├─type: str
|      ├─text: str
|      ├─orig_text: Optional[str]
|      └─emoji: Optional
|          ├─icon_url: Optional[str]
|          ├─text: Optional[str]
|          └─type: Union[int, str, None]     
|   
├─major: Optional
|   ├─type: str
|   ├─draw: Optional
|   |   └─items: List
|   |       ├─height: int
|   |       ├─width: int
|   |       └─src: str
|   ├─archive: Optional
|   |   ├─cover: str
|   |   ├─title: str
|   |   ├─desc: Optional[str]
|   |   ├─duration_text: str
|   |   └─badge: Optional
|   |       ├─text: Optional[str]
|   |       ├─color: Optional[str]
|   |       └─bg_color: Optional[str] 
|   ├─live_rcmd: Optional
|   |   └─content: Json
|   |       └─live_play_info
|   |           ├─title: str
|   |           ├─cover: str                  
|   |           └─watched_show
|   |               └─text_large:str
|   ├─article: Optional
|   |   ├─cover: List[str]
|   |   ├─title: str
|   |   ├─desc: str
|   |   └─label: str
|   ├─common: Optional
|   |   ├─biz_type: int
|   |   ├─cover: Optional[str]
|   |   ├─desc: Optional[str]
|   |   ├─title: Optional[str]  
|   |   └─badge: Optional
|   |       ├─text: Optional[str]
|   |       ├─color: Optional[str]
|   |       └─bg_color: Optional[str]
|   ├─music: Optional
|   |   ├─cover: str
|   |   ├─label: str
|   |   └─title: str
|   ├─pgc: Optional
|   |   ├─cover: str
|   |   ├─title: str
|   |   ├─badge
|   |   |   ├─text: Optional[str]
|   |   |   ├─color: Optional[str]
|   |   |   └─bg_color: Optional[str]
|   |   └─stat
|   |       ├─danmaku: str
|   |       └─play: str
|   ├─medialist: Optional
|   |   ├─cover: str
|   |   ├─title: str
|   |   ├─sub_title: str
|   |   └─badge
|   |       ├─text: Optional[str]
|   |       ├─color: Optional[str]
|   |       └─bg_color: Optional[str]
|   ├─courses: Optional
|   |   ├─cover: str
|   |   ├─title: str
|   |   ├─desc: str
|   |   ├─sub_title: str
|   |   └─badge
|   |       ├─text: Optional[str]
|   |       ├─color: Optional[str]
|   |       └─bg_color: Optional[str]
|   └─live
|       ├─cover: str
|       ├─title: str
|       ├─desc_first: str
|       ├─desc_second: str
|       └─badge
|           ├─text: Optional[str]
|           ├─color: Optional[str]
|           └─bg_color: Optional[str]
├─additional: Optional
|   ├─type: str
|   ├─goods: Optional
|   |   ├─head_text: str
|   |   └─items: List
|   |       ├─cover: str
|   |       ├─price: str
|   |       └─name: str
|   ├─reserve: Optional
|   |   ├─title: str
|   |   ├─desc1
|   |   |   └─text: str  
|   |   └─desc2
|   |       └─text: str
|   ├─common
|   |   ├─sub_type: str
|   |   ├─head_text: Optional[str]
|   |   ├─cover: str
|   |   ├─desc1: str
|   |   ├─desc2: Optional[str]
|   |   └─title: str
|   ├─ugc
|   |   ├─cover: str
|   |   ├─title: str
|   |   ├─desc_second: str
|   |   ├─duration: str
|   |   └─head_text: Optional[str]
|   └─vote
|       ├─desc: str
|       └─join_num: int
└─forward: Optional
    ├─message_type: str
    ├─message_id:str
    ├─header: Head
    |   ├─name: str
    |   ├─mid: int
    |   ├─face: Optional[str]  
    |   ├─pub_time: Optional[str]
    |   ├─pub_ts: Optional[int]
    |   ├─vip: Optional
    |   |   ├─status: Optional[int]
    |   |   ├─type: int
    |   |   └─vatar_subscript: Optional[int]
    |   |
    |   ├─pendant: Optional
    |   |   ├─pid: Optional[int]
    |   |   ├─image: Optional[str]
    |   |   └─pendant_name: Optional[str]
    |   └─official_verify: Optional
    |      └─type: int
    ├─text: Optional
    |   ├─text: Optional
    |   ├─topic: Optional
    |   |   └─name: str
    |   └─rich_text_nodes:Optional[List[RichTextDetail]]
    |      ├─type: str
    |      ├─text: str
    |      ├─orig_text: Optional[str]
    |      └─emoji: Optional
    |          ├─icon_url: Optional[str]
    |          ├─text: Optional[str]
    |          └─type: Union[int, str, None]     
    |   
    ├─major: Optional
    |   ├─type: str
    |   ├─draw: Optional
    |   |   └─items: List
    |   |       ├─height: int
    |   |       ├─width: int
    |   |       └─src: str
    |   ├─archive: Optional
    |   |   ├─cover: str
    |   |   ├─title: str
    |   |   ├─desc: Optional[str]
    |   |   ├─duration_text: str
    |   |   └─badge: Optional
    |   |       ├─text: Optional[str]
    |   |       ├─color: Optional[str]
    |   |       └─bg_color: Optional[str] 
    |   ├─live_rcmd: Optional
    |   |   └─content: Json
    |   |       └─live_play_info
    |   |           ├─title: str
    |   |           ├─cover: str                  
    |   |           └─watched_show
    |   |               └─text_large:str
    |   ├─article: Optional
    |   |   ├─cover: List[str]
    |   |   ├─title: str
    |   |   ├─desc: str
    |   |   └─label: str
    |   ├─common: Optional
    |   |   ├─biz_type: int
    |   |   ├─cover: Optional[str]
    |   |   ├─desc: Optional[str]
    |   |   ├─title: Optional[str]  
    |   |   └─badge: Optional
    |   |       ├─text: Optional[str]
    |   |       ├─color: Optional[str]
    |   |       └─bg_color: Optional[str]
    |   ├─music: Optional
    |   |   ├─cover: str
    |   |   ├─label: str
    |   |   └─title: str
    |   ├─pgc: Optional
    |   |   ├─cover: str
    |   |   ├─title: str
    |   |   ├─badge
    |   |   |   ├─text: Optional[str]
    |   |   |   ├─color: Optional[str]
    |   |   |   └─bg_color: Optional[str]
    |   |   └─stat
    |   |       ├─danmaku: str
    |   |       └─play: str
    |   ├─medialist: Optional
    |   |   ├─cover: str
    |   |   ├─title: str
    |   |   ├─sub_title: str
    |   |   └─badge
    |   |       ├─text: Optional[str]
    |   |       ├─color: Optional[str]
    |   |       └─bg_color: Optional[str]
    |   ├─courses: Optional
    |   |   ├─cover: str
    |   |   ├─title: str
    |   |   ├─desc: str
    |   |   ├─sub_title: str
    |   |   └─badge
    |   |       ├─text: Optional[str]
    |   |       ├─color: Optional[str]
    |   |       └─bg_color: Optional[str]
    |   └─live
    |       ├─cover: str
    |       ├─title: str
    |       ├─desc_first: str
    |       ├─desc_second: str
    |       └─badge
    |           ├─text: Optional[str]
    |           ├─color: Optional[str]
    |           └─bg_color: Optional[str]
    └─additional: Optional
        ├─type: str
        ├─goods: Optional
        |   ├─head_text: str
        |   └─items: List
        |       ├─cover: str
        |       ├─price: str
        |       └─name: str
        ├─reserve: Optional
        |   ├─title: str
        |   ├─desc1
        |   |   └─text: str  
        |   └─desc2
        |       └─text: str
        ├─common
        |   ├─sub_type: str
        |   ├─head_text: Optional[str]
        |   ├─cover: str
        |   ├─desc1: str
        |   ├─desc2: Optional[str]
        |   └─title: str
        ├─ugc
        |   ├─cover: str
        |   ├─title: str
        |   ├─desc_second: str
        |   ├─duration: str
        |   └─head_text: Optional[str]
        └─vote
            ├─desc: str
            └─join_num: int

License

GPL

Download files

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

Source Distribution

dynamicadaptor-0.6.1.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

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

dynamicadaptor-0.6.1-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file dynamicadaptor-0.6.1.tar.gz.

File metadata

  • Download URL: dynamicadaptor-0.6.1.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.28.0 CPython/3.12.3 Linux/6.8.0-134-generic

File hashes

Hashes for dynamicadaptor-0.6.1.tar.gz
Algorithm Hash digest
SHA256 1612cc245abb512e30756e9d24c317c2e2b402aaa78c1f1ee2eae4ff0ef00382
MD5 8445ed43024b6911ae8050dc2c4d69ed
BLAKE2b-256 c6579bf09d209c69f8e9365bd5d7eda90394a5ae2d129a40a3d75318b1736c0d

See more details on using hashes here.

File details

Details for the file dynamicadaptor-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: dynamicadaptor-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 16.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.28.0 CPython/3.12.3 Linux/6.8.0-134-generic

File hashes

Hashes for dynamicadaptor-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 17ba2d3f48205a79edc2388c234bc6e8e3a680d0d6579fc7e3de5897d579aaef
MD5 661393c13312bb7f66a442da1cc7263a
BLAKE2b-256 1fc79304b898f22601eb4b80cbb527c77acf09a4b03d5b4591353c07a86edfab

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 files

0.6.0

2 files

0.5.5

2 files

0.5.3

2 files

0.5.2

2 files

0.5.0

2 files

0.4.9

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.0

2 files

0.3.9

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.4

2 files

0.2.3

2 files

0.2.1

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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