из байтовых данных protobuf для чтения в msg - PullRequest
2 голосов
/ 03 августа 2020

У меня есть следующие данные ProtoBuf в кодировке Base64 в качестве входных данных из Java приложения в файле, и я хочу прочитать их, используя Python:

message = "CTwwFl8AAAAAEAAY + LKJASAAKAEyvwYvY2dpLWJpbi90cmFjVud2 / /////// 8Bes0BTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBTTS1BMzA1R1QgQnVpbGQvUVAxQS4xOTA3MTEuMDIwOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzgzLjAuNDEwMy4xMDYgTW9iaWxlIFNhZmFyaS81MzcuMzYgKE1vYmlsZTsgYWZtYS1zZGstYS12MjAyMDA2OTk5LjIwMTAwNDAwMC4xKYABAYgB4eathAKQAQKaAQCiATUyMjU5NzgxM2I0OTZlYjA5YTI3ZTA3ZmE2NDg1YjRmY2JjODJiZWQzNzQwMWZiNjUzNTc4N6oBIDQyYTBmZTY1Y2FlNTExZWE5N2Q1MGUyNjZiNjAyNmVksAEBuAH92Nj4BcABAsgBANABAdgBAeABjIoD6AHnePABgTz4AYLSB4ACmvoBiAIBkAL /////////// 8BmAL /////////// 8BoAL /////////// 8BqAIysALAArgCAcACCMgCAdACAtkCb / CFyVTBsD / gAgHoAgDwAgD4ApxOgQMAAAAA16OwP6gDALADALoDkwEoKDE5OTg5NDgmMTk5ODk0OSl8KDE5OTg5NTAmMTk5ODk1MSl8KDE5OTg5NTImMTk5ODk1Myl8KDE5OTg5NTQmMTk5ODk1NSl8KDE5OTg5NTYmMTk5ODk1Nyl 8KDE5OTg5NTgmMTk5ODk1OSl8KDE5OTg5NjAmMTk5ODk2MSkpJigxOTk4OTYyKSYoMTk5ODk2MynCAwkIoJF8FQAAgL / IAwDQAwHYA /////////////////////////////////////////////////////////////////////////////////////////////////////////// //// wGABAaIBP /////////// wGQBACYBACgBACoBAK4BJf2e7gEu4l8wQQAAAAAAAAAAMkEb / CFyVTBsD / SBAkKABIBMBoAIgDYBADgBADwBAP4BASABUGIBQGQBQCYBQOiBQUNAACAP6gFnAOwBawGuAUAwAUAygUCMTDQBQLaBQc0MTJ4ODEy4gUDQ1BN6QUAAAAAAADwP / EFAAAAANejsD / 5BV0471w4oww / gQYpXI / C9SisP4oGAJIGAJoGAKEGgcGrf3Gzsj + oBgSyBgC5BgAAAAAAAAAAyAZi2Ab /////////// 8B4Ab /////// //// 8B6AYA8Ab /////////// 8B + Ab /////////// 8BgAf /////////// 8BiAcBkAcAmAcAogcAqAcBsAcDugcMNDUuMTc3LjE5NC4wwAcAyAf /////// //// 8B0Af /////////// 8B2Af /////////// 8B4gcA6gcCLTE = "

Код:

import base64
import binascii
from google.protobuf.json_format import MessageToJson

from google.protobuf.message import Message

print(base64.b64decode(message))
// i was trying like below,but is not working 
jsonObj = Message.ParseFromString(message)

print(jsonObj)

.proto файл

option java_package = "net.data.logprocessor.common.logformats.proto";

message UserSegmentInfoProto
{
    optional int64 id = 1;
    optional float weight = 2;
}

message ConversionInfo
{
    optional string transactionId = 1;
    optional string transactionAmount = 2;
    optional string transactionInfo = 3;
}

message IoPricingInfo
{
    optional float attributionRatio = 1;
}

message TrackerLogProto
{
    optional sfixed64 timestamp = 1;
    optional string uniqueResponseId = 2;
    optional int64 eserverId = 3;
    optional int64 trackerId = 4;
    optional int64 creativeId = 5;
    optional int64 advertiserLiId = 6;
    optional int64 advertiserIoId = 7;
    optional int64 advertiserId = 8;
    optional int64 publisherLiId = 9;
    optional int64 publisherIoId = 10;
    optional int64 publisherId = 11;
    optional int64 sectionId = 12;
    optional int64 pixelId = 13;
    optional int64 countryId = 14;
    optional int64 regionId = 15;
    optional int64 cityId = 16;
    optional int64 creativeHeight = 17;
    optional int64 creativeWidth = 18;
    optional int64 bucketizedCreativeHeight = 19;
    optional int64 bucketizedCreativeWidth = 20;
    optional int64 creativeOfferType = 21;
    optional int64 siteId = 22;
    optional int64 channelId = 23;
    optional int64 bucketizedAdvertiserLiFrequency = 24;
    optional int64 trackingType = 25;
    optional int64 isExchange = 26;
    optional int64 impressions = 27;
    optional int64 clickRequests = 28;
    optional int64 clicks = 29;
    optional int64 conversions = 30;
    optional double moneySpent = 31;
    optional double moneyEarned = 32;
    optional string userCookie = 33;
    optional string userIp = 34;
    optional int64 isLearning = 35;
    optional int64 statusCode = 36;
    optional float lastResponseTime = 37;
    optional string requestUri = 38;
    optional string referrer = 39;
    optional string userAgent = 40;
    optional string uniqueRowId = 41;
    optional double notionalBudgetSpent = 42;
    optional int64 impressionClickValidationStatusCode = 43;
    optional string advertiserTargetingExpression = 44;
    optional string publisherTargetingExpression = 45;
    repeated UserSegmentInfoProto userSegments = 46;
    optional int64 conversionType = 47;
    optional int64 creativeViewFrequency = 48;
    optional int64 creativeClickFrequency = 49;
    optional int64 advertiserIoViewFrequency = 50;
    optional int64 advertiserIoClickFrequency = 51;
    optional int64 timezone = 52;
    repeated int64 impressionPiggybackPixelIds = 53;
    optional int64 creativeViewFrequencyOld = 54;
    optional int64 debugStatusCode = 55;
    repeated int64 targetedSegmentIds = 56;
    repeated int64 blockedSegmentIds = 57; 
    optional double revenue = 58;
    optional double cost = 59;
    optional double budgetSpent = 60;
    optional ConversionInfo conversionInfo = 61;
    optional int64 impressionTime = 62;
    optional int64 clickTime = 63;
    optional IoPricingInfo ioPricingInfo = 64;
}

Я пытался декодировать и читать сообщение, но получал непечатаемые данные. Как я могу прочитать данные? Я новичок в ProtoBuf. Кто-нибудь, пожалуйста, проведите меня сюда.

...