当前位置:网站首页>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:

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 test

2.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;
}
NomSensTypeRemarques
idRideau d'obusdmIDint64Unique Disponible pour les paramètres de fonctionnement
progressHeure d'apparition de l'écran dans la vidéoint32MS
modeType de rideauint321 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
fontsizeTaille du rideauint3218:Petit
25:Critères
36:Grand
colorCouleur du rideauuint32DécimalRGB888Valeur
midHashExpéditeurUIDDeHASHstringPour masquer l'utilisateur et voir tous les écrans envoyés par l'utilisateur Vous pouvez également inverser la recherche de l'utilisateurID
contentContenu du rideaustringutf-8Codage
ctimeTemps d'envoi du rideauint64Horodatage
weightPoidsint32Pour le niveau de blindage intelligent
actionActionstringInconnu
poolLa piscine du rideauint320:Piscine ordinaire
1:Sous - titres Pool
2:Piscine spéciale(Code/BASRideau d'obus)
idStrRideau d'obusdmIDType de chaîne pourstringUnique 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.proto

Une 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:

原网站

版权声明
本文为[Attrapez le voleur, attrapez le roi en premier.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060919582909.html