当前位置:网站首页>Analyse du format protobuf du rideau en temps réel et du rideau historique de la station B
Analyse du format protobuf du rideau en temps réel et du rideau historique de la station B
2022-07-06 15:59:00 【Attrapez le voleur, attrapez le roi en premier.】
RÉFÉRENCES:
- https://zhuanlan.zhihu.com/p/392931611
- https://gitee.com/nbody1996/bilibili-API-collect/blob/master/danmaku/danmaku_proto.md
- Bilibili Rideau d'histoire:https://www.cnblogs.com/mollnn/p/14964905.html
bLe format de transmission du rideau de station est transmis par xml A la place protobuf,Ce format est une transmission codée binaire,Les ventes de transport sont beaucoup plus élevées xml,Par conséquent, il est avantageux de réduire la pression du réseau sur l'extrémité mobile..Mais l'un des problèmes est,Ce format est très difficile à analyser,Généralement à partir de api Les données obtenues sont directement codées.,Il faut des moyens spécifiques pour voir le vrai contenu,Ça fait mal à la tête.
B Station non utilisée protobuf Interface pop - up avant le Protocole
1、Qu'est - ce que Protobuf
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
Ce passage vient de Google Protobuf Introduction au site officiel,C'est simplement un Protocole de transmission,Que xml Plus petit、Plus vite.、Plus simple.,Pour plus d'informations, voir:https://developers.google.com/protocol-buffers/
2、Comment analyser Protobuf Le rideau
2.1 Télécharger Protoc Compilateur
Protoc Est utilisé pour .proto Les fichiers sont compilés dans différents langages de programmation(Par exemple: Python、Golang Attendez.)Compilateur pour,Oui. Protobuf Conditions nécessaires à l'analyse,Disponible en téléchargement sur le lien ci - dessous:https://github.com/protocolbuffers/protobuf


Une fois le téléchargement terminé, décompresser est exe Documentation,Aucune installation requise,Mais doit être ajouté manuellement à Path Moyenne.

Déterminer si l'installation a été réussie en exécutant le code suivant dans le terminal:protoc --version

2.2 Télécharger Protobuf-Python Afin de Python Résolution moyenne Protobuf
Télécharger l'adresse:https://github.com/protocolbuffers/protobuf
Décompresser une fois le téléchargement terminé,Puis entrez python Entrée dans le Répertoire,

Exécutez le Code de ligne de commande suivant:
python setup.py clean
python setup.py build
python setup.py install
python setup.py test2.3 Le rideau proto Définir et compiler
Format du rideau,protobuf Structure:
dm.proto
syntax = "proto3";
package dm;
message DmSegMobileReply{
repeated DanmakuElem elems = 1;
}
message DanmakuElem{
int64 id = 1;
int32 progress = 2;
int32 mode = 3;
int32 fontsize = 4;
uint32 color = 5;
string midHash = 6;
string content = 7;
int64 ctime = 8;
int32 weight = 9;
string action = 10;
int32 pool = 11;
string idStr = 12;
}| Nom | Sens | Type | Remarques |
|---|---|---|---|
| id | Rideau d'obusdmID | int64 | Unique Disponible pour les paramètres de fonctionnement |
| progress | Heure d'apparition de l'écran dans la vidéo | int32 | MS |
| mode | Type de rideau | int32 | 1 2 3:Un écran ordinaire 4:Le rideau inférieur 5:Haut du rideau 6:Écran inversé 7:Haut de gamme 8:Écran de code 9:BASRideau d'obus |
| fontsize | Taille du rideau | int32 | 18:Petit 25:Critères 36:Grand |
| color | Couleur du rideau | uint32 | DécimalRGB888Valeur |
| midHash | ExpéditeurUIDDeHASH | string | Pour masquer l'utilisateur et voir tous les écrans envoyés par l'utilisateur Vous pouvez également inverser la recherche de l'utilisateurID |
| content | Contenu du rideau | string | utf-8Codage |
| ctime | Temps d'envoi du rideau | int64 | Horodatage |
| weight | Poids | int32 | Pour le niveau de blindage intelligent |
| action | Action | string | Inconnu |
| pool | La piscine du rideau | int32 | 0:Piscine ordinaire 1:Sous - titres Pool 2:Piscine spéciale(Code/BASRideau d'obus) |
| idStr | Rideau d'obusdmIDType de chaîne pour | string | Unique Disponible pour les paramètres de fonctionnement |
2.4 Analyse seg.so Format des données d'écran
Exemple de vidéo:https://www.bilibili.com/video/av98919207
Vous devez installer python De probuf Sac: pip install protobuf

Compiler proto Fichier de structure,
protoc --python_out=. dm.protoUne fois l'exécution terminée dm_pb2.py,Introduire ceci dans le Code python Documentation,

dm_pj.py Les codes sont les suivants::
Attention!:
- Écran en temps réel Pas besoin. cookie,Demande directe pour obtenir seg.so
- Rideau d'histoire Besoin cookie Pour obtenir seg.so
# -*- coding: utf-8 -*-
# @Author :
# @Date :
# @File : dm_pj.py
# @description : XXX
import json
import requests
from dm_pb2 import DmSegMobileReply
from google.protobuf.json_format import MessageToJson, Parse
b_web_cookie = 'SESSDATA=fd25e2e6%2C1660373048%2C287c9%2A21;'
def get_date_list():
url = "https://api.bilibili.com/x/v2/dm/history/index?type=1&oid=168855206&month=2022-02"
headers = {
'cookie': b_web_cookie
}
response = requests.get(url, headers=headers)
print(json.dumps(response.json(), ensure_ascii=False, indent=4))
def dm_real_time():
url_real_time = 'https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=168855206&pid=98919207&segment_index=1'
resp = requests.get(url_real_time)
DM = DmSegMobileReply()
DM.ParseFromString(resp.content)
data_dict = json.loads(MessageToJson(DM))
# print(data_dict)
list(map(lambda x=None: print(x['content']), data_dict.get('elems', [])))
def dm_history():
url_history = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=168855206&date=2022-02-23'
headers = {
'cookie': b_web_cookie
}
resp = requests.get(url_history, headers=headers)
DM = DmSegMobileReply()
DM.ParseFromString(resp.content)
data_dict = json.loads(MessageToJson(DM))
# print(data_dict)
list(map(lambda x=None: print(x['content']), data_dict.get('elems', [])))
if __name__ == '__main__':
# dm_real_time()
get_date_list()
# dm_history()
pass
Capture d'écran des résultats de l'exécution:

Comparaison des écrans:

边栏推荐
- 【练习-4】(Uva 11988)Broken Keyboard(破损的键盘) ==(链表)
- China exterior wall cladding (EWC) market trend report, technical dynamic innovation and market forecast
- 0 - 1 problème de sac à dos (1)
- If you want to apply for a programmer, your resume should be written like this [essence summary]
- 【练习-6】(Uva 725)Division(除法)== 暴力
- Opencv learning log 19 skin grinding
- [exercise-6] (UVA 725) division = = violence
- Information security - security professional name | CVE | rce | POC | Vul | 0day
- [analysis of teacher Gao's software needs] collection of exercises and answers for level 20 cloud class
- Path problem before dynamic planning
猜你喜欢

滲透測試 ( 1 ) --- 必備 工具、導航

VS2019初步使用

渗透测试 ( 7 ) --- 漏洞扫描工具 Nessus

b站 实时弹幕和历史弹幕 Protobuf 格式解析

1010 things that college students majoring in it must do before graduation

Borg Maze (BFS+最小生成树)(解题报告)

STM32如何使用STLINK下载程序:点亮LED跑马灯(库版本)
![[exercise-5] (UVA 839) not so mobile (balance)](/img/8e/48dcf75f7347b36301df6fc129c09d.png)
[exercise-5] (UVA 839) not so mobile (balance)

洛谷P1102 A-B数对(二分,map,双指针)

【高老师软件需求分析】20级云班课习题答案合集
随机推荐
Information security - threat detection - Flink broadcast stream broadcaststate dual stream merging application in filtering security logs
毕业才知道IT专业大学生毕业前必做的1010件事
Record of brushing questions with force deduction -- complete knapsack problem (I)
Opencv learning log 32 edge extraction
差分(一维,二维,三维) 蓝桥杯三体攻击
Research Report on market supply and demand and strategy of Chinese graphic screen printing equipment industry
C语言学习笔记
Research Report of exterior wall insulation system (ewis) industry - market status analysis and development prospect prediction
渗透测试 ( 8 ) --- Burp Suite Pro 官方文档
渗透测试 ( 1 ) --- 必备 工具、导航
【练习-5】(Uva 839)Not so Mobile(天平)
Opencv learning log 15 count the number of solder joints and output
Determine the Photo Position
滲透測試 ( 1 ) --- 必備 工具、導航
【练习4-1】Cake Distribution(分配蛋糕)
最全编程语言在线 API 文档
想应聘程序员,您的简历就该这样写【精华总结】
动态规划前路径问题
SSM框架常用配置文件
[exercise-6] (UVA 725) division = = violence