├── .gitignore ├── README.md ├── __main__.py ├── agent ├── .gitignore ├── README.md ├── _agent.js ├── package-lock.json ├── package.json ├── src │ ├── common.ts │ ├── google │ │ └── generate.ts │ ├── index.ts │ ├── interface.ts │ ├── libjava.ts │ ├── wire │ │ └── generate.ts │ └── wire2 │ │ └── generate.ts └── tsconfig.json ├── frida_protobuf ├── __init__.py ├── cmd.py ├── config.py ├── demo.py ├── demo2.py ├── generate.py ├── log.py ├── main.py ├── proto2py.py ├── protos │ └── pyproto │ │ ├── com.bapis.bilibili.app.card.v1.AdInfo.proto │ │ ├── com.bapis.bilibili.app.card.v1.Args.proto │ │ ├── com.bapis.bilibili.app.card.v1.Avatar.proto │ │ ├── com.bapis.bilibili.app.card.v1.Base.proto │ │ ├── com.bapis.bilibili.app.card.v1.Bubble.proto │ │ ├── com.bapis.bilibili.app.card.v1.Button.proto │ │ ├── com.bapis.bilibili.app.card.v1.Card.proto │ │ ├── com.bapis.bilibili.app.card.v1.CreativeContent.proto │ │ ├── com.bapis.bilibili.app.card.v1.DislikeReason.proto │ │ ├── com.bapis.bilibili.app.card.v1.DynamicHot.proto │ │ ├── com.bapis.bilibili.app.card.v1.EntranceItem.proto │ │ ├── com.bapis.bilibili.app.card.v1.HotTopic.proto │ │ ├── com.bapis.bilibili.app.card.v1.HotTopicItem.proto │ │ ├── com.bapis.bilibili.app.card.v1.HotwordEntrance.proto │ │ ├── com.bapis.bilibili.app.card.v1.LargeCoverV1.proto │ │ ├── com.bapis.bilibili.app.card.v1.LargeCoverV4.proto │ │ ├── com.bapis.bilibili.app.card.v1.LikeButton.proto │ │ ├── com.bapis.bilibili.app.card.v1.Mask.proto │ │ ├── com.bapis.bilibili.app.card.v1.MiddleCoverV3.proto │ │ ├── com.bapis.bilibili.app.card.v1.PlayerArgs.proto │ │ ├── com.bapis.bilibili.app.card.v1.PopularTopEntrance.proto │ │ ├── com.bapis.bilibili.app.card.v1.RcmdOneItem.proto │ │ ├── com.bapis.bilibili.app.card.v1.ReasonStyle.proto │ │ ├── com.bapis.bilibili.app.card.v1.Relation.proto │ │ ├── com.bapis.bilibili.app.card.v1.SmallCoverRcmdItem.proto │ │ ├── com.bapis.bilibili.app.card.v1.SmallCoverV5.proto │ │ ├── com.bapis.bilibili.app.card.v1.ThreeItemAllV2.proto │ │ ├── com.bapis.bilibili.app.card.v1.ThreeItemV1.proto │ │ ├── com.bapis.bilibili.app.card.v1.ThreeItemV1Item.proto │ │ ├── com.bapis.bilibili.app.card.v1.ThreePoint.proto │ │ ├── com.bapis.bilibili.app.card.v1.TwoItemHV1Item.proto │ │ ├── com.bapis.bilibili.app.card.v1.Up.proto │ │ ├── com.bapis.bilibili.app.card.v1.UpArgs.proto │ │ ├── com.bapis.bilibili.app.show.popular.v1.Bubble.proto │ │ ├── com.bapis.bilibili.app.show.popular.v1.Config.proto │ │ ├── com.bapis.bilibili.app.show.popular.v1.EntranceShow.proto │ │ ├── com.bapis.bilibili.app.show.popular.v1.PopularReply.proto │ │ ├── com.tencent.qqlive.protocol.pb.Action.proto │ │ ├── com.tencent.qqlive.protocol.pb.Attent.proto │ │ ├── com.tencent.qqlive.protocol.pb.AttentFakeDisplayInfo.proto │ │ ├── com.tencent.qqlive.protocol.pb.AttentTimeConfigType.proto │ │ ├── com.tencent.qqlive.protocol.pb.AttentUIInfo.proto │ │ ├── com.tencent.qqlive.protocol.pb.Block.proto │ │ ├── com.tencent.qqlive.protocol.pb.BlockList.proto │ │ ├── com.tencent.qqlive.protocol.pb.BlockType.proto │ │ ├── com.tencent.qqlive.protocol.pb.CSSStruct.proto │ │ ├── com.tencent.qqlive.protocol.pb.CalendarItem.proto │ │ ├── com.tencent.qqlive.protocol.pb.ChangeSectionResponse.proto │ │ ├── com.tencent.qqlive.protocol.pb.CommonStyleMap.proto │ │ ├── com.tencent.qqlive.protocol.pb.ExtraData.proto │ │ ├── com.tencent.qqlive.protocol.pb.ImageFacePoint.proto │ │ ├── com.tencent.qqlive.protocol.pb.MarkLabel.proto │ │ ├── com.tencent.qqlive.protocol.pb.MarkLabelList.proto │ │ ├── com.tencent.qqlive.protocol.pb.MarkLabelType.proto │ │ ├── com.tencent.qqlive.protocol.pb.Operation.proto │ │ ├── com.tencent.qqlive.protocol.pb.OperationType.proto │ │ ├── com.tencent.qqlive.protocol.pb.Poster.proto │ │ ├── com.tencent.qqlive.protocol.pb.Section.proto │ │ ├── com.tencent.qqlive.protocol.pb.SectionType.proto │ │ ├── com.tencent.qqlive.protocol.pb.VideoIdKeyValueSet.proto │ │ ├── com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto │ │ ├── com.tencent.qqlive.protocol.pb.VideoIdSet.proto │ │ ├── tbclient.Error.proto │ │ ├── tbclient.GetBubbleList.DataRes.proto │ │ ├── tbclient.GetBubbleList.GetBubbleListResIdl.proto │ │ ├── tbclient.ThemeBgProp.proto │ │ └── tbclient.ThemeRecommand.proto ├── sample │ ├── bilibili_PopularReply.txt │ └── qqlive_ChangeSectionResponse.txt └── version.py ├── pyproto ├── com │ ├── bapis │ │ └── bilibili │ │ │ └── app │ │ │ ├── card │ │ │ └── v1 │ │ │ │ ├── AdInfo_pb2.py │ │ │ │ ├── Args_pb2.py │ │ │ │ ├── Avatar_pb2.py │ │ │ │ ├── Base_pb2.py │ │ │ │ ├── Bubble_pb2.py │ │ │ │ ├── Button_pb2.py │ │ │ │ ├── Card_pb2.py │ │ │ │ ├── CreativeContent_pb2.py │ │ │ │ ├── DislikeReason_pb2.py │ │ │ │ ├── DynamicHot_pb2.py │ │ │ │ ├── EntranceItem_pb2.py │ │ │ │ ├── HotTopicItem_pb2.py │ │ │ │ ├── HotTopic_pb2.py │ │ │ │ ├── HotwordEntrance_pb2.py │ │ │ │ ├── LargeCoverV1_pb2.py │ │ │ │ ├── LargeCoverV4_pb2.py │ │ │ │ ├── LikeButton_pb2.py │ │ │ │ ├── Mask_pb2.py │ │ │ │ ├── MiddleCoverV3_pb2.py │ │ │ │ ├── PlayerArgs_pb2.py │ │ │ │ ├── PopularTopEntrance_pb2.py │ │ │ │ ├── RcmdOneItem_pb2.py │ │ │ │ ├── ReasonStyle_pb2.py │ │ │ │ ├── Relation_pb2.py │ │ │ │ ├── SmallCoverRcmdItem_pb2.py │ │ │ │ ├── SmallCoverV5_pb2.py │ │ │ │ ├── ThreeItemAllV2_pb2.py │ │ │ │ ├── ThreeItemV1Item_pb2.py │ │ │ │ ├── ThreeItemV1_pb2.py │ │ │ │ ├── ThreePoint_pb2.py │ │ │ │ ├── TwoItemHV1Item_pb2.py │ │ │ │ ├── UpArgs_pb2.py │ │ │ │ └── Up_pb2.py │ │ │ └── show │ │ │ └── popular │ │ │ └── v1 │ │ │ ├── Bubble_pb2.py │ │ │ ├── Config_pb2.py │ │ │ ├── EntranceShow_pb2.py │ │ │ └── PopularReply_pb2.py │ └── tencent │ │ └── qqlive │ │ └── protocol │ │ └── pb │ │ ├── Action_pb2.py │ │ ├── AttentFakeDisplayInfo_pb2.py │ │ ├── AttentTimeConfigType_pb2.py │ │ ├── AttentUIInfo_pb2.py │ │ ├── Attent_pb2.py │ │ ├── BlockList_pb2.py │ │ ├── BlockType_pb2.py │ │ ├── Block_pb2.py │ │ ├── CSSStruct_pb2.py │ │ ├── CalendarItem_pb2.py │ │ ├── ChangeSectionResponse_pb2.py │ │ ├── CommonStyleMap_pb2.py │ │ ├── ExtraData_pb2.py │ │ ├── ImageFacePoint_pb2.py │ │ ├── MarkLabelList_pb2.py │ │ ├── MarkLabelType_pb2.py │ │ ├── MarkLabel_pb2.py │ │ ├── OperationType_pb2.py │ │ ├── Operation_pb2.py │ │ ├── Poster_pb2.py │ │ ├── SectionType_pb2.py │ │ ├── Section_pb2.py │ │ ├── VideoIdKeyValueSetKey_pb2.py │ │ ├── VideoIdKeyValueSet_pb2.py │ │ └── VideoIdSet_pb2.py └── tbclient │ ├── Error_pb2.py │ ├── GetBubbleList │ ├── DataRes_pb2.py │ └── GetBubbleListResIdl_pb2.py │ ├── ThemeBgProp_pb2.py │ └── ThemeRecommand_pb2.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | frida_protobuf/configs 3 | .vscode/* 4 | test/* 5 | *.log 6 | # Byte-compiled / optimized / DLL files 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | 11 | # C extensions 12 | *.so 13 | 14 | # Distribution / packaging 15 | .Python 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | lib/ 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | share/python-wheels/ 29 | *.egg-info/ 30 | .installed.cfg 31 | *.egg 32 | MANIFEST 33 | 34 | # PyInstaller 35 | # Usually these files are written by a python script from a template 36 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 37 | *.manifest 38 | *.spec 39 | 40 | # Installer logs 41 | pip-log.txt 42 | pip-delete-this-directory.txt 43 | 44 | # Unit test / coverage reports 45 | htmlcov/ 46 | .tox/ 47 | .nox/ 48 | .coverage 49 | .coverage.* 50 | .cache 51 | nosetests.xml 52 | coverage.xml 53 | *.cover 54 | *.py,cover 55 | .hypothesis/ 56 | .pytest_cache/ 57 | cover/ 58 | 59 | # Translations 60 | *.mo 61 | *.pot 62 | 63 | # Django stuff: 64 | *.log 65 | local_settings.py 66 | db.sqlite3 67 | db.sqlite3-journal 68 | 69 | # Flask stuff: 70 | instance/ 71 | .webassets-cache 72 | 73 | # Scrapy stuff: 74 | .scrapy 75 | 76 | # Sphinx documentation 77 | docs/_build/ 78 | 79 | # PyBuilder 80 | .pybuilder/ 81 | target/ 82 | 83 | # Jupyter Notebook 84 | .ipynb_checkpoints 85 | 86 | # IPython 87 | profile_default/ 88 | ipython_config.py 89 | 90 | # pyenv 91 | # For a library or package, you might want to ignore these files since the code is 92 | # intended to run in multiple environments; otherwise, check them in: 93 | # .python-version 94 | 95 | # pipenv 96 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 97 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 98 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 99 | # install all needed dependencies. 100 | #Pipfile.lock 101 | 102 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 103 | __pypackages__/ 104 | 105 | # Celery stuff 106 | celerybeat-schedule 107 | celerybeat.pid 108 | 109 | # SageMath parsed files 110 | *.sage.py 111 | 112 | # Environments 113 | .env 114 | .venv 115 | env/ 116 | venv/ 117 | ENV/ 118 | env.bak/ 119 | venv.bak/ 120 | 121 | # Spyder project settings 122 | .spyderproject 123 | .spyproject 124 | 125 | # Rope project settings 126 | .ropeproject 127 | 128 | # mkdocs documentation 129 | /site 130 | 131 | # mypy 132 | .mypy_cache/ 133 | .dmypy.json 134 | dmypy.json 135 | 136 | # Pyre type checker 137 | .pyre/ 138 | 139 | # pytype static type analyzer 140 | .pytype/ 141 | 142 | # Cython debug symbols 143 | cython_debug/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 本项目用于**辅助**逆向开发人员,快速获取和转换Android APP中所使用的protobuf协议的proto文件 4 | 5 | **当前仅支持基于以下包生成protobuf的相关类** 6 | 7 | - `com.squareup.wire` 8 | - `com.google.protobuf` 9 | 10 | **原生通用的脚本编写√** 11 | 12 | **当前转换逻辑可能无法正确处理内部类,但frida_protobuf/configs包含了内部类的信息,如果无法直接转换,请自行处理** 13 | 14 | 特性 15 | 16 | - string int32 int64 bool 常规类型转换 17 | - 识别第三方proto导入,自动转换 18 | - 判定`com.google.protobuf.ByteString`为`Any` 19 | - `oneof`类型识别和转换 20 | 21 | # 原理 22 | 23 | - 通过frida枚举全部类,根据类特征得到原proto中的字段名、字段类型、字段tag等信息 24 | - 将信息转换、存储为特定的配置文件 25 | - 按需求和规则转换proto至对应的py文件 26 | 27 | # 环境 28 | 29 | - **frida-server必须是14.x.x版本** 30 | - 因为`runtime`是`qjs`,测试使用`v8`会卡死,如果有人知道原因请告诉我 31 | - **python 3.8.5** 32 | 33 | ### 安装python包 34 | 35 | ```bash 36 | pip install -r requirements.txt 37 | ``` 38 | 39 | ### 【可选】安装npm包 40 | 41 | **有手动编译_agent.js需求** 42 | 43 | - `agent`目录下安装 44 | 45 | ```bash 46 | cd agent 47 | npm install 48 | ``` 49 | 50 | - 编译_agent.js 51 | 52 | ```bash 53 | npm run build 54 | ``` 55 | 56 | # 使用 57 | 58 | ### 手机端开启frida-server 59 | 60 | - 首先将frida-server推送至手机(只用做一次) 61 | 62 | ```bash 63 | adb push frida-server-14.2.18-android-arm64 /data/local/tmp/fs14218 64 | adb shell 65 | su 66 | chmod +x /data/local/tmp/fs14218 67 | ``` 68 | 69 | - 开启服务 70 | 71 | ```bash 72 | /data/local/tmp/fs14218 -l 0.0.0.0:33333 73 | ``` 74 | 75 | ### 使用注意 76 | 77 | - 当前版本生成的proto配置均包含完整包名,转换时指定proto也请完整指定 78 | - 使用包名的原因是可能存在同名的proto文件 79 | 80 | 1. 注入frida脚本,获取proto配置 81 | 2. 将proto的配置文件转换为proto文件 82 | 3. 将proto文件转换为对应的py文件 83 | 4. 样本测试 84 | 85 | 执行前请删除原来的`protos`文件夹 86 | 87 | 当主要proto文件中想额外引用特定的proto时,需要指定对应的包名,多个则使用`|`隔开,形式如下 88 | 89 | ```bash 90 | --extra-import "package1:proto1,proto2|package2:proto3,proto4" 91 | ``` 92 | 93 | **合理使用--keywords-expected可以避免APP崩溃或卡死** 94 | 95 | **如果存在循环引用的情况,最后转换到py这一步会有问题,请手动处理** 96 | 97 | **如果想知道哪里循环引用了,可以执行一下最后一步转换,会提示出来** 98 | 99 | ### 案例一 100 | 101 | - `com.tencent.qqlive` 版本号 `26446` 102 | 103 | ```bash 104 | python -m frida_protobuf.main -H 172.16.13.146:22222 -n com.tencent.qqlive --use-default-any --keywords-expected "com.tencent.qqlive.protocol.pb,com.tencent.spp_rpc" 105 | python -m frida_protobuf.generate --proto com.tencent.qqlive.protocol.pb.ChangeSectionResponse --extra-import "com.tencent.qqlive.protocol.pb:Poster,Action,Attent,VideoIdKeyValueSet" 106 | python -m frida_protobuf.proto2py --proto com.tencent.qqlive.protocol.pb.ChangeSectionResponse 107 | python -m frida_protobuf.demo 108 | ``` 109 | 110 | [效果演示](http://pan.iqiyi.com/file/paopao/_8BryDtYjocn91iI9UdL0E--gVQG8baazNgLbbSEzOGCdNxscmbI3WwLs25hj1BmU5PUqpuQpVEvH-eQz0-Vog.gif) 111 | 112 | [演示视频](http://pan.iqiyi.com/file/paopao/rGdGDYUdK_LSwzMWJD4X8fZvkFIAdHTfGQIvpcXMmuOAa1KCZKqTx3kNih6CCp59A-XR-d91R3n2uHzmg-PrVw.mp4) 113 | 114 | ### 案例二 115 | 116 | - `tv.danmaku.bili` 版本号 `6510400` 117 | 118 | ```bash 119 | python -m frida_protobuf.main -H 172.16.13.146:22222 -n tv.danmaku.bili --use-default-any --keywords-expected "bili" 120 | python -m frida_protobuf.generate --proto com.bapis.bilibili.app.show.popular.v1.PopularReply 121 | python -m frida_protobuf.proto2py --proto com.bapis.bilibili.app.show.popular.v1.PopularReply 122 | python -m frida_protobuf.demo2 123 | ``` 124 | 125 | [效果演示](http://pan.iqiyi.com/file/paopao/-wM1eKewn9snMIg6XqAZnoiN-u5RIEQ9tacPZ-O3-ntZz6WUzK-nCgGd2VnSsl0rRB3g3fxzardI5ZtwvkiNpg.gif) 126 | 127 | [效果视频](http://pan.iqiyi.com/file/paopao/VjPzEqNkQt16avGaqcWwfMRHTZ71KTvpCKCddL80Tc73fxOT5rA5angpGnvmVPPKCVBwn6nV5TDFGLembmg2_Q.mp4) 128 | 129 | ### 案例三 130 | 131 | - `com.baidu.tieba` 版本号 `202309888` 132 | 133 | ```bash 134 | python -m frida_protobuf.main -n com.baidu.tieba --use-default-any --keywords-expected "protobuf,tbclient" 135 | python -m frida_protobuf.generate --proto tbclient.GetBubbleList.GetBubbleListResIdl 136 | python -m frida_protobuf.proto2py --proto tbclient.GetBubbleList.GetBubbleListResIdl 137 | ``` 138 | 139 | # 补充 140 | 141 | - Q: 为何需要分三步进行 142 | - A: 当遭遇某些字段类型为Any时,需要根据自己的需求对proto进行补充 -------------------------------------------------------------------------------- /__main__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeeFlowerX/frida-protobuf/038d13c1286f7b9304de6f8b2a49bbc209953fed/__main__.py -------------------------------------------------------------------------------- /agent/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /agent/README.md: -------------------------------------------------------------------------------- 1 | ### How to compile & load 2 | 3 | ```sh 4 | $ git clone git://github.com/oleavr/frida-agent-example.git 5 | $ cd frida-agent-example/ 6 | $ npm install 7 | $ frida -U -f com.example.android --no-pause -l _agent.js 8 | ``` 9 | 10 | ### Development workflow 11 | 12 | To continuously recompile on change, keep this running in a terminal: 13 | 14 | ```sh 15 | $ npm run watch 16 | ``` 17 | 18 | And use an editor like Visual Studio Code for code completion and instant 19 | type-checking feedback. 20 | -------------------------------------------------------------------------------- /agent/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frida-protobuf", 3 | "version": "1.0.0", 4 | "description": "Use frida to generate Android app all protobuf class to proto file", 5 | "private": true, 6 | "main": "src/index.ts", 7 | "scripts": { 8 | "prepare": "npm run build", 9 | "build": "frida-compile src/index.ts -o _agent.js -c", 10 | "watch": "frida-compile src/index.ts -o _agent.js -w" 11 | }, 12 | "devDependencies": { 13 | "@types/frida-gum": "^16.2.0", 14 | "@types/node": "^14.14.10", 15 | "frida-compile": "^10.0.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /agent/src/common.ts: -------------------------------------------------------------------------------- 1 | export function logAllProperties(obj: any) { 2 | if (obj == null) return; 3 | console.log(Object.getOwnPropertyNames(obj).join("\n")); 4 | logAllProperties(Object.getPrototypeOf(obj)); 5 | } 6 | 7 | export function send_log(msg: string){ 8 | send({"log": msg}); 9 | console.log(msg); 10 | } 11 | 12 | export function generate_package(cls: any){ 13 | let name = `${cls.class.getName()}`; 14 | return name.slice(0, name.lastIndexOf('.')); 15 | } 16 | 17 | export function generate_enum_fields(cls: any){ 18 | let fields_config:{[key: string]: any} = {}; 19 | Java.perform(function(){ 20 | let enum_values = cls.values(); 21 | let methods = cls.class.getDeclaredMethods(); 22 | let flag_getNumber = false; 23 | let flag_getValue = false; 24 | for (let i = 0; i< methods.length; i++){ 25 | if (`${methods[i].getName()}` == "getValue"){ 26 | flag_getValue = true; 27 | break 28 | } 29 | if (`${methods[i].getName()}` == "getNumber"){ 30 | flag_getNumber = true; 31 | break 32 | } 33 | } 34 | if (!flag_getNumber && !flag_getValue){ 35 | console.log("没有发现enum获取元素的方法") 36 | return 37 | } 38 | enum_values.forEach(function name(params: any) { 39 | if (`${params}`.endsWith("_NOT_SET")) return; 40 | if(flag_getNumber){ 41 | fields_config[`${params}`] = params.getNumber(); 42 | } 43 | else if(flag_getValue){ 44 | fields_config[`${params}`] = params.getValue(); 45 | } 46 | }) 47 | }) 48 | return fields_config; 49 | } -------------------------------------------------------------------------------- /agent/src/interface.ts: -------------------------------------------------------------------------------- 1 | export interface tsMap { 2 | [key: string]: any; 3 | [index: number]: any; 4 | } 5 | 6 | export interface javaMethod { 7 | getName: { 8 | (): string; 9 | }; 10 | getReturnType: { 11 | (): javaType; 12 | }; 13 | } 14 | 15 | export interface javaType { 16 | getSimpleName: { 17 | (): string; 18 | }; 19 | getCanonicalName: { 20 | (): string; 21 | }; 22 | } 23 | 24 | export interface javaField { 25 | getType: { 26 | (): javaType; 27 | }; 28 | getSignatureAnnotation: { 29 | (): string[]; 30 | }; 31 | } -------------------------------------------------------------------------------- /agent/src/libjava.ts: -------------------------------------------------------------------------------- 1 | export let ModifierCls: any = null; 2 | export let WireMessageClz: any = null; 3 | export let WireFieldCls: any = null; 4 | export let WireProtoFieldCls: any = null; 5 | export let Wire2MessageClz: any = null; 6 | export let Wire2FieldCls: any = null; 7 | export let Wire2ProtoFieldCls: any = null; 8 | export let GeneratedMessageLiteClz: any = null; 9 | export let EnumClz: any = null; 10 | export let ObjectClz: any = null; 11 | 12 | export function InitClsClz(){ 13 | Java.perform(function(){ 14 | ModifierCls = Java.use("java.lang.reflect.Modifier") 15 | EnumClz = Java.use("java.lang.Enum").class; 16 | ObjectClz = Java.use("java.lang.Object").class; 17 | try{ 18 | WireMessageClz = Java.use("com.squareup.wire.Message").class; 19 | } 20 | catch(error){ 21 | } 22 | try { 23 | WireFieldCls = Java.use("com.squareup.wire.WireField"); 24 | } catch (error) { 25 | } 26 | try { 27 | WireProtoFieldCls = Java.use("com.squareup.wire.ProtoField"); 28 | } catch (error) { 29 | } 30 | try{ 31 | Wire2MessageClz = Java.use("com.squareup.wire2.Message").class; 32 | } 33 | catch(e){ 34 | } 35 | try{ 36 | Wire2FieldCls = Java.use("com.squareup.wire2.WireField"); 37 | } 38 | catch(e){ 39 | } 40 | try{ 41 | Wire2ProtoFieldCls = Java.use("com.squareup.wire2.ProtoField"); 42 | } 43 | catch(e){ 44 | } 45 | try{ 46 | GeneratedMessageLiteClz = Java.use("com.google.protobuf.GeneratedMessageLite").class; 47 | } 48 | catch(e){ 49 | } 50 | }) 51 | } -------------------------------------------------------------------------------- /agent/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["es2020", "ESNext.String"], 5 | "allowJs": true, 6 | "noEmit": true, 7 | "strict": true, 8 | "esModuleInterop": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /frida_protobuf/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeeFlowerX/frida-protobuf/038d13c1286f7b9304de6f8b2a49bbc209953fed/frida_protobuf/__init__.py -------------------------------------------------------------------------------- /frida_protobuf/cmd.py: -------------------------------------------------------------------------------- 1 | class CmdArgs: 2 | 3 | def __init__(self, args: 'CmdArgs'): 4 | self.help: str = args.help 5 | self.version: str = args.version 6 | self.proto: str = args.proto 7 | self.extra_import: str = args.extra_import 8 | self.syntax_version: str = args.syntax_version 9 | self.proto_folder: str = args.proto_folder 10 | self.python_import_prefix: str = args.python_import_prefix 11 | 12 | 13 | class MainCmdArgs: 14 | 15 | def __init__(self, args: 'MainCmdArgs'): 16 | self.help: str = args.help 17 | self.version: str = args.version 18 | self.attach_name: str = args.attach_name 19 | self.attach_pid: str = args.attach_pid 20 | self.host: str = args.host 21 | self.keywords_expected: str = args.keywords_expected 22 | self.keywords_unexpected: str = args.keywords_unexpected 23 | self.use_default_any: bool = args.use_default_any -------------------------------------------------------------------------------- /frida_protobuf/config.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | current_package = __name__.split('.')[0] 4 | CONFIGS_PATH = Path((Path(current_package) / 'configs').resolve().as_posix()) 5 | if CONFIGS_PATH.exists() is False: 6 | CONFIGS_PATH.mkdir() 7 | PROTOS_PATH = Path((Path(current_package) / 'protos').resolve().as_posix()) 8 | if PROTOS_PATH.exists() is False: 9 | PROTOS_PATH.mkdir() 10 | PYPROTO_PATH = Path((Path(current_package).parent / 'pyproto').resolve().as_posix()) 11 | if PYPROTO_PATH.exists() is False: 12 | PYPROTO_PATH.mkdir() -------------------------------------------------------------------------------- /frida_protobuf/demo.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from google.protobuf.json_format import MessageToDict 3 | from pyproto.com.tencent.qqlive.protocol.pb.ChangeSectionResponse_pb2 import ChangeSectionResponse 4 | 5 | resp = Path(r'frida_protobuf/sample/qqlive_ChangeSectionResponse.txt').read_bytes() 6 | change_section_response = ChangeSectionResponse() 7 | change_section_response.ParseFromString(resp) 8 | 9 | print(MessageToDict(change_section_response)) -------------------------------------------------------------------------------- /frida_protobuf/demo2.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from google.protobuf.json_format import MessageToDict 3 | from pyproto.com.bapis.bilibili.app.show.popular.v1.PopularReply_pb2 import PopularReply 4 | 5 | resp = Path(r'frida_protobuf/sample/bilibili_PopularReply.txt').read_bytes() 6 | popular_reply = PopularReply() 7 | popular_reply.ParseFromString(resp) 8 | 9 | print(MessageToDict(popular_reply)) -------------------------------------------------------------------------------- /frida_protobuf/log.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import datetime 3 | from typing import List 4 | from pathlib import Path 5 | 6 | from frida_protobuf.config import current_package 7 | 8 | 9 | def setup_logger(name: str) -> List[logging.Logger]: 10 | formatter = logging.Formatter('%(asctime)s %(name)s %(filename)s %(lineno)s : %(levelname)s %(message)s') 11 | log_time = datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S") 12 | log_folder_path = Path(current_package, 'logs') 13 | if log_folder_path.exists() is False: 14 | log_folder_path.mkdir() 15 | log_file_path = log_folder_path / f'{name}-{log_time}.log' 16 | fh = logging.FileHandler(log_file_path.resolve().as_posix(), encoding='utf-8') 17 | fh.setLevel(logging.DEBUG) 18 | fh.setFormatter(formatter) 19 | ch = logging.StreamHandler() 20 | ch.setLevel(logging.DEBUG) 21 | ch.setFormatter(formatter) 22 | lt = logging.getLogger(f'{name}') 23 | lt.setLevel(logging.DEBUG) 24 | lt.addHandler(ch) 25 | lt.addHandler(fh) 26 | lf = logging.getLogger(f'{name}-file') 27 | lf.setLevel(logging.DEBUG) 28 | lf.addHandler(fh) 29 | lt.info(f'创建 -> {log_file_path}') 30 | return [lt, lf] -------------------------------------------------------------------------------- /frida_protobuf/main.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | import frida 4 | import signal 5 | from pathlib import Path 6 | from argparse import ArgumentParser 7 | 8 | from frida_protobuf.cmd import MainCmdArgs 9 | from frida_protobuf.log import setup_logger 10 | from frida_protobuf.config import CONFIGS_PATH 11 | from frida_protobuf.version import __version__ 12 | 13 | # lt -> file & terminal logger 14 | # lf -> file only logger 15 | lt, lf = setup_logger('main') 16 | 17 | 18 | def dump_config(config: dict): 19 | config_path = (CONFIGS_PATH / f'{config["package"]}.{config["cls_name"]}.json') 20 | config_path.write_text(json.dumps(config, ensure_ascii=False, indent=4), encoding='utf-8') 21 | 22 | 23 | def on_detached(reason, *args): 24 | if reason == 'application-requested': 25 | print(f'主动断开rpc -> {reason}') 26 | elif reason == 'process-terminated': 27 | print(f'被动断开rpc -> {reason}') 28 | print(f'args -> {args}') 29 | else: 30 | print(f'未知原因断开rpc -> {reason}') 31 | 32 | 33 | def on_message(message: dict, data: bytes): 34 | # print(f'recv message -> {message}') 35 | if message['type'] == 'send': 36 | if message['payload'].get('log'): 37 | lf.info(message['payload']['log']) 38 | else: 39 | dump_config(message['payload']) 40 | 41 | 42 | def handle_exit(signum, frame): 43 | lt.info(f'-> {signum} -> {frame}') 44 | sys.exit('Ctrl+C again to exit') 45 | 46 | 47 | def main(): 48 | def print_version(): 49 | print(f'version {__version__}, frida-protobuf proto configs generator.') 50 | # <------ 处理手动Ctrl+C退出 ------> 51 | signal.signal(signal.SIGINT, handle_exit) 52 | signal.signal(signal.SIGTERM, handle_exit) 53 | # <------ 正文 ------> 54 | parser = ArgumentParser( 55 | prog='frida-protobuf generator', 56 | usage='python -m frida_protobuf.generator [OPTION]...', 57 | description='frida-protobuf proto configs generator', 58 | add_help=False, 59 | ) 60 | parser.add_argument('-v', '--version', action='store_true', help='print version and exit') 61 | parser.add_argument('-h', '--help', action='store_true', help='print help message and exit') 62 | parser.add_argument('-n', '--attach-name', help='attach to NAME', metavar='NAME', default=None) 63 | parser.add_argument('-p', '--attach-pid', help='attach to PID', metavar='PID', default=None) 64 | parser.add_argument('-H', '--host', help='connect to remote frida-server on HOST', metavar='HOST', default=None) 65 | parser.add_argument('-expected', '--keywords-expected', help='expected keywords in class name, separator is <,>', metavar='expected', default="") 66 | parser.add_argument('-unexpected', '--keywords-unexpected', help='unexpected keywords in class name, separator is <,>', metavar='unexpected', default="cyjh.ddy.net") 67 | parser.add_argument('--use-default-any', help='use google.protobuf.Any when Any type field matched ', action='store_true') 68 | parser.add_argument('--runtime', default='qjs', help='only qjs know') 69 | args = parser.parse_args() # type: MainCmdArgs 70 | if args.help: 71 | print_version() 72 | parser.print_help() 73 | sys.exit() 74 | if args.version: 75 | print_version() 76 | sys.exit() 77 | if args.attach_name is None and args.attach_pid is None: 78 | sys.exit('set NAME or PID, plz') 79 | if args.attach_name and args.attach_pid: 80 | sys.exit('set NAME or PID only one, plz') 81 | target = args.attach_name 82 | if args.attach_pid: 83 | target = args.attach_pid 84 | lt.info(f'start attach {target}') 85 | try: 86 | if args.host: 87 | device = frida.get_device_manager().add_remote_device(args.host) 88 | else: 89 | # device = frida.get_local_device() 90 | device = frida.get_usb_device(timeout=10) 91 | session = device.attach(target) 92 | except Exception as e: 93 | lt.error(f'attach to {target} failed', exc_info=e) 94 | sys.exit() 95 | 96 | lt.info(f'attach {target} success, inject script now') 97 | try: 98 | jscode = Path(r'agent/_agent.js').read_text(encoding='utf-8') 99 | script = session.create_script(jscode, runtime='qjs') 100 | script.load() 101 | session.on('detached', on_detached) 102 | script.on('message', on_message) 103 | except Exception as e: 104 | lt.error(f'inject scrip failed', exc_info=e) 105 | sys.exit() 106 | rpc = script.exports 107 | rpc.dump(args.use_default_any, args.keywords_expected, args.keywords_unexpected) 108 | 109 | # wait 110 | sys.stdin.read() 111 | 112 | 113 | if __name__ == '__main__': 114 | main() -------------------------------------------------------------------------------- /frida_protobuf/proto2py.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | from argparse import ArgumentParser 4 | 5 | from frida_protobuf.cmd import CmdArgs 6 | from frida_protobuf.version import __version__ 7 | from frida_protobuf.config import PROTOS_PATH, PYPROTO_PATH, current_package 8 | 9 | 10 | def proto2py(args: CmdArgs): 11 | os.chdir(current_package) 12 | tmp_proto_folder = PROTOS_PATH / args.python_import_prefix 13 | if tmp_proto_folder.exists() is False: 14 | tmp_proto_folder.mkdir() 15 | 16 | for proto_path in PROTOS_PATH.iterdir(): 17 | if proto_path.is_dir(): 18 | continue 19 | # if proto_path.stem == args.proto: 20 | # continue 21 | if proto_path.suffix != ".proto": 22 | continue 23 | shutil.move(proto_path.resolve().as_posix(), (tmp_proto_folder / proto_path.name).resolve().as_posix()) 24 | # os.system(f'python -m grpc_tools.protoc -I {PROTOS_PATH.name} --python_out=../ {PROTOS_PATH.name}/{args.proto}.proto') 25 | os.system(f'python -m grpc_tools.protoc -I {PROTOS_PATH.name} --python_out=../ {PROTOS_PATH.name}/{args.python_import_prefix}/*.proto') 26 | # py_folder = PYPROTO_PATH / f'{args.python_import_prefix}' 27 | # for py_path in py_folder.iterdir(): 28 | # if py_path.is_dir(): 29 | # continue 30 | # if py_path.suffix != ".py": 31 | # continue 32 | # shutil.move(py_path.resolve().as_posix(), (PYPROTO_PATH / py_path.name).resolve().as_posix()) 33 | # shutil.rmtree(py_folder.resolve().as_posix()) 34 | os.chdir('..') 35 | 36 | 37 | def main(): 38 | def print_version(): 39 | print(f'version {__version__}, frida-protobuf proto configs generator.') 40 | 41 | parser = ArgumentParser( 42 | prog='frida-protobuf generator', 43 | usage='python -m frida_protobuf.generator [OPTION]...', 44 | description='frida-protobuf proto configs generator', 45 | add_help=False, 46 | ) 47 | parser.add_argument('-v', '--version', action='store_true', help='print version and exit') 48 | parser.add_argument('-h', '--help', action='store_true', help='print help message and exit') 49 | parser.add_argument('--proto', default='', required=True, help='main proto file name (without suffix)') 50 | parser.add_argument('--extra-import', default='', help='extra import for main proto') 51 | parser.add_argument('--python-import-prefix', default='pyproto', help='python import prefix') 52 | args = parser.parse_args() # type: CmdArgs 53 | proto2py(args) 54 | 55 | if __name__ == '__main__': 56 | main() -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.AdInfo.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.CreativeContent.proto"; 6 | import "google/protobuf/any.proto"; 7 | 8 | message AdInfo { 9 | optional int64 creative_id = 1; 10 | optional int32 creative_type = 2; 11 | optional int32 card_type = 3; 12 | optional CreativeContent creative_content = 4; 13 | optional string ad_cb = 5; 14 | optional int64 resource = 6; 15 | optional int32 source = 7; 16 | optional string request_id = 8; 17 | optional bool is_ad = 9; 18 | optional int64 cm_mark = 10; 19 | optional int32 index = 11; 20 | optional bool is_ad_loc = 12; 21 | optional int32 card_index = 13; 22 | optional string client_ip = 14; 23 | optional google.protobuf.Any extra = 15; 24 | optional int32 creative_style = 16; 25 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Args.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message Args { 6 | optional int32 type = 1; 7 | optional int64 up_id = 2; 8 | optional string up_name = 3; 9 | optional int32 rid = 4; 10 | optional string rname = 5; 11 | optional int64 tid = 6; 12 | optional string tname = 7; 13 | optional string track_id = 8; 14 | optional string state = 9; 15 | optional int32 converge_type = 10; 16 | optional int64 aid = 11; 17 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Avatar.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message Avatar { 6 | optional string cover = 1; 7 | optional string text = 2; 8 | optional string uri = 3; 9 | optional int32 type = 4; 10 | optional string event = 5; 11 | optional int32 defalut_cover = 7; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Base.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.UpArgs.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.AdInfo.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.Mask.proto"; 8 | import "pyproto/com.bapis.bilibili.app.card.v1.Button.proto"; 9 | import "pyproto/com.bapis.bilibili.app.card.v1.ThreePoint.proto"; 10 | import "pyproto/com.bapis.bilibili.app.card.v1.Args.proto"; 11 | import "pyproto/com.bapis.bilibili.app.card.v1.PlayerArgs.proto"; 12 | 13 | message Base { 14 | optional string card_type = 1; 15 | optional string card_goto = 2; 16 | optional string goto = 3; 17 | optional string param = 4; 18 | optional string cover = 5; 19 | optional string title = 6; 20 | optional string uri = 7; 21 | optional ThreePoint three_point = 8; 22 | optional Args args = 9; 23 | optional PlayerArgs player_args = 10; 24 | optional int64 idx = 11; 25 | optional AdInfo ad_info = 12; 26 | optional Mask mask = 13; 27 | optional string from_type = 14; 28 | optional Button desc_button = 17; 29 | optional UpArgs up_args = 19; 30 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Bubble.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message Bubble { 6 | optional string bubble_content = 1; 7 | optional int32 version = 2; 8 | optional int64 stime = 3; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Button.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Relation.proto"; 6 | 7 | message Button { 8 | optional string text = 1; 9 | optional string param = 2; 10 | optional string uri = 3; 11 | optional string event = 4; 12 | optional int32 selected = 5; 13 | optional int32 type = 6; 14 | optional Relation relation = 8; 15 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Card.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ThreeItemAllV2.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.LargeCoverV4.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.PopularTopEntrance.proto"; 8 | import "pyproto/com.bapis.bilibili.app.card.v1.DynamicHot.proto"; 9 | import "pyproto/com.bapis.bilibili.app.card.v1.SmallCoverV5.proto"; 10 | import "pyproto/com.bapis.bilibili.app.card.v1.ThreeItemV1.proto"; 11 | import "pyproto/com.bapis.bilibili.app.card.v1.HotTopic.proto"; 12 | import "pyproto/com.bapis.bilibili.app.card.v1.RcmdOneItem.proto"; 13 | import "pyproto/com.bapis.bilibili.app.card.v1.LargeCoverV1.proto"; 14 | import "pyproto/com.bapis.bilibili.app.card.v1.MiddleCoverV3.proto"; 15 | 16 | message Card { 17 | oneof item { 18 | HotTopic hot_topic = 5; 19 | LargeCoverV1 large_cover_v1 = 2; 20 | LargeCoverV4 large_cover_v4 = 8; 21 | MiddleCoverV3 middle_cover_v3 = 7; 22 | PopularTopEntrance popular_top_entrance = 9; 23 | RcmdOneItem rcmd_one_item = 10; 24 | SmallCoverV5 small_cover_v5 = 1; 25 | ThreeItemAllV2 three_item_all_v2 = 3; 26 | DynamicHot three_item_h_v5 = 6; 27 | ThreeItemV1 three_item_v1 = 4; 28 | } 29 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.CreativeContent.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message CreativeContent { 6 | optional string title = 1; 7 | optional string description = 2; 8 | optional int64 video_id = 3; 9 | optional string username = 4; 10 | optional string image_url = 5; 11 | optional string log_url = 7; 12 | optional string url = 9; 13 | optional string click_url = 10; 14 | optional string show_url = 11; 15 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.DislikeReason.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message DislikeReason { 6 | optional int64 id = 1; 7 | optional string name = 2; 8 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.DynamicHot.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | 8 | message DynamicHot { 9 | optional Base base = 1; 10 | optional string top_left_title = 2; 11 | optional string more_uri = 5; 12 | optional string more_text = 6; 13 | repeated string covers = 7; 14 | optional string cover_right_text = 8; 15 | optional ReasonStyle top_rcmd_reason_style = 9; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.EntranceItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Bubble.proto"; 6 | 7 | message EntranceItem { 8 | optional string goto = 1; 9 | optional string icon = 2; 10 | optional string title = 3; 11 | optional string module_id = 4; 12 | optional string uri = 5; 13 | optional int64 entrance_id = 6; 14 | optional Bubble bubble = 7; 15 | optional int32 entrance_type = 8; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.HotTopic.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto"; 7 | 8 | message HotTopic { 9 | optional Base base = 1; 10 | optional string desc = 2; 11 | repeated HotTopicItem items = 3; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message HotTopicItem { 6 | optional string cover = 1; 7 | optional string uri = 2; 8 | optional string param = 3; 9 | optional string name = 4; 10 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.HotwordEntrance.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message HotwordEntrance { 6 | optional int64 hotword_id = 1; 7 | optional string hot_text = 2; 8 | optional string icon = 4; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.LargeCoverV1.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.LikeButton.proto"; 8 | import "pyproto/com.bapis.bilibili.app.card.v1.Avatar.proto"; 9 | 10 | message LargeCoverV1 { 11 | optional Base base = 1; 12 | optional string cover_gif = 2; 13 | optional Avatar avatar = 3; 14 | optional string cover_left_text_1 = 4; 15 | optional string cover_left_text_2 = 5; 16 | optional string cover_left_text_3 = 6; 17 | optional string cover_badge = 7; 18 | optional string top_rcmd_reason = 8; 19 | optional string bottom_rcmd_reason = 9; 20 | optional string desc = 10; 21 | optional int32 official_icon = 11; 22 | optional int32 can_play = 12; 23 | optional ReasonStyle top_rcmd_reason_style = 13; 24 | optional ReasonStyle bottom_rcmd_reason_style = 14; 25 | optional ReasonStyle left_cover_badge_style = 16; 26 | optional ReasonStyle right_cover_badge_style = 17; 27 | optional string cover_badge_2 = 18; 28 | optional LikeButton like_button = 19; 29 | optional int32 title_single_line = 20; 30 | optional string cover_right_text = 21; 31 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.LargeCoverV4.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Up.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | 8 | message LargeCoverV4 { 9 | optional Base base = 1; 10 | optional string cover_left_text_1 = 2; 11 | optional string cover_left_text_2 = 3; 12 | optional string cover_left_text_3 = 4; 13 | optional string cover_badge = 5; 14 | optional int32 can_play = 6; 15 | optional Up up = 7; 16 | optional string short_link = 8; 17 | optional string share_subtitle = 9; 18 | optional string play_number = 10; 19 | optional string bvid = 11; 20 | optional string sub_param = 12; 21 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.LikeButton.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message LikeButton { 6 | optional int64 aid = 1; 7 | optional int32 count = 2; 8 | optional bool show_count = 3; 9 | optional string event = 4; 10 | optional int32 selected = 5; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Mask.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Button.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Avatar.proto"; 7 | 8 | message Mask { 9 | optional Avatar avatar = 1; 10 | optional Button button = 2; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.MiddleCoverV3.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | 8 | message MiddleCoverV3 { 9 | optional Base base = 1; 10 | optional ReasonStyle cover_badge_style = 4; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.PlayerArgs.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message PlayerArgs { 6 | optional int32 is_live = 1; 7 | optional int64 aid = 2; 8 | optional int64 cid = 3; 9 | optional int32 sub_type = 4; 10 | optional int64 room_id = 5; 11 | optional int64 ep_id = 7; 12 | optional int32 is_preview = 8; 13 | optional string type = 9; 14 | optional int64 duration = 10; 15 | optional int64 season_id = 11; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.PopularTopEntrance.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.EntranceItem.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | 8 | message PopularTopEntrance { 9 | optional Base base = 1; 10 | repeated EntranceItem items = 2; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.RcmdOneItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.SmallCoverRcmdItem.proto"; 8 | 9 | message RcmdOneItem { 10 | optional Base base = 1; 11 | optional ReasonStyle top_rcmd_reason_style = 2; 12 | optional SmallCoverRcmdItem item = 3; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message ReasonStyle { 6 | optional string text = 1; 7 | optional string text_color = 2; 8 | optional string bg_color = 3; 9 | optional string border_color = 4; 10 | optional string icon_url = 5; 11 | optional string text_color_night = 6; 12 | optional string bg_color_night = 7; 13 | optional string border_color_night = 8; 14 | optional string icon_night_url = 9; 15 | optional int32 bg_style = 10; 16 | optional string uri = 11; 17 | optional string icon_bg_url = 12; 18 | optional string event = 13; 19 | optional int32 right_icon_type = 15; 20 | optional string left_icon_type = 16; 21 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Relation.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message Relation { 6 | optional int32 status = 1; 7 | optional int32 is_follow = 2; 8 | optional int32 is_followed = 3; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.SmallCoverRcmdItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message SmallCoverRcmdItem { 6 | optional string title = 1; 7 | optional string cover = 2; 8 | optional string uri = 3; 9 | optional string param = 4; 10 | optional string goto = 5; 11 | optional string cover_right_text_1 = 6; 12 | optional string right_desc_1 = 7; 13 | optional string right_desc_2 = 8; 14 | optional string cover_gif = 9; 15 | optional int32 right_icon_1 = 10; 16 | optional int32 right_icon_2 = 11; 17 | optional string cover_right_text_content_description = 12; 18 | optional string right_desc_1_content_description = 13; 19 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.SmallCoverV5.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Up.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 8 | import "pyproto/com.bapis.bilibili.app.card.v1.HotwordEntrance.proto"; 9 | 10 | message SmallCoverV5 { 11 | optional Base base = 1; 12 | optional string cover_gif = 2; 13 | optional Up up = 3; 14 | optional string cover_right_text_1 = 4; 15 | optional string right_desc_1 = 5; 16 | optional string right_desc_2 = 6; 17 | optional ReasonStyle rcmd_reason_style = 7; 18 | optional HotwordEntrance hotword_entrance = 8; 19 | optional ReasonStyle corner_mark_style = 9; 20 | optional int32 right_icon_1 = 10; 21 | optional int32 right_icon_2 = 11; 22 | optional ReasonStyle left_corner_mark_style = 12; 23 | optional string cover_right_text_content_description = 13; 24 | optional string right_desc_1_content_description = 14; 25 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.ThreeItemAllV2.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ReasonStyle.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | import "pyproto/com.bapis.bilibili.app.card.v1.TwoItemHV1Item.proto"; 8 | 9 | message ThreeItemAllV2 { 10 | optional Base base = 1; 11 | optional ReasonStyle top_rcmd_reason_style = 2; 12 | repeated TwoItemHV1Item item = 3; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.ThreeItemV1.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.ThreeItemV1Item.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 7 | 8 | message ThreeItemV1 { 9 | optional Base base = 1; 10 | optional int32 title_icon = 2; 11 | optional string more_uri = 3; 12 | optional string more_text = 4; 13 | repeated ThreeItemV1Item items = 5; 14 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.ThreeItemV1Item.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Base.proto"; 6 | 7 | message ThreeItemV1Item { 8 | optional Base base = 1; 9 | optional string cover_left_text = 2; 10 | optional int32 cover_left_icon = 3; 11 | optional string desc_1 = 4; 12 | optional string desc_2 = 5; 13 | optional string badge = 6; 14 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.ThreePoint.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.DislikeReason.proto"; 6 | 7 | message ThreePoint { 8 | repeated DislikeReason dislike_reasons = 1; 9 | repeated DislikeReason feedbacks = 2; 10 | optional int32 watch_later = 3; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.TwoItemHV1Item.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Args.proto"; 6 | 7 | message TwoItemHV1Item { 8 | optional string title = 1; 9 | optional string cover = 2; 10 | optional string uri = 3; 11 | optional string param = 4; 12 | optional Args args = 5; 13 | optional string goto = 6; 14 | optional string cover_left_text_1 = 7; 15 | optional int32 cover_left_icon_1 = 8; 16 | optional string cover_right_text = 9; 17 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.Up.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Button.proto"; 6 | import "pyproto/com.bapis.bilibili.app.card.v1.Avatar.proto"; 7 | 8 | message Up { 9 | optional int64 id = 1; 10 | optional string name = 2; 11 | optional string desc = 3; 12 | optional Avatar avatar = 4; 13 | optional int32 official_icon = 5; 14 | optional Button desc_button = 6; 15 | optional string cooperation = 7; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.card.v1.UpArgs.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.card.v1; 4 | 5 | message UpArgs { 6 | optional int64 up_id = 1; 7 | optional string up_name = 2; 8 | optional string up_face = 3; 9 | optional int64 selected = 4; 10 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.show.popular.v1.Bubble.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.show.popular.v1; 4 | 5 | message Bubble { 6 | optional string bubble_content = 1; 7 | optional int32 version = 2; 8 | optional int64 stime = 3; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.show.popular.v1.Config.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.show.popular.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.show.popular.v1.EntranceShow.proto"; 6 | 7 | message Config { 8 | optional string item_title = 1; 9 | optional string bottom_text = 2; 10 | optional string bottom_text_cover = 3; 11 | optional string bottom_text_url = 4; 12 | repeated EntranceShow top_items = 5; 13 | optional string head_image = 6; 14 | repeated EntranceShow page_items = 7; 15 | optional int64 hit = 8; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.show.popular.v1.EntranceShow.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.show.popular.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.show.popular.v1.Bubble.proto"; 6 | 7 | message EntranceShow { 8 | optional string icon = 1; 9 | optional string title = 2; 10 | optional string module_id = 3; 11 | optional string uri = 4; 12 | optional Bubble bubble = 5; 13 | optional int64 entrance_id = 6; 14 | optional string top_photo = 7; 15 | optional int32 entrance_type = 8; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.bapis.bilibili.app.show.popular.v1.PopularReply.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.bapis.bilibili.app.show.popular.v1; 4 | 5 | import "pyproto/com.bapis.bilibili.app.card.v1.Card.proto"; 6 | import "pyproto/com.bapis.bilibili.app.show.popular.v1.Config.proto"; 7 | 8 | message PopularReply { 9 | repeated com.bapis.bilibili.app.card.v1.Card items = 1; 10 | optional Config config = 2; 11 | optional string ver = 3; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Action.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | message Action { 6 | optional string url = 1; 7 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Attent.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.AttentUIInfo.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.AttentTimeConfigType.proto"; 7 | import "pyproto/com.tencent.qqlive.protocol.pb.CalendarItem.proto"; 8 | import "pyproto/com.tencent.qqlive.protocol.pb.AttentFakeDisplayInfo.proto"; 9 | 10 | message Attent { 11 | optional string attent_key = 1; 12 | optional int32 attent_state = 2; 13 | optional int64 update_time = 3; 14 | optional AttentUIInfo attent_view_info = 4; 15 | optional AttentFakeDisplayInfo fake_display_info = 5; 16 | optional string attent_from = 6; 17 | optional CalendarItem calendar_item = 7; 18 | optional AttentTimeConfigType attent_time_config_type = 8; 19 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.AttentFakeDisplayInfo.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.Poster.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.VideoIdSet.proto"; 7 | import "pyproto/com.tencent.qqlive.protocol.pb.Operation.proto"; 8 | 9 | message AttentFakeDisplayInfo { 10 | optional Poster poster = 1; 11 | optional Operation action = 2; 12 | optional VideoIdSet video_id_set = 3; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.AttentTimeConfigType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | enum AttentTimeConfigType { 6 | ATTENT_TIME_CONFIG_TYPE_UNSPECIFIED = 0; 7 | ATTENT_TIME_CONFIG_TYPE_WITH_EXPLICIT_TIME = 1; 8 | ATTENT_TIME_CONFIG_TYPE_WITHOUT_EXPLICIT_TIME = 2; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.AttentUIInfo.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.Poster.proto"; 6 | 7 | message AttentUIInfo { 8 | optional string unattent_title = 1; 9 | optional string attent_title = 2; 10 | optional Poster poster = 3; 11 | optional float release_time = 4; 12 | optional Poster attent_poster = 5; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Block.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.MarkLabelList.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.Operation.proto"; 7 | import "pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto"; 8 | import "pyproto/com.tencent.qqlive.protocol.pb.BlockType.proto"; 9 | import "pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto"; 10 | import "google/protobuf/any.proto"; 11 | 12 | message Block { 13 | optional BlockType block_type = 1; 14 | optional int32 block_style_type = 2; 15 | optional CSSStruct css_struct = 3; 16 | optional google.protobuf.Any data = 4; 17 | map operation_map = 5; 18 | map mark_label_list_map = 6; 19 | map report_dict = 7; 20 | optional string block_id = 9; 21 | optional string vn_view_id = 10; 22 | optional ExtraData extra_data = 11; 23 | optional string related_id = 12; 24 | optional string parent_related_id = 13; 25 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.BlockList.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.Block.proto"; 6 | 7 | message BlockList { 8 | repeated Block blocks = 1; 9 | repeated Block optional_blocks = 2; 10 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto"; 6 | 7 | message CSSStruct { 8 | optional string css_name = 1; 9 | map style_sheet = 3; 10 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.CalendarItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | message CalendarItem { 6 | optional int64 start_time = 1; 7 | optional bool is_full_day = 2; 8 | optional string description = 3; 9 | optional string title = 4; 10 | optional int64 end_time = 5; 11 | optional int64 before_seconds = 6; 12 | optional string jump_url = 7; 13 | optional string jump_url_scheme = 8; 14 | map service_type = 9; 15 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.ChangeSectionResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSet.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.Poster.proto"; 7 | import "pyproto/com.tencent.qqlive.protocol.pb.Attent.proto"; 8 | import "pyproto/com.tencent.qqlive.protocol.pb.Action.proto"; 9 | import "pyproto/com.tencent.qqlive.protocol.pb.Section.proto"; 10 | 11 | message ChangeSectionResponse { 12 | optional Section section = 1; 13 | map section_map = 2; 14 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | message CommonStyleMap { 6 | map style_map = 1; 7 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "google/protobuf/any.proto"; 6 | 7 | message ExtraData { 8 | map data = 1; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.ImageFacePoint.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | message ImageFacePoint { 6 | optional float x_float = 1; 7 | optional float y_float = 2; 8 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto"; 6 | 7 | message MarkLabel { 8 | optional MarkLabelType mark_label_type = 1; 9 | optional int32 position = 2; 10 | optional string prime_text = 3; 11 | optional string mark_image_url = 4; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.MarkLabelList.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto"; 6 | 7 | message MarkLabelList { 8 | repeated MarkLabel mark_label_list = 1; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | enum MarkLabelType { 6 | MARK_LABEL_TYPE_SINGLE_TEXT = 0; 7 | MARK_LABEL_TYPE_IMAGE = 1; 8 | MARK_LABEL_TYPE_LOTTIE = 2; 9 | MARK_LABEL_TYPE_LEFT_POSTER_RIGHT_TEXT = 3; 10 | MARK_LABEL_TYPE_NUMBER = 4; 11 | MARK_LABEL_TYPE_FIRST_CAPITAL = 5; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Operation.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "google/protobuf/any.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.OperationType.proto"; 7 | 8 | message Operation { 9 | optional OperationType operation_type = 1; 10 | optional google.protobuf.Any operation = 2; 11 | map report_dict = 3; 12 | optional string report_id = 4; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.OperationType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | enum OperationType { 6 | OPERATION_TYPE_ACTION = 0; 7 | OPERATION_TYPE_ATTENT = 1; 8 | OPERATION_TYPE_SHARE = 2; 9 | OPERATION_TYPE_PRAISE = 3; 10 | OPERATION_TYPE_DOWNLOAD = 4; 11 | OPERATION_TYPE_FEEDBACK = 5; 12 | OPERATION_TYPE_PLAY_VIDEO = 6; 13 | OPERATION_TYPE_SCROLL_LIST = 8; 14 | OPERATION_TYPE_CHANGE_SECTION = 9; 15 | OPERATION_TYPE_EXTRA_BLOCK_LIST = 10; 16 | OPERATION_TYPE_REPORT = 11; 17 | OPERATION_TYPE_FOLLOW = 12; 18 | OPERATION_TYPE_SCHEME_ACTION = 13; 19 | OPERATION_TYPE_TRANSITION_IMAGE_PREVIEW = 14; 20 | OPERATION_TYPE_EMPTY = 15; 21 | OPERATION_TYPE_COMMENT = 16; 22 | OPERATION_TYPE_REFRESH_SECTION = 17; 23 | OPERATION_TYPE_SEARCH = 18; 24 | OPERATION_TYPE_INTERACT_TRIGGER = 19; 25 | OPERATION_TYPE_FLIP_SECTION = 20; 26 | OPERATION_TYPE_INTERFERENCE = 21; 27 | OPERATION_TYPE_INSERT_NEW_LINE_CONFIG = 22; 28 | OPERATION_TYPE_CARD_FLOP = 23; 29 | OPERATION_TYPE_TITLE_TOPIC = 24; 30 | OPERATION_TYPE_FLOP_CARD_OPERATE = 25; 31 | OPERATION_TYPE_FLOP_CARD_INFO = 26; 32 | OPERATION_TYPE_POPUP_CONTENT = 27; 33 | OPERATION_TYPE_USER_INFO_RED_DOT = 28; 34 | OPERATION_TYPE_CREATOR_JUMP_PAGE = 29; 35 | OPERATION_TYPE_SUBSCRIBE = 30; 36 | OPERATION_TYPE_SHOW_OPER_DIALOG = 31; 37 | OPERATION_TYPE_COMMON_FLOAT = 32; 38 | OPERATION_TYPE_SIMPLE_PLAYER = 33; 39 | OPERATION_TYPE_MESSAGE_DELETE = 34; 40 | OPERATION_TYPE_TOAST_INFO = 35; 41 | OPERATION_TYPE_CREATOR_VIDEO_OPERATE = 36; 42 | OPERATION_TYPE_ATTITUDE = 37; 43 | OPERATION_TYPE_UPDATE_ALBUMS = 38; 44 | OPERATION_TYPE_UPDATE_ALBUMS_DEFAULT = 39; 45 | OPERATION_TYPE_REPLACE_MODULE = 40; 46 | OPERATION_TYPE_COMMON_NEGATIVE_FEEDBACK = 41; 47 | OPERATION_TYPE_TRAFFIC_SPREAD_INFO = 42; 48 | OPERATION_TYPE_TOPIC_BOOST_INFO = 43; 49 | OPERATION_TYPE_GAME_BASE_INFO = 44; 50 | OPERATION_TYPE_GAME_BOOK_INFO = 45; 51 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Poster.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.ImageFacePoint.proto"; 6 | 7 | message Poster { 8 | optional string title = 1; 9 | optional string sub_title = 2; 10 | optional string third_title = 3; 11 | optional string image_url = 4; 12 | optional float picture_ratio = 5; 13 | optional ImageFacePoint face_point = 6; 14 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.Section.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.SectionType.proto"; 6 | import "pyproto/com.tencent.qqlive.protocol.pb.Operation.proto"; 7 | import "pyproto/com.tencent.qqlive.protocol.pb.BlockList.proto"; 8 | import "pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto"; 9 | import "pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto"; 10 | 11 | message Section { 12 | optional SectionType section_type = 1; 13 | optional int32 section_layout_type = 2; 14 | optional CSSStruct css_struct = 3; 15 | optional string section_id = 4; 16 | optional BlockList block_list = 5; 17 | optional ExtraData extra_any_data = 7; 18 | map report_dict = 8; 19 | map special_blocks = 9; 20 | map operation_map = 10; 21 | optional string merge_id = 11; 22 | optional bool block_related = 12; 23 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.SectionType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | enum SectionType { 6 | SECTION_TYPE_SINGLE_BLOCK = 0; 7 | SECTION_TYPE_UNSPECIFIED = -1; 8 | SECTION_TYPE_BLOCK_LIST = 1; 9 | SECTION_TYPE_COLLECTION_BLOCKS = 2; 10 | SECTION_TYPE_JCE_CUSTOM = 100001; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSet.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | import "pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto"; 6 | 7 | message VideoIdKeyValueSet { 8 | optional VideoIdKeyValueSetKey item_id_type = 1; 9 | optional string item_id = 2; 10 | optional VideoIdKeyValueSetKey sub_item_id_type = 3; 11 | optional string sub_item_id = 4; 12 | optional VideoIdKeyValueSetKey third_item_id_type = 5; 13 | optional string third_item_id = 6; 14 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | enum VideoIdKeyValueSetKey { 6 | VIDEO_ID_KEY_VALUE_SET_KEY_DEFAULT = 0; 7 | VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_ID = 1; 8 | VIDEO_ID_KEY_VALUE_SET_KEY_COVER_ID = 2; 9 | VIDEO_ID_KEY_VALUE_SET_KEY_COLUMN_ID = 3; 10 | VIDEO_ID_KEY_VALUE_SET_KEY_PROGRAM_ID = 4; 11 | VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_SHORTID = 5; 12 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/com.tencent.qqlive.protocol.pb.VideoIdSet.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package com.tencent.qqlive.protocol.pb; 4 | 5 | message VideoIdSet { 6 | optional string vid = 1; 7 | optional string cid = 2; 8 | optional string lid = 3; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/tbclient.Error.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package tbclient; 4 | 5 | message Error { 6 | optional int32 errorno = 1; 7 | optional string errmsg = 2; 8 | optional string usermsg = 3; 9 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/tbclient.GetBubbleList.DataRes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package tbclient.GetBubbleList; 4 | 5 | import "pyproto/tbclient.ThemeBgProp.proto"; 6 | import "pyproto/tbclient.ThemeRecommand.proto"; 7 | 8 | message DataRes { 9 | optional tbclient.ThemeRecommand recommend = 1; 10 | repeated tbclient.ThemeBgProp bubbles = 2; 11 | optional uint32 hasmore = 3; 12 | optional uint32 is_default = 4; 13 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/tbclient.GetBubbleList.GetBubbleListResIdl.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package tbclient.GetBubbleList; 4 | 5 | import "pyproto/tbclient.Error.proto"; 6 | import "pyproto/tbclient.GetBubbleList.DataRes.proto"; 7 | 8 | message GetBubbleListResIdl { 9 | optional DataRes data = 1; 10 | optional tbclient.Error error = 2; 11 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/tbclient.ThemeBgProp.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package tbclient; 4 | 5 | message ThemeBgProp { 6 | optional int32 props_id = 1; 7 | optional string title = 2; 8 | optional string description = 3; 9 | optional string example_url = 4; 10 | optional string permission = 5; 11 | optional string props_state_img = 6; 12 | optional uint32 in_use = 7; 13 | optional int32 free_user_level = 8; 14 | optional string activity_url = 9; 15 | optional int32 is_finished = 10; 16 | } -------------------------------------------------------------------------------- /frida_protobuf/protos/pyproto/tbclient.ThemeRecommand.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package tbclient; 4 | 5 | message ThemeRecommand { 6 | optional string icon = 1; 7 | optional string tip_text = 2; 8 | optional string button_url = 3; 9 | optional string button_text = 4; 10 | } -------------------------------------------------------------------------------- /frida_protobuf/sample/bilibili_PopularReply.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeeFlowerX/frida-protobuf/038d13c1286f7b9304de6f8b2a49bbc209953fed/frida_protobuf/sample/bilibili_PopularReply.txt -------------------------------------------------------------------------------- /frida_protobuf/sample/qqlive_ChangeSectionResponse.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeeFlowerX/frida-protobuf/038d13c1286f7b9304de6f8b2a49bbc209953fed/frida_protobuf/sample/qqlive_ChangeSectionResponse.txt -------------------------------------------------------------------------------- /frida_protobuf/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.0.0" -------------------------------------------------------------------------------- /pyproto/com/bapis/bilibili/app/card/v1/Bubble_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.bapis.bilibili.app.card.v1.Bubble.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.bapis.bilibili.app.card.v1.Bubble.proto', 18 | package='com.bapis.bilibili.app.card.v1', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n3pyproto/com.bapis.bilibili.app.card.v1.Bubble.proto\x12\x1e\x63om.bapis.bilibili.app.card.v1\"x\n\x06\x42ubble\x12\x1b\n\x0e\x62ubble_content\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07version\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x12\n\x05stime\x18\x03 \x01(\x03H\x02\x88\x01\x01\x42\x11\n\x0f_bubble_contentB\n\n\x08_versionB\x08\n\x06_stimeb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _BUBBLE = _descriptor.Descriptor( 29 | name='Bubble', 30 | full_name='com.bapis.bilibili.app.card.v1.Bubble', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='bubble_content', full_name='com.bapis.bilibili.app.card.v1.Bubble.bubble_content', index=0, 38 | number=1, type=9, cpp_type=9, label=1, 39 | has_default_value=False, default_value=b"".decode('utf-8'), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='version', full_name='com.bapis.bilibili.app.card.v1.Bubble.version', index=1, 45 | number=2, type=5, cpp_type=1, label=1, 46 | has_default_value=False, default_value=0, 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | _descriptor.FieldDescriptor( 51 | name='stime', full_name='com.bapis.bilibili.app.card.v1.Bubble.stime', index=2, 52 | number=3, type=3, cpp_type=2, label=1, 53 | has_default_value=False, default_value=0, 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 57 | ], 58 | extensions=[ 59 | ], 60 | nested_types=[], 61 | enum_types=[ 62 | ], 63 | serialized_options=None, 64 | is_extendable=False, 65 | syntax='proto3', 66 | extension_ranges=[], 67 | oneofs=[ 68 | _descriptor.OneofDescriptor( 69 | name='_bubble_content', full_name='com.bapis.bilibili.app.card.v1.Bubble._bubble_content', 70 | index=0, containing_type=None, 71 | create_key=_descriptor._internal_create_key, 72 | fields=[]), 73 | _descriptor.OneofDescriptor( 74 | name='_version', full_name='com.bapis.bilibili.app.card.v1.Bubble._version', 75 | index=1, containing_type=None, 76 | create_key=_descriptor._internal_create_key, 77 | fields=[]), 78 | _descriptor.OneofDescriptor( 79 | name='_stime', full_name='com.bapis.bilibili.app.card.v1.Bubble._stime', 80 | index=2, containing_type=None, 81 | create_key=_descriptor._internal_create_key, 82 | fields=[]), 83 | ], 84 | serialized_start=87, 85 | serialized_end=207, 86 | ) 87 | 88 | _BUBBLE.oneofs_by_name['_bubble_content'].fields.append( 89 | _BUBBLE.fields_by_name['bubble_content']) 90 | _BUBBLE.fields_by_name['bubble_content'].containing_oneof = _BUBBLE.oneofs_by_name['_bubble_content'] 91 | _BUBBLE.oneofs_by_name['_version'].fields.append( 92 | _BUBBLE.fields_by_name['version']) 93 | _BUBBLE.fields_by_name['version'].containing_oneof = _BUBBLE.oneofs_by_name['_version'] 94 | _BUBBLE.oneofs_by_name['_stime'].fields.append( 95 | _BUBBLE.fields_by_name['stime']) 96 | _BUBBLE.fields_by_name['stime'].containing_oneof = _BUBBLE.oneofs_by_name['_stime'] 97 | DESCRIPTOR.message_types_by_name['Bubble'] = _BUBBLE 98 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 99 | 100 | Bubble = _reflection.GeneratedProtocolMessageType('Bubble', (_message.Message,), { 101 | 'DESCRIPTOR' : _BUBBLE, 102 | '__module__' : 'pyproto.com.bapis.bilibili.app.card.v1.Bubble_pb2' 103 | # @@protoc_insertion_point(class_scope:com.bapis.bilibili.app.card.v1.Bubble) 104 | }) 105 | _sym_db.RegisterMessage(Bubble) 106 | 107 | 108 | # @@protoc_insertion_point(module_scope) 109 | -------------------------------------------------------------------------------- /pyproto/com/bapis/bilibili/app/card/v1/DislikeReason_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.bapis.bilibili.app.card.v1.DislikeReason.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.bapis.bilibili.app.card.v1.DislikeReason.proto', 18 | package='com.bapis.bilibili.app.card.v1', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n:pyproto/com.bapis.bilibili.app.card.v1.DislikeReason.proto\x12\x1e\x63om.bapis.bilibili.app.card.v1\"C\n\rDislikeReason\x12\x0f\n\x02id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x11\n\x04name\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _DISLIKEREASON = _descriptor.Descriptor( 29 | name='DislikeReason', 30 | full_name='com.bapis.bilibili.app.card.v1.DislikeReason', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='id', full_name='com.bapis.bilibili.app.card.v1.DislikeReason.id', index=0, 38 | number=1, type=3, cpp_type=2, label=1, 39 | has_default_value=False, default_value=0, 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='name', full_name='com.bapis.bilibili.app.card.v1.DislikeReason.name', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | ], 51 | extensions=[ 52 | ], 53 | nested_types=[], 54 | enum_types=[ 55 | ], 56 | serialized_options=None, 57 | is_extendable=False, 58 | syntax='proto3', 59 | extension_ranges=[], 60 | oneofs=[ 61 | _descriptor.OneofDescriptor( 62 | name='_id', full_name='com.bapis.bilibili.app.card.v1.DislikeReason._id', 63 | index=0, containing_type=None, 64 | create_key=_descriptor._internal_create_key, 65 | fields=[]), 66 | _descriptor.OneofDescriptor( 67 | name='_name', full_name='com.bapis.bilibili.app.card.v1.DislikeReason._name', 68 | index=1, containing_type=None, 69 | create_key=_descriptor._internal_create_key, 70 | fields=[]), 71 | ], 72 | serialized_start=94, 73 | serialized_end=161, 74 | ) 75 | 76 | _DISLIKEREASON.oneofs_by_name['_id'].fields.append( 77 | _DISLIKEREASON.fields_by_name['id']) 78 | _DISLIKEREASON.fields_by_name['id'].containing_oneof = _DISLIKEREASON.oneofs_by_name['_id'] 79 | _DISLIKEREASON.oneofs_by_name['_name'].fields.append( 80 | _DISLIKEREASON.fields_by_name['name']) 81 | _DISLIKEREASON.fields_by_name['name'].containing_oneof = _DISLIKEREASON.oneofs_by_name['_name'] 82 | DESCRIPTOR.message_types_by_name['DislikeReason'] = _DISLIKEREASON 83 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 84 | 85 | DislikeReason = _reflection.GeneratedProtocolMessageType('DislikeReason', (_message.Message,), { 86 | 'DESCRIPTOR' : _DISLIKEREASON, 87 | '__module__' : 'pyproto.com.bapis.bilibili.app.card.v1.DislikeReason_pb2' 88 | # @@protoc_insertion_point(class_scope:com.bapis.bilibili.app.card.v1.DislikeReason) 89 | }) 90 | _sym_db.RegisterMessage(DislikeReason) 91 | 92 | 93 | # @@protoc_insertion_point(module_scope) 94 | -------------------------------------------------------------------------------- /pyproto/com/bapis/bilibili/app/card/v1/HotTopicItem_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto', 18 | package='com.bapis.bilibili.app.card.v1', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n9pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto\x12\x1e\x63om.bapis.bilibili.app.card.v1\"\x80\x01\n\x0cHotTopicItem\x12\x12\n\x05\x63over\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03uri\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05param\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x08\n\x06_coverB\x06\n\x04_uriB\x08\n\x06_paramB\x07\n\x05_nameb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _HOTTOPICITEM = _descriptor.Descriptor( 29 | name='HotTopicItem', 30 | full_name='com.bapis.bilibili.app.card.v1.HotTopicItem', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='cover', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem.cover', index=0, 38 | number=1, type=9, cpp_type=9, label=1, 39 | has_default_value=False, default_value=b"".decode('utf-8'), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='uri', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem.uri', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | _descriptor.FieldDescriptor( 51 | name='param', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem.param', index=2, 52 | number=3, type=9, cpp_type=9, label=1, 53 | has_default_value=False, default_value=b"".decode('utf-8'), 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 57 | _descriptor.FieldDescriptor( 58 | name='name', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem.name', index=3, 59 | number=4, type=9, cpp_type=9, label=1, 60 | has_default_value=False, default_value=b"".decode('utf-8'), 61 | message_type=None, enum_type=None, containing_type=None, 62 | is_extension=False, extension_scope=None, 63 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 64 | ], 65 | extensions=[ 66 | ], 67 | nested_types=[], 68 | enum_types=[ 69 | ], 70 | serialized_options=None, 71 | is_extendable=False, 72 | syntax='proto3', 73 | extension_ranges=[], 74 | oneofs=[ 75 | _descriptor.OneofDescriptor( 76 | name='_cover', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem._cover', 77 | index=0, containing_type=None, 78 | create_key=_descriptor._internal_create_key, 79 | fields=[]), 80 | _descriptor.OneofDescriptor( 81 | name='_uri', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem._uri', 82 | index=1, containing_type=None, 83 | create_key=_descriptor._internal_create_key, 84 | fields=[]), 85 | _descriptor.OneofDescriptor( 86 | name='_param', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem._param', 87 | index=2, containing_type=None, 88 | create_key=_descriptor._internal_create_key, 89 | fields=[]), 90 | _descriptor.OneofDescriptor( 91 | name='_name', full_name='com.bapis.bilibili.app.card.v1.HotTopicItem._name', 92 | index=3, containing_type=None, 93 | create_key=_descriptor._internal_create_key, 94 | fields=[]), 95 | ], 96 | serialized_start=94, 97 | serialized_end=222, 98 | ) 99 | 100 | _HOTTOPICITEM.oneofs_by_name['_cover'].fields.append( 101 | _HOTTOPICITEM.fields_by_name['cover']) 102 | _HOTTOPICITEM.fields_by_name['cover'].containing_oneof = _HOTTOPICITEM.oneofs_by_name['_cover'] 103 | _HOTTOPICITEM.oneofs_by_name['_uri'].fields.append( 104 | _HOTTOPICITEM.fields_by_name['uri']) 105 | _HOTTOPICITEM.fields_by_name['uri'].containing_oneof = _HOTTOPICITEM.oneofs_by_name['_uri'] 106 | _HOTTOPICITEM.oneofs_by_name['_param'].fields.append( 107 | _HOTTOPICITEM.fields_by_name['param']) 108 | _HOTTOPICITEM.fields_by_name['param'].containing_oneof = _HOTTOPICITEM.oneofs_by_name['_param'] 109 | _HOTTOPICITEM.oneofs_by_name['_name'].fields.append( 110 | _HOTTOPICITEM.fields_by_name['name']) 111 | _HOTTOPICITEM.fields_by_name['name'].containing_oneof = _HOTTOPICITEM.oneofs_by_name['_name'] 112 | DESCRIPTOR.message_types_by_name['HotTopicItem'] = _HOTTOPICITEM 113 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 114 | 115 | HotTopicItem = _reflection.GeneratedProtocolMessageType('HotTopicItem', (_message.Message,), { 116 | 'DESCRIPTOR' : _HOTTOPICITEM, 117 | '__module__' : 'pyproto.com.bapis.bilibili.app.card.v1.HotTopicItem_pb2' 118 | # @@protoc_insertion_point(class_scope:com.bapis.bilibili.app.card.v1.HotTopicItem) 119 | }) 120 | _sym_db.RegisterMessage(HotTopicItem) 121 | 122 | 123 | # @@protoc_insertion_point(module_scope) 124 | -------------------------------------------------------------------------------- /pyproto/com/bapis/bilibili/app/card/v1/HotTopic_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.bapis.bilibili.app.card.v1.HotTopic.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.com.bapis.bilibili.app.card.v1 import Base_pb2 as pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_Base__pb2 15 | from pyproto.com.bapis.bilibili.app.card.v1 import HotTopicItem_pb2 as pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_HotTopicItem__pb2 16 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='pyproto/com.bapis.bilibili.app.card.v1.HotTopic.proto', 20 | package='com.bapis.bilibili.app.card.v1', 21 | syntax='proto3', 22 | serialized_options=None, 23 | create_key=_descriptor._internal_create_key, 24 | serialized_pb=b'\n5pyproto/com.bapis.bilibili.app.card.v1.HotTopic.proto\x12\x1e\x63om.bapis.bilibili.app.card.v1\x1a\x31pyproto/com.bapis.bilibili.app.card.v1.Base.proto\x1a\x39pyproto/com.bapis.bilibili.app.card.v1.HotTopicItem.proto\"\xa5\x01\n\x08HotTopic\x12\x37\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32$.com.bapis.bilibili.app.card.v1.BaseH\x00\x88\x01\x01\x12\x11\n\x04\x64\x65sc\x18\x02 \x01(\tH\x01\x88\x01\x01\x12;\n\x05items\x18\x03 \x03(\x0b\x32,.com.bapis.bilibili.app.card.v1.HotTopicItemB\x07\n\x05_baseB\x07\n\x05_descb\x06proto3' 25 | , 26 | dependencies=[pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_Base__pb2.DESCRIPTOR,pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_HotTopicItem__pb2.DESCRIPTOR,]) 27 | 28 | 29 | 30 | 31 | _HOTTOPIC = _descriptor.Descriptor( 32 | name='HotTopic', 33 | full_name='com.bapis.bilibili.app.card.v1.HotTopic', 34 | filename=None, 35 | file=DESCRIPTOR, 36 | containing_type=None, 37 | create_key=_descriptor._internal_create_key, 38 | fields=[ 39 | _descriptor.FieldDescriptor( 40 | name='base', full_name='com.bapis.bilibili.app.card.v1.HotTopic.base', index=0, 41 | number=1, type=11, cpp_type=10, label=1, 42 | has_default_value=False, default_value=None, 43 | message_type=None, enum_type=None, containing_type=None, 44 | is_extension=False, extension_scope=None, 45 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 46 | _descriptor.FieldDescriptor( 47 | name='desc', full_name='com.bapis.bilibili.app.card.v1.HotTopic.desc', index=1, 48 | number=2, type=9, cpp_type=9, label=1, 49 | has_default_value=False, default_value=b"".decode('utf-8'), 50 | message_type=None, enum_type=None, containing_type=None, 51 | is_extension=False, extension_scope=None, 52 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 53 | _descriptor.FieldDescriptor( 54 | name='items', full_name='com.bapis.bilibili.app.card.v1.HotTopic.items', index=2, 55 | number=3, type=11, cpp_type=10, label=3, 56 | has_default_value=False, default_value=[], 57 | message_type=None, enum_type=None, containing_type=None, 58 | is_extension=False, extension_scope=None, 59 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 60 | ], 61 | extensions=[ 62 | ], 63 | nested_types=[], 64 | enum_types=[ 65 | ], 66 | serialized_options=None, 67 | is_extendable=False, 68 | syntax='proto3', 69 | extension_ranges=[], 70 | oneofs=[ 71 | _descriptor.OneofDescriptor( 72 | name='_base', full_name='com.bapis.bilibili.app.card.v1.HotTopic._base', 73 | index=0, containing_type=None, 74 | create_key=_descriptor._internal_create_key, 75 | fields=[]), 76 | _descriptor.OneofDescriptor( 77 | name='_desc', full_name='com.bapis.bilibili.app.card.v1.HotTopic._desc', 78 | index=1, containing_type=None, 79 | create_key=_descriptor._internal_create_key, 80 | fields=[]), 81 | ], 82 | serialized_start=200, 83 | serialized_end=365, 84 | ) 85 | 86 | _HOTTOPIC.fields_by_name['base'].message_type = pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_Base__pb2._BASE 87 | _HOTTOPIC.fields_by_name['items'].message_type = pyproto_dot_com_dot_bapis_dot_bilibili_dot_app_dot_card_dot_v1_dot_HotTopicItem__pb2._HOTTOPICITEM 88 | _HOTTOPIC.oneofs_by_name['_base'].fields.append( 89 | _HOTTOPIC.fields_by_name['base']) 90 | _HOTTOPIC.fields_by_name['base'].containing_oneof = _HOTTOPIC.oneofs_by_name['_base'] 91 | _HOTTOPIC.oneofs_by_name['_desc'].fields.append( 92 | _HOTTOPIC.fields_by_name['desc']) 93 | _HOTTOPIC.fields_by_name['desc'].containing_oneof = _HOTTOPIC.oneofs_by_name['_desc'] 94 | DESCRIPTOR.message_types_by_name['HotTopic'] = _HOTTOPIC 95 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 96 | 97 | HotTopic = _reflection.GeneratedProtocolMessageType('HotTopic', (_message.Message,), { 98 | 'DESCRIPTOR' : _HOTTOPIC, 99 | '__module__' : 'pyproto.com.bapis.bilibili.app.card.v1.HotTopic_pb2' 100 | # @@protoc_insertion_point(class_scope:com.bapis.bilibili.app.card.v1.HotTopic) 101 | }) 102 | _sym_db.RegisterMessage(HotTopic) 103 | 104 | 105 | # @@protoc_insertion_point(module_scope) 106 | -------------------------------------------------------------------------------- /pyproto/com/bapis/bilibili/app/card/v1/HotwordEntrance_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.bapis.bilibili.app.card.v1.HotwordEntrance.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.bapis.bilibili.app.card.v1.HotwordEntrance.proto', 18 | package='com.bapis.bilibili.app.card.v1', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n\n\x0foptional_blocks\x18\x02 \x03(\x0b\x32%.com.tencent.qqlive.protocol.pb.Blockb\x06proto3' 24 | , 25 | dependencies=[pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_Block__pb2.DESCRIPTOR,]) 26 | 27 | 28 | 29 | 30 | _BLOCKLIST = _descriptor.Descriptor( 31 | name='BlockList', 32 | full_name='com.tencent.qqlive.protocol.pb.BlockList', 33 | filename=None, 34 | file=DESCRIPTOR, 35 | containing_type=None, 36 | create_key=_descriptor._internal_create_key, 37 | fields=[ 38 | _descriptor.FieldDescriptor( 39 | name='blocks', full_name='com.tencent.qqlive.protocol.pb.BlockList.blocks', index=0, 40 | number=1, type=11, cpp_type=10, label=3, 41 | has_default_value=False, default_value=[], 42 | message_type=None, enum_type=None, containing_type=None, 43 | is_extension=False, extension_scope=None, 44 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 45 | _descriptor.FieldDescriptor( 46 | name='optional_blocks', full_name='com.tencent.qqlive.protocol.pb.BlockList.optional_blocks', index=1, 47 | number=2, type=11, cpp_type=10, label=3, 48 | has_default_value=False, default_value=[], 49 | message_type=None, enum_type=None, containing_type=None, 50 | is_extension=False, extension_scope=None, 51 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 52 | ], 53 | extensions=[ 54 | ], 55 | nested_types=[], 56 | enum_types=[ 57 | ], 58 | serialized_options=None, 59 | is_extendable=False, 60 | syntax='proto3', 61 | extension_ranges=[], 62 | oneofs=[ 63 | ], 64 | serialized_start=143, 65 | serialized_end=273, 66 | ) 67 | 68 | _BLOCKLIST.fields_by_name['blocks'].message_type = pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_Block__pb2._BLOCK 69 | _BLOCKLIST.fields_by_name['optional_blocks'].message_type = pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_Block__pb2._BLOCK 70 | DESCRIPTOR.message_types_by_name['BlockList'] = _BLOCKLIST 71 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 72 | 73 | BlockList = _reflection.GeneratedProtocolMessageType('BlockList', (_message.Message,), { 74 | 'DESCRIPTOR' : _BLOCKLIST, 75 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.BlockList_pb2' 76 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.BlockList) 77 | }) 78 | _sym_db.RegisterMessage(BlockList) 79 | 80 | 81 | # @@protoc_insertion_point(module_scope) 82 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/CSSStruct_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.com.tencent.qqlive.protocol.pb import CommonStyleMap_pb2 as pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_CommonStyleMap__pb2 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n6pyproto/com.tencent.qqlive.protocol.pb.CSSStruct.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\x1a;pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto\"\xe2\x01\n\tCSSStruct\x12\x15\n\x08\x63ss_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12N\n\x0bstyle_sheet\x18\x03 \x03(\x0b\x32\x39.com.tencent.qqlive.protocol.pb.CSSStruct.StyleSheetEntry\x1a\x61\n\x0fStyleSheetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12=\n\x05value\x18\x02 \x01(\x0b\x32..com.tencent.qqlive.protocol.pb.CommonStyleMap:\x02\x38\x01\x42\x0b\n\t_css_nameb\x06proto3' 24 | , 25 | dependencies=[pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_CommonStyleMap__pb2.DESCRIPTOR,]) 26 | 27 | 28 | 29 | 30 | _CSSSTRUCT_STYLESHEETENTRY = _descriptor.Descriptor( 31 | name='StyleSheetEntry', 32 | full_name='com.tencent.qqlive.protocol.pb.CSSStruct.StyleSheetEntry', 33 | filename=None, 34 | file=DESCRIPTOR, 35 | containing_type=None, 36 | create_key=_descriptor._internal_create_key, 37 | fields=[ 38 | _descriptor.FieldDescriptor( 39 | name='key', full_name='com.tencent.qqlive.protocol.pb.CSSStruct.StyleSheetEntry.key', index=0, 40 | number=1, type=9, cpp_type=9, label=1, 41 | has_default_value=False, default_value=b"".decode('utf-8'), 42 | message_type=None, enum_type=None, containing_type=None, 43 | is_extension=False, extension_scope=None, 44 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 45 | _descriptor.FieldDescriptor( 46 | name='value', full_name='com.tencent.qqlive.protocol.pb.CSSStruct.StyleSheetEntry.value', index=1, 47 | number=2, type=11, cpp_type=10, label=1, 48 | has_default_value=False, default_value=None, 49 | message_type=None, enum_type=None, containing_type=None, 50 | is_extension=False, extension_scope=None, 51 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 52 | ], 53 | extensions=[ 54 | ], 55 | nested_types=[], 56 | enum_types=[ 57 | ], 58 | serialized_options=b'8\001', 59 | is_extendable=False, 60 | syntax='proto3', 61 | extension_ranges=[], 62 | oneofs=[ 63 | ], 64 | serialized_start=268, 65 | serialized_end=365, 66 | ) 67 | 68 | _CSSSTRUCT = _descriptor.Descriptor( 69 | name='CSSStruct', 70 | full_name='com.tencent.qqlive.protocol.pb.CSSStruct', 71 | filename=None, 72 | file=DESCRIPTOR, 73 | containing_type=None, 74 | create_key=_descriptor._internal_create_key, 75 | fields=[ 76 | _descriptor.FieldDescriptor( 77 | name='css_name', full_name='com.tencent.qqlive.protocol.pb.CSSStruct.css_name', index=0, 78 | number=1, type=9, cpp_type=9, label=1, 79 | has_default_value=False, default_value=b"".decode('utf-8'), 80 | message_type=None, enum_type=None, containing_type=None, 81 | is_extension=False, extension_scope=None, 82 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 83 | _descriptor.FieldDescriptor( 84 | name='style_sheet', full_name='com.tencent.qqlive.protocol.pb.CSSStruct.style_sheet', index=1, 85 | number=3, type=11, cpp_type=10, label=3, 86 | has_default_value=False, default_value=[], 87 | message_type=None, enum_type=None, containing_type=None, 88 | is_extension=False, extension_scope=None, 89 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 90 | ], 91 | extensions=[ 92 | ], 93 | nested_types=[_CSSSTRUCT_STYLESHEETENTRY, ], 94 | enum_types=[ 95 | ], 96 | serialized_options=None, 97 | is_extendable=False, 98 | syntax='proto3', 99 | extension_ranges=[], 100 | oneofs=[ 101 | _descriptor.OneofDescriptor( 102 | name='_css_name', full_name='com.tencent.qqlive.protocol.pb.CSSStruct._css_name', 103 | index=0, containing_type=None, 104 | create_key=_descriptor._internal_create_key, 105 | fields=[]), 106 | ], 107 | serialized_start=152, 108 | serialized_end=378, 109 | ) 110 | 111 | _CSSSTRUCT_STYLESHEETENTRY.fields_by_name['value'].message_type = pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_CommonStyleMap__pb2._COMMONSTYLEMAP 112 | _CSSSTRUCT_STYLESHEETENTRY.containing_type = _CSSSTRUCT 113 | _CSSSTRUCT.fields_by_name['style_sheet'].message_type = _CSSSTRUCT_STYLESHEETENTRY 114 | _CSSSTRUCT.oneofs_by_name['_css_name'].fields.append( 115 | _CSSSTRUCT.fields_by_name['css_name']) 116 | _CSSSTRUCT.fields_by_name['css_name'].containing_oneof = _CSSSTRUCT.oneofs_by_name['_css_name'] 117 | DESCRIPTOR.message_types_by_name['CSSStruct'] = _CSSSTRUCT 118 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 119 | 120 | CSSStruct = _reflection.GeneratedProtocolMessageType('CSSStruct', (_message.Message,), { 121 | 122 | 'StyleSheetEntry' : _reflection.GeneratedProtocolMessageType('StyleSheetEntry', (_message.Message,), { 123 | 'DESCRIPTOR' : _CSSSTRUCT_STYLESHEETENTRY, 124 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.CSSStruct_pb2' 125 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.CSSStruct.StyleSheetEntry) 126 | }) 127 | , 128 | 'DESCRIPTOR' : _CSSSTRUCT, 129 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.CSSStruct_pb2' 130 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.CSSStruct) 131 | }) 132 | _sym_db.RegisterMessage(CSSStruct) 133 | _sym_db.RegisterMessage(CSSStruct.StyleSheetEntry) 134 | 135 | 136 | _CSSSTRUCT_STYLESHEETENTRY._options = None 137 | # @@protoc_insertion_point(module_scope) 138 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/CommonStyleMap_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto', 18 | package='com.tencent.qqlive.protocol.pb', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n;pyproto/com.tencent.qqlive.protocol.pb.CommonStyleMap.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\"\x92\x01\n\x0e\x43ommonStyleMap\x12O\n\tstyle_map\x18\x01 \x03(\x0b\x32<.com.tencent.qqlive.protocol.pb.CommonStyleMap.StyleMapEntry\x1a/\n\rStyleMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x62\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _COMMONSTYLEMAP_STYLEMAPENTRY = _descriptor.Descriptor( 29 | name='StyleMapEntry', 30 | full_name='com.tencent.qqlive.protocol.pb.CommonStyleMap.StyleMapEntry', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='key', full_name='com.tencent.qqlive.protocol.pb.CommonStyleMap.StyleMapEntry.key', index=0, 38 | number=1, type=9, cpp_type=9, label=1, 39 | has_default_value=False, default_value=b"".decode('utf-8'), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='value', full_name='com.tencent.qqlive.protocol.pb.CommonStyleMap.StyleMapEntry.value', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | ], 51 | extensions=[ 52 | ], 53 | nested_types=[], 54 | enum_types=[ 55 | ], 56 | serialized_options=b'8\001', 57 | is_extendable=False, 58 | syntax='proto3', 59 | extension_ranges=[], 60 | oneofs=[ 61 | ], 62 | serialized_start=195, 63 | serialized_end=242, 64 | ) 65 | 66 | _COMMONSTYLEMAP = _descriptor.Descriptor( 67 | name='CommonStyleMap', 68 | full_name='com.tencent.qqlive.protocol.pb.CommonStyleMap', 69 | filename=None, 70 | file=DESCRIPTOR, 71 | containing_type=None, 72 | create_key=_descriptor._internal_create_key, 73 | fields=[ 74 | _descriptor.FieldDescriptor( 75 | name='style_map', full_name='com.tencent.qqlive.protocol.pb.CommonStyleMap.style_map', index=0, 76 | number=1, type=11, cpp_type=10, label=3, 77 | has_default_value=False, default_value=[], 78 | message_type=None, enum_type=None, containing_type=None, 79 | is_extension=False, extension_scope=None, 80 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 81 | ], 82 | extensions=[ 83 | ], 84 | nested_types=[_COMMONSTYLEMAP_STYLEMAPENTRY, ], 85 | enum_types=[ 86 | ], 87 | serialized_options=None, 88 | is_extendable=False, 89 | syntax='proto3', 90 | extension_ranges=[], 91 | oneofs=[ 92 | ], 93 | serialized_start=96, 94 | serialized_end=242, 95 | ) 96 | 97 | _COMMONSTYLEMAP_STYLEMAPENTRY.containing_type = _COMMONSTYLEMAP 98 | _COMMONSTYLEMAP.fields_by_name['style_map'].message_type = _COMMONSTYLEMAP_STYLEMAPENTRY 99 | DESCRIPTOR.message_types_by_name['CommonStyleMap'] = _COMMONSTYLEMAP 100 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 101 | 102 | CommonStyleMap = _reflection.GeneratedProtocolMessageType('CommonStyleMap', (_message.Message,), { 103 | 104 | 'StyleMapEntry' : _reflection.GeneratedProtocolMessageType('StyleMapEntry', (_message.Message,), { 105 | 'DESCRIPTOR' : _COMMONSTYLEMAP_STYLEMAPENTRY, 106 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.CommonStyleMap_pb2' 107 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.CommonStyleMap.StyleMapEntry) 108 | }) 109 | , 110 | 'DESCRIPTOR' : _COMMONSTYLEMAP, 111 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.CommonStyleMap_pb2' 112 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.CommonStyleMap) 113 | }) 114 | _sym_db.RegisterMessage(CommonStyleMap) 115 | _sym_db.RegisterMessage(CommonStyleMap.StyleMapEntry) 116 | 117 | 118 | _COMMONSTYLEMAP_STYLEMAPENTRY._options = None 119 | # @@protoc_insertion_point(module_scope) 120 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/ExtraData_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n6pyproto/com.tencent.qqlive.protocol.pb.ExtraData.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\x1a\x19google/protobuf/any.proto\"\x91\x01\n\tExtraData\x12\x41\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x33.com.tencent.qqlive.protocol.pb.ExtraData.DataEntry\x1a\x41\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x62\x06proto3' 24 | , 25 | dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,]) 26 | 27 | 28 | 29 | 30 | _EXTRADATA_DATAENTRY = _descriptor.Descriptor( 31 | name='DataEntry', 32 | full_name='com.tencent.qqlive.protocol.pb.ExtraData.DataEntry', 33 | filename=None, 34 | file=DESCRIPTOR, 35 | containing_type=None, 36 | create_key=_descriptor._internal_create_key, 37 | fields=[ 38 | _descriptor.FieldDescriptor( 39 | name='key', full_name='com.tencent.qqlive.protocol.pb.ExtraData.DataEntry.key', index=0, 40 | number=1, type=5, cpp_type=1, label=1, 41 | has_default_value=False, default_value=0, 42 | message_type=None, enum_type=None, containing_type=None, 43 | is_extension=False, extension_scope=None, 44 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 45 | _descriptor.FieldDescriptor( 46 | name='value', full_name='com.tencent.qqlive.protocol.pb.ExtraData.DataEntry.value', index=1, 47 | number=2, type=11, cpp_type=10, label=1, 48 | has_default_value=False, default_value=None, 49 | message_type=None, enum_type=None, containing_type=None, 50 | is_extension=False, extension_scope=None, 51 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 52 | ], 53 | extensions=[ 54 | ], 55 | nested_types=[], 56 | enum_types=[ 57 | ], 58 | serialized_options=b'8\001', 59 | is_extendable=False, 60 | syntax='proto3', 61 | extension_ranges=[], 62 | oneofs=[ 63 | ], 64 | serialized_start=198, 65 | serialized_end=263, 66 | ) 67 | 68 | _EXTRADATA = _descriptor.Descriptor( 69 | name='ExtraData', 70 | full_name='com.tencent.qqlive.protocol.pb.ExtraData', 71 | filename=None, 72 | file=DESCRIPTOR, 73 | containing_type=None, 74 | create_key=_descriptor._internal_create_key, 75 | fields=[ 76 | _descriptor.FieldDescriptor( 77 | name='data', full_name='com.tencent.qqlive.protocol.pb.ExtraData.data', index=0, 78 | number=1, type=11, cpp_type=10, label=3, 79 | has_default_value=False, default_value=[], 80 | message_type=None, enum_type=None, containing_type=None, 81 | is_extension=False, extension_scope=None, 82 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 83 | ], 84 | extensions=[ 85 | ], 86 | nested_types=[_EXTRADATA_DATAENTRY, ], 87 | enum_types=[ 88 | ], 89 | serialized_options=None, 90 | is_extendable=False, 91 | syntax='proto3', 92 | extension_ranges=[], 93 | oneofs=[ 94 | ], 95 | serialized_start=118, 96 | serialized_end=263, 97 | ) 98 | 99 | _EXTRADATA_DATAENTRY.fields_by_name['value'].message_type = google_dot_protobuf_dot_any__pb2._ANY 100 | _EXTRADATA_DATAENTRY.containing_type = _EXTRADATA 101 | _EXTRADATA.fields_by_name['data'].message_type = _EXTRADATA_DATAENTRY 102 | DESCRIPTOR.message_types_by_name['ExtraData'] = _EXTRADATA 103 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 104 | 105 | ExtraData = _reflection.GeneratedProtocolMessageType('ExtraData', (_message.Message,), { 106 | 107 | 'DataEntry' : _reflection.GeneratedProtocolMessageType('DataEntry', (_message.Message,), { 108 | 'DESCRIPTOR' : _EXTRADATA_DATAENTRY, 109 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.ExtraData_pb2' 110 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.ExtraData.DataEntry) 111 | }) 112 | , 113 | 'DESCRIPTOR' : _EXTRADATA, 114 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.ExtraData_pb2' 115 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.ExtraData) 116 | }) 117 | _sym_db.RegisterMessage(ExtraData) 118 | _sym_db.RegisterMessage(ExtraData.DataEntry) 119 | 120 | 121 | _EXTRADATA_DATAENTRY._options = None 122 | # @@protoc_insertion_point(module_scope) 123 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/ImageFacePoint_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.ImageFacePoint.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.tencent.qqlive.protocol.pb.ImageFacePoint.proto', 18 | package='com.tencent.qqlive.protocol.pb', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n;pyproto/com.tencent.qqlive.protocol.pb.ImageFacePoint.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\"T\n\x0eImageFacePoint\x12\x14\n\x07x_float\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x14\n\x07y_float\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\n\n\x08_x_floatB\n\n\x08_y_floatb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _IMAGEFACEPOINT = _descriptor.Descriptor( 29 | name='ImageFacePoint', 30 | full_name='com.tencent.qqlive.protocol.pb.ImageFacePoint', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='x_float', full_name='com.tencent.qqlive.protocol.pb.ImageFacePoint.x_float', index=0, 38 | number=1, type=2, cpp_type=6, label=1, 39 | has_default_value=False, default_value=float(0), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='y_float', full_name='com.tencent.qqlive.protocol.pb.ImageFacePoint.y_float', index=1, 45 | number=2, type=2, cpp_type=6, label=1, 46 | has_default_value=False, default_value=float(0), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | ], 51 | extensions=[ 52 | ], 53 | nested_types=[], 54 | enum_types=[ 55 | ], 56 | serialized_options=None, 57 | is_extendable=False, 58 | syntax='proto3', 59 | extension_ranges=[], 60 | oneofs=[ 61 | _descriptor.OneofDescriptor( 62 | name='_x_float', full_name='com.tencent.qqlive.protocol.pb.ImageFacePoint._x_float', 63 | index=0, containing_type=None, 64 | create_key=_descriptor._internal_create_key, 65 | fields=[]), 66 | _descriptor.OneofDescriptor( 67 | name='_y_float', full_name='com.tencent.qqlive.protocol.pb.ImageFacePoint._y_float', 68 | index=1, containing_type=None, 69 | create_key=_descriptor._internal_create_key, 70 | fields=[]), 71 | ], 72 | serialized_start=95, 73 | serialized_end=179, 74 | ) 75 | 76 | _IMAGEFACEPOINT.oneofs_by_name['_x_float'].fields.append( 77 | _IMAGEFACEPOINT.fields_by_name['x_float']) 78 | _IMAGEFACEPOINT.fields_by_name['x_float'].containing_oneof = _IMAGEFACEPOINT.oneofs_by_name['_x_float'] 79 | _IMAGEFACEPOINT.oneofs_by_name['_y_float'].fields.append( 80 | _IMAGEFACEPOINT.fields_by_name['y_float']) 81 | _IMAGEFACEPOINT.fields_by_name['y_float'].containing_oneof = _IMAGEFACEPOINT.oneofs_by_name['_y_float'] 82 | DESCRIPTOR.message_types_by_name['ImageFacePoint'] = _IMAGEFACEPOINT 83 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 84 | 85 | ImageFacePoint = _reflection.GeneratedProtocolMessageType('ImageFacePoint', (_message.Message,), { 86 | 'DESCRIPTOR' : _IMAGEFACEPOINT, 87 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.ImageFacePoint_pb2' 88 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.ImageFacePoint) 89 | }) 90 | _sym_db.RegisterMessage(ImageFacePoint) 91 | 92 | 93 | # @@protoc_insertion_point(module_scope) 94 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/MarkLabelList_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.MarkLabelList.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.com.tencent.qqlive.protocol.pb import MarkLabel_pb2 as pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabel__pb2 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.MarkLabelList.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n:pyproto/com.tencent.qqlive.protocol.pb.MarkLabelList.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\x1a\x36pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto\"S\n\rMarkLabelList\x12\x42\n\x0fmark_label_list\x18\x01 \x03(\x0b\x32).com.tencent.qqlive.protocol.pb.MarkLabelb\x06proto3' 24 | , 25 | dependencies=[pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabel__pb2.DESCRIPTOR,]) 26 | 27 | 28 | 29 | 30 | _MARKLABELLIST = _descriptor.Descriptor( 31 | name='MarkLabelList', 32 | full_name='com.tencent.qqlive.protocol.pb.MarkLabelList', 33 | filename=None, 34 | file=DESCRIPTOR, 35 | containing_type=None, 36 | create_key=_descriptor._internal_create_key, 37 | fields=[ 38 | _descriptor.FieldDescriptor( 39 | name='mark_label_list', full_name='com.tencent.qqlive.protocol.pb.MarkLabelList.mark_label_list', index=0, 40 | number=1, type=11, cpp_type=10, label=3, 41 | has_default_value=False, default_value=[], 42 | message_type=None, enum_type=None, containing_type=None, 43 | is_extension=False, extension_scope=None, 44 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 45 | ], 46 | extensions=[ 47 | ], 48 | nested_types=[], 49 | enum_types=[ 50 | ], 51 | serialized_options=None, 52 | is_extendable=False, 53 | syntax='proto3', 54 | extension_ranges=[], 55 | oneofs=[ 56 | ], 57 | serialized_start=150, 58 | serialized_end=233, 59 | ) 60 | 61 | _MARKLABELLIST.fields_by_name['mark_label_list'].message_type = pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabel__pb2._MARKLABEL 62 | DESCRIPTOR.message_types_by_name['MarkLabelList'] = _MARKLABELLIST 63 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 64 | 65 | MarkLabelList = _reflection.GeneratedProtocolMessageType('MarkLabelList', (_message.Message,), { 66 | 'DESCRIPTOR' : _MARKLABELLIST, 67 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.MarkLabelList_pb2' 68 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.MarkLabelList) 69 | }) 70 | _sym_db.RegisterMessage(MarkLabelList) 71 | 72 | 73 | # @@protoc_insertion_point(module_scope) 74 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/MarkLabelType_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf.internal import enum_type_wrapper 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | # @@protoc_insertion_point(imports) 11 | 12 | _sym_db = _symbol_database.Default() 13 | 14 | 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n:pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb*\xd2\x01\n\rMarkLabelType\x12\x1f\n\x1bMARK_LABEL_TYPE_SINGLE_TEXT\x10\x00\x12\x19\n\x15MARK_LABEL_TYPE_IMAGE\x10\x01\x12\x1a\n\x16MARK_LABEL_TYPE_LOTTIE\x10\x02\x12*\n&MARK_LABEL_TYPE_LEFT_POSTER_RIGHT_TEXT\x10\x03\x12\x1a\n\x16MARK_LABEL_TYPE_NUMBER\x10\x04\x12!\n\x1dMARK_LABEL_TYPE_FIRST_CAPITAL\x10\x05\x62\x06proto3' 24 | ) 25 | 26 | _MARKLABELTYPE = _descriptor.EnumDescriptor( 27 | name='MarkLabelType', 28 | full_name='com.tencent.qqlive.protocol.pb.MarkLabelType', 29 | filename=None, 30 | file=DESCRIPTOR, 31 | create_key=_descriptor._internal_create_key, 32 | values=[ 33 | _descriptor.EnumValueDescriptor( 34 | name='MARK_LABEL_TYPE_SINGLE_TEXT', index=0, number=0, 35 | serialized_options=None, 36 | type=None, 37 | create_key=_descriptor._internal_create_key), 38 | _descriptor.EnumValueDescriptor( 39 | name='MARK_LABEL_TYPE_IMAGE', index=1, number=1, 40 | serialized_options=None, 41 | type=None, 42 | create_key=_descriptor._internal_create_key), 43 | _descriptor.EnumValueDescriptor( 44 | name='MARK_LABEL_TYPE_LOTTIE', index=2, number=2, 45 | serialized_options=None, 46 | type=None, 47 | create_key=_descriptor._internal_create_key), 48 | _descriptor.EnumValueDescriptor( 49 | name='MARK_LABEL_TYPE_LEFT_POSTER_RIGHT_TEXT', index=3, number=3, 50 | serialized_options=None, 51 | type=None, 52 | create_key=_descriptor._internal_create_key), 53 | _descriptor.EnumValueDescriptor( 54 | name='MARK_LABEL_TYPE_NUMBER', index=4, number=4, 55 | serialized_options=None, 56 | type=None, 57 | create_key=_descriptor._internal_create_key), 58 | _descriptor.EnumValueDescriptor( 59 | name='MARK_LABEL_TYPE_FIRST_CAPITAL', index=5, number=5, 60 | serialized_options=None, 61 | type=None, 62 | create_key=_descriptor._internal_create_key), 63 | ], 64 | containing_type=None, 65 | serialized_options=None, 66 | serialized_start=95, 67 | serialized_end=305, 68 | ) 69 | _sym_db.RegisterEnumDescriptor(_MARKLABELTYPE) 70 | 71 | MarkLabelType = enum_type_wrapper.EnumTypeWrapper(_MARKLABELTYPE) 72 | MARK_LABEL_TYPE_SINGLE_TEXT = 0 73 | MARK_LABEL_TYPE_IMAGE = 1 74 | MARK_LABEL_TYPE_LOTTIE = 2 75 | MARK_LABEL_TYPE_LEFT_POSTER_RIGHT_TEXT = 3 76 | MARK_LABEL_TYPE_NUMBER = 4 77 | MARK_LABEL_TYPE_FIRST_CAPITAL = 5 78 | 79 | 80 | DESCRIPTOR.enum_types_by_name['MarkLabelType'] = _MARKLABELTYPE 81 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 82 | 83 | 84 | # @@protoc_insertion_point(module_scope) 85 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/MarkLabel_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.com.tencent.qqlive.protocol.pb import MarkLabelType_pb2 as pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabelType__pb2 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n6pyproto/com.tencent.qqlive.protocol.pb.MarkLabel.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\x1a:pyproto/com.tencent.qqlive.protocol.pb.MarkLabelType.proto\"\xe8\x01\n\tMarkLabel\x12K\n\x0fmark_label_type\x18\x01 \x01(\x0e\x32-.com.tencent.qqlive.protocol.pb.MarkLabelTypeH\x00\x88\x01\x01\x12\x15\n\x08position\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x17\n\nprime_text\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0emark_image_url\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x12\n\x10_mark_label_typeB\x0b\n\t_positionB\r\n\x0b_prime_textB\x11\n\x0f_mark_image_urlb\x06proto3' 24 | , 25 | dependencies=[pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabelType__pb2.DESCRIPTOR,]) 26 | 27 | 28 | 29 | 30 | _MARKLABEL = _descriptor.Descriptor( 31 | name='MarkLabel', 32 | full_name='com.tencent.qqlive.protocol.pb.MarkLabel', 33 | filename=None, 34 | file=DESCRIPTOR, 35 | containing_type=None, 36 | create_key=_descriptor._internal_create_key, 37 | fields=[ 38 | _descriptor.FieldDescriptor( 39 | name='mark_label_type', full_name='com.tencent.qqlive.protocol.pb.MarkLabel.mark_label_type', index=0, 40 | number=1, type=14, cpp_type=8, label=1, 41 | has_default_value=False, default_value=0, 42 | message_type=None, enum_type=None, containing_type=None, 43 | is_extension=False, extension_scope=None, 44 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 45 | _descriptor.FieldDescriptor( 46 | name='position', full_name='com.tencent.qqlive.protocol.pb.MarkLabel.position', index=1, 47 | number=2, type=5, cpp_type=1, label=1, 48 | has_default_value=False, default_value=0, 49 | message_type=None, enum_type=None, containing_type=None, 50 | is_extension=False, extension_scope=None, 51 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 52 | _descriptor.FieldDescriptor( 53 | name='prime_text', full_name='com.tencent.qqlive.protocol.pb.MarkLabel.prime_text', index=2, 54 | number=3, type=9, cpp_type=9, label=1, 55 | has_default_value=False, default_value=b"".decode('utf-8'), 56 | message_type=None, enum_type=None, containing_type=None, 57 | is_extension=False, extension_scope=None, 58 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 59 | _descriptor.FieldDescriptor( 60 | name='mark_image_url', full_name='com.tencent.qqlive.protocol.pb.MarkLabel.mark_image_url', index=3, 61 | number=4, type=9, cpp_type=9, label=1, 62 | has_default_value=False, default_value=b"".decode('utf-8'), 63 | message_type=None, enum_type=None, containing_type=None, 64 | is_extension=False, extension_scope=None, 65 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 66 | ], 67 | extensions=[ 68 | ], 69 | nested_types=[], 70 | enum_types=[ 71 | ], 72 | serialized_options=None, 73 | is_extendable=False, 74 | syntax='proto3', 75 | extension_ranges=[], 76 | oneofs=[ 77 | _descriptor.OneofDescriptor( 78 | name='_mark_label_type', full_name='com.tencent.qqlive.protocol.pb.MarkLabel._mark_label_type', 79 | index=0, containing_type=None, 80 | create_key=_descriptor._internal_create_key, 81 | fields=[]), 82 | _descriptor.OneofDescriptor( 83 | name='_position', full_name='com.tencent.qqlive.protocol.pb.MarkLabel._position', 84 | index=1, containing_type=None, 85 | create_key=_descriptor._internal_create_key, 86 | fields=[]), 87 | _descriptor.OneofDescriptor( 88 | name='_prime_text', full_name='com.tencent.qqlive.protocol.pb.MarkLabel._prime_text', 89 | index=2, containing_type=None, 90 | create_key=_descriptor._internal_create_key, 91 | fields=[]), 92 | _descriptor.OneofDescriptor( 93 | name='_mark_image_url', full_name='com.tencent.qqlive.protocol.pb.MarkLabel._mark_image_url', 94 | index=3, containing_type=None, 95 | create_key=_descriptor._internal_create_key, 96 | fields=[]), 97 | ], 98 | serialized_start=151, 99 | serialized_end=383, 100 | ) 101 | 102 | _MARKLABEL.fields_by_name['mark_label_type'].enum_type = pyproto_dot_com_dot_tencent_dot_qqlive_dot_protocol_dot_pb_dot_MarkLabelType__pb2._MARKLABELTYPE 103 | _MARKLABEL.oneofs_by_name['_mark_label_type'].fields.append( 104 | _MARKLABEL.fields_by_name['mark_label_type']) 105 | _MARKLABEL.fields_by_name['mark_label_type'].containing_oneof = _MARKLABEL.oneofs_by_name['_mark_label_type'] 106 | _MARKLABEL.oneofs_by_name['_position'].fields.append( 107 | _MARKLABEL.fields_by_name['position']) 108 | _MARKLABEL.fields_by_name['position'].containing_oneof = _MARKLABEL.oneofs_by_name['_position'] 109 | _MARKLABEL.oneofs_by_name['_prime_text'].fields.append( 110 | _MARKLABEL.fields_by_name['prime_text']) 111 | _MARKLABEL.fields_by_name['prime_text'].containing_oneof = _MARKLABEL.oneofs_by_name['_prime_text'] 112 | _MARKLABEL.oneofs_by_name['_mark_image_url'].fields.append( 113 | _MARKLABEL.fields_by_name['mark_image_url']) 114 | _MARKLABEL.fields_by_name['mark_image_url'].containing_oneof = _MARKLABEL.oneofs_by_name['_mark_image_url'] 115 | DESCRIPTOR.message_types_by_name['MarkLabel'] = _MARKLABEL 116 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 117 | 118 | MarkLabel = _reflection.GeneratedProtocolMessageType('MarkLabel', (_message.Message,), { 119 | 'DESCRIPTOR' : _MARKLABEL, 120 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.MarkLabel_pb2' 121 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.MarkLabel) 122 | }) 123 | _sym_db.RegisterMessage(MarkLabel) 124 | 125 | 126 | # @@protoc_insertion_point(module_scope) 127 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/SectionType_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.SectionType.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf.internal import enum_type_wrapper 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | # @@protoc_insertion_point(imports) 11 | 12 | _sym_db = _symbol_database.Default() 13 | 14 | 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.SectionType.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\n8pyproto/com.tencent.qqlive.protocol.pb.SectionType.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb*\xb3\x01\n\x0bSectionType\x12\x1d\n\x19SECTION_TYPE_SINGLE_BLOCK\x10\x00\x12%\n\x18SECTION_TYPE_UNSPECIFIED\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1b\n\x17SECTION_TYPE_BLOCK_LIST\x10\x01\x12\"\n\x1eSECTION_TYPE_COLLECTION_BLOCKS\x10\x02\x12\x1d\n\x17SECTION_TYPE_JCE_CUSTOM\x10\xa1\x8d\x06\x62\x06proto3' 24 | ) 25 | 26 | _SECTIONTYPE = _descriptor.EnumDescriptor( 27 | name='SectionType', 28 | full_name='com.tencent.qqlive.protocol.pb.SectionType', 29 | filename=None, 30 | file=DESCRIPTOR, 31 | create_key=_descriptor._internal_create_key, 32 | values=[ 33 | _descriptor.EnumValueDescriptor( 34 | name='SECTION_TYPE_SINGLE_BLOCK', index=0, number=0, 35 | serialized_options=None, 36 | type=None, 37 | create_key=_descriptor._internal_create_key), 38 | _descriptor.EnumValueDescriptor( 39 | name='SECTION_TYPE_UNSPECIFIED', index=1, number=-1, 40 | serialized_options=None, 41 | type=None, 42 | create_key=_descriptor._internal_create_key), 43 | _descriptor.EnumValueDescriptor( 44 | name='SECTION_TYPE_BLOCK_LIST', index=2, number=1, 45 | serialized_options=None, 46 | type=None, 47 | create_key=_descriptor._internal_create_key), 48 | _descriptor.EnumValueDescriptor( 49 | name='SECTION_TYPE_COLLECTION_BLOCKS', index=3, number=2, 50 | serialized_options=None, 51 | type=None, 52 | create_key=_descriptor._internal_create_key), 53 | _descriptor.EnumValueDescriptor( 54 | name='SECTION_TYPE_JCE_CUSTOM', index=4, number=100001, 55 | serialized_options=None, 56 | type=None, 57 | create_key=_descriptor._internal_create_key), 58 | ], 59 | containing_type=None, 60 | serialized_options=None, 61 | serialized_start=93, 62 | serialized_end=272, 63 | ) 64 | _sym_db.RegisterEnumDescriptor(_SECTIONTYPE) 65 | 66 | SectionType = enum_type_wrapper.EnumTypeWrapper(_SECTIONTYPE) 67 | SECTION_TYPE_SINGLE_BLOCK = 0 68 | SECTION_TYPE_UNSPECIFIED = -1 69 | SECTION_TYPE_BLOCK_LIST = 1 70 | SECTION_TYPE_COLLECTION_BLOCKS = 2 71 | SECTION_TYPE_JCE_CUSTOM = 100001 72 | 73 | 74 | DESCRIPTOR.enum_types_by_name['SectionType'] = _SECTIONTYPE 75 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 76 | 77 | 78 | # @@protoc_insertion_point(module_scope) 79 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/VideoIdKeyValueSetKey_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf.internal import enum_type_wrapper 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | # @@protoc_insertion_point(imports) 11 | 12 | _sym_db = _symbol_database.Default() 13 | 14 | 15 | 16 | 17 | DESCRIPTOR = _descriptor.FileDescriptor( 18 | name='pyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto', 19 | package='com.tencent.qqlive.protocol.pb', 20 | syntax='proto3', 21 | serialized_options=None, 22 | create_key=_descriptor._internal_create_key, 23 | serialized_pb=b'\nBpyproto/com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb*\x94\x02\n\x15VideoIdKeyValueSetKey\x12&\n\"VIDEO_ID_KEY_VALUE_SET_KEY_DEFAULT\x10\x00\x12\'\n#VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_ID\x10\x01\x12\'\n#VIDEO_ID_KEY_VALUE_SET_KEY_COVER_ID\x10\x02\x12(\n$VIDEO_ID_KEY_VALUE_SET_KEY_COLUMN_ID\x10\x03\x12)\n%VIDEO_ID_KEY_VALUE_SET_KEY_PROGRAM_ID\x10\x04\x12,\n(VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_SHORTID\x10\x05\x62\x06proto3' 24 | ) 25 | 26 | _VIDEOIDKEYVALUESETKEY = _descriptor.EnumDescriptor( 27 | name='VideoIdKeyValueSetKey', 28 | full_name='com.tencent.qqlive.protocol.pb.VideoIdKeyValueSetKey', 29 | filename=None, 30 | file=DESCRIPTOR, 31 | create_key=_descriptor._internal_create_key, 32 | values=[ 33 | _descriptor.EnumValueDescriptor( 34 | name='VIDEO_ID_KEY_VALUE_SET_KEY_DEFAULT', index=0, number=0, 35 | serialized_options=None, 36 | type=None, 37 | create_key=_descriptor._internal_create_key), 38 | _descriptor.EnumValueDescriptor( 39 | name='VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_ID', index=1, number=1, 40 | serialized_options=None, 41 | type=None, 42 | create_key=_descriptor._internal_create_key), 43 | _descriptor.EnumValueDescriptor( 44 | name='VIDEO_ID_KEY_VALUE_SET_KEY_COVER_ID', index=2, number=2, 45 | serialized_options=None, 46 | type=None, 47 | create_key=_descriptor._internal_create_key), 48 | _descriptor.EnumValueDescriptor( 49 | name='VIDEO_ID_KEY_VALUE_SET_KEY_COLUMN_ID', index=3, number=3, 50 | serialized_options=None, 51 | type=None, 52 | create_key=_descriptor._internal_create_key), 53 | _descriptor.EnumValueDescriptor( 54 | name='VIDEO_ID_KEY_VALUE_SET_KEY_PROGRAM_ID', index=4, number=4, 55 | serialized_options=None, 56 | type=None, 57 | create_key=_descriptor._internal_create_key), 58 | _descriptor.EnumValueDescriptor( 59 | name='VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_SHORTID', index=5, number=5, 60 | serialized_options=None, 61 | type=None, 62 | create_key=_descriptor._internal_create_key), 63 | ], 64 | containing_type=None, 65 | serialized_options=None, 66 | serialized_start=103, 67 | serialized_end=379, 68 | ) 69 | _sym_db.RegisterEnumDescriptor(_VIDEOIDKEYVALUESETKEY) 70 | 71 | VideoIdKeyValueSetKey = enum_type_wrapper.EnumTypeWrapper(_VIDEOIDKEYVALUESETKEY) 72 | VIDEO_ID_KEY_VALUE_SET_KEY_DEFAULT = 0 73 | VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_ID = 1 74 | VIDEO_ID_KEY_VALUE_SET_KEY_COVER_ID = 2 75 | VIDEO_ID_KEY_VALUE_SET_KEY_COLUMN_ID = 3 76 | VIDEO_ID_KEY_VALUE_SET_KEY_PROGRAM_ID = 4 77 | VIDEO_ID_KEY_VALUE_SET_KEY_VIDEO_SHORTID = 5 78 | 79 | 80 | DESCRIPTOR.enum_types_by_name['VideoIdKeyValueSetKey'] = _VIDEOIDKEYVALUESETKEY 81 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 82 | 83 | 84 | # @@protoc_insertion_point(module_scope) 85 | -------------------------------------------------------------------------------- /pyproto/com/tencent/qqlive/protocol/pb/VideoIdSet_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/com.tencent.qqlive.protocol.pb.VideoIdSet.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/com.tencent.qqlive.protocol.pb.VideoIdSet.proto', 18 | package='com.tencent.qqlive.protocol.pb', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n7pyproto/com.tencent.qqlive.protocol.pb.VideoIdSet.proto\x12\x1e\x63om.tencent.qqlive.protocol.pb\"Z\n\nVideoIdSet\x12\x10\n\x03vid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03\x63id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x10\n\x03lid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x06\n\x04_vidB\x06\n\x04_cidB\x06\n\x04_lidb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _VIDEOIDSET = _descriptor.Descriptor( 29 | name='VideoIdSet', 30 | full_name='com.tencent.qqlive.protocol.pb.VideoIdSet', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='vid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet.vid', index=0, 38 | number=1, type=9, cpp_type=9, label=1, 39 | has_default_value=False, default_value=b"".decode('utf-8'), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='cid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet.cid', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | _descriptor.FieldDescriptor( 51 | name='lid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet.lid', index=2, 52 | number=3, type=9, cpp_type=9, label=1, 53 | has_default_value=False, default_value=b"".decode('utf-8'), 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 57 | ], 58 | extensions=[ 59 | ], 60 | nested_types=[], 61 | enum_types=[ 62 | ], 63 | serialized_options=None, 64 | is_extendable=False, 65 | syntax='proto3', 66 | extension_ranges=[], 67 | oneofs=[ 68 | _descriptor.OneofDescriptor( 69 | name='_vid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet._vid', 70 | index=0, containing_type=None, 71 | create_key=_descriptor._internal_create_key, 72 | fields=[]), 73 | _descriptor.OneofDescriptor( 74 | name='_cid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet._cid', 75 | index=1, containing_type=None, 76 | create_key=_descriptor._internal_create_key, 77 | fields=[]), 78 | _descriptor.OneofDescriptor( 79 | name='_lid', full_name='com.tencent.qqlive.protocol.pb.VideoIdSet._lid', 80 | index=2, containing_type=None, 81 | create_key=_descriptor._internal_create_key, 82 | fields=[]), 83 | ], 84 | serialized_start=91, 85 | serialized_end=181, 86 | ) 87 | 88 | _VIDEOIDSET.oneofs_by_name['_vid'].fields.append( 89 | _VIDEOIDSET.fields_by_name['vid']) 90 | _VIDEOIDSET.fields_by_name['vid'].containing_oneof = _VIDEOIDSET.oneofs_by_name['_vid'] 91 | _VIDEOIDSET.oneofs_by_name['_cid'].fields.append( 92 | _VIDEOIDSET.fields_by_name['cid']) 93 | _VIDEOIDSET.fields_by_name['cid'].containing_oneof = _VIDEOIDSET.oneofs_by_name['_cid'] 94 | _VIDEOIDSET.oneofs_by_name['_lid'].fields.append( 95 | _VIDEOIDSET.fields_by_name['lid']) 96 | _VIDEOIDSET.fields_by_name['lid'].containing_oneof = _VIDEOIDSET.oneofs_by_name['_lid'] 97 | DESCRIPTOR.message_types_by_name['VideoIdSet'] = _VIDEOIDSET 98 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 99 | 100 | VideoIdSet = _reflection.GeneratedProtocolMessageType('VideoIdSet', (_message.Message,), { 101 | 'DESCRIPTOR' : _VIDEOIDSET, 102 | '__module__' : 'pyproto.com.tencent.qqlive.protocol.pb.VideoIdSet_pb2' 103 | # @@protoc_insertion_point(class_scope:com.tencent.qqlive.protocol.pb.VideoIdSet) 104 | }) 105 | _sym_db.RegisterMessage(VideoIdSet) 106 | 107 | 108 | # @@protoc_insertion_point(module_scope) 109 | -------------------------------------------------------------------------------- /pyproto/tbclient/Error_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/tbclient.Error.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/tbclient.Error.proto', 18 | package='tbclient', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n\x1cpyproto/tbclient.Error.proto\x12\x08tbclient\"k\n\x05\x45rror\x12\x14\n\x07\x65rrorno\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x06\x65rrmsg\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07usermsg\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\n\n\x08_errornoB\t\n\x07_errmsgB\n\n\x08_usermsgb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _ERROR = _descriptor.Descriptor( 29 | name='Error', 30 | full_name='tbclient.Error', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='errorno', full_name='tbclient.Error.errorno', index=0, 38 | number=1, type=5, cpp_type=1, label=1, 39 | has_default_value=False, default_value=0, 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='errmsg', full_name='tbclient.Error.errmsg', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | _descriptor.FieldDescriptor( 51 | name='usermsg', full_name='tbclient.Error.usermsg', index=2, 52 | number=3, type=9, cpp_type=9, label=1, 53 | has_default_value=False, default_value=b"".decode('utf-8'), 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 57 | ], 58 | extensions=[ 59 | ], 60 | nested_types=[], 61 | enum_types=[ 62 | ], 63 | serialized_options=None, 64 | is_extendable=False, 65 | syntax='proto3', 66 | extension_ranges=[], 67 | oneofs=[ 68 | _descriptor.OneofDescriptor( 69 | name='_errorno', full_name='tbclient.Error._errorno', 70 | index=0, containing_type=None, 71 | create_key=_descriptor._internal_create_key, 72 | fields=[]), 73 | _descriptor.OneofDescriptor( 74 | name='_errmsg', full_name='tbclient.Error._errmsg', 75 | index=1, containing_type=None, 76 | create_key=_descriptor._internal_create_key, 77 | fields=[]), 78 | _descriptor.OneofDescriptor( 79 | name='_usermsg', full_name='tbclient.Error._usermsg', 80 | index=2, containing_type=None, 81 | create_key=_descriptor._internal_create_key, 82 | fields=[]), 83 | ], 84 | serialized_start=42, 85 | serialized_end=149, 86 | ) 87 | 88 | _ERROR.oneofs_by_name['_errorno'].fields.append( 89 | _ERROR.fields_by_name['errorno']) 90 | _ERROR.fields_by_name['errorno'].containing_oneof = _ERROR.oneofs_by_name['_errorno'] 91 | _ERROR.oneofs_by_name['_errmsg'].fields.append( 92 | _ERROR.fields_by_name['errmsg']) 93 | _ERROR.fields_by_name['errmsg'].containing_oneof = _ERROR.oneofs_by_name['_errmsg'] 94 | _ERROR.oneofs_by_name['_usermsg'].fields.append( 95 | _ERROR.fields_by_name['usermsg']) 96 | _ERROR.fields_by_name['usermsg'].containing_oneof = _ERROR.oneofs_by_name['_usermsg'] 97 | DESCRIPTOR.message_types_by_name['Error'] = _ERROR 98 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 99 | 100 | Error = _reflection.GeneratedProtocolMessageType('Error', (_message.Message,), { 101 | 'DESCRIPTOR' : _ERROR, 102 | '__module__' : 'pyproto.tbclient.Error_pb2' 103 | # @@protoc_insertion_point(class_scope:tbclient.Error) 104 | }) 105 | _sym_db.RegisterMessage(Error) 106 | 107 | 108 | # @@protoc_insertion_point(module_scope) 109 | -------------------------------------------------------------------------------- /pyproto/tbclient/GetBubbleList/DataRes_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/tbclient.GetBubbleList.DataRes.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.tbclient import ThemeBgProp_pb2 as pyproto_dot_tbclient_dot_ThemeBgProp__pb2 15 | from pyproto.tbclient import ThemeRecommand_pb2 as pyproto_dot_tbclient_dot_ThemeRecommand__pb2 16 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='pyproto/tbclient.GetBubbleList.DataRes.proto', 20 | package='tbclient.GetBubbleList', 21 | syntax='proto3', 22 | serialized_options=None, 23 | create_key=_descriptor._internal_create_key, 24 | serialized_pb=b'\n,pyproto/tbclient.GetBubbleList.DataRes.proto\x12\x16tbclient.GetBubbleList\x1a\"pyproto/tbclient.ThemeBgProp.proto\x1a%pyproto/tbclient.ThemeRecommand.proto\"\xbb\x01\n\x07\x44\x61taRes\x12\x30\n\trecommend\x18\x01 \x01(\x0b\x32\x18.tbclient.ThemeRecommandH\x00\x88\x01\x01\x12&\n\x07\x62ubbles\x18\x02 \x03(\x0b\x32\x15.tbclient.ThemeBgProp\x12\x14\n\x07hasmore\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nis_default\x18\x04 \x01(\rH\x02\x88\x01\x01\x42\x0c\n\n_recommendB\n\n\x08_hasmoreB\r\n\x0b_is_defaultb\x06proto3' 25 | , 26 | dependencies=[pyproto_dot_tbclient_dot_ThemeBgProp__pb2.DESCRIPTOR,pyproto_dot_tbclient_dot_ThemeRecommand__pb2.DESCRIPTOR,]) 27 | 28 | 29 | 30 | 31 | _DATARES = _descriptor.Descriptor( 32 | name='DataRes', 33 | full_name='tbclient.GetBubbleList.DataRes', 34 | filename=None, 35 | file=DESCRIPTOR, 36 | containing_type=None, 37 | create_key=_descriptor._internal_create_key, 38 | fields=[ 39 | _descriptor.FieldDescriptor( 40 | name='recommend', full_name='tbclient.GetBubbleList.DataRes.recommend', index=0, 41 | number=1, type=11, cpp_type=10, label=1, 42 | has_default_value=False, default_value=None, 43 | message_type=None, enum_type=None, containing_type=None, 44 | is_extension=False, extension_scope=None, 45 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 46 | _descriptor.FieldDescriptor( 47 | name='bubbles', full_name='tbclient.GetBubbleList.DataRes.bubbles', index=1, 48 | number=2, type=11, cpp_type=10, label=3, 49 | has_default_value=False, default_value=[], 50 | message_type=None, enum_type=None, containing_type=None, 51 | is_extension=False, extension_scope=None, 52 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 53 | _descriptor.FieldDescriptor( 54 | name='hasmore', full_name='tbclient.GetBubbleList.DataRes.hasmore', index=2, 55 | number=3, type=13, cpp_type=3, label=1, 56 | has_default_value=False, default_value=0, 57 | message_type=None, enum_type=None, containing_type=None, 58 | is_extension=False, extension_scope=None, 59 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 60 | _descriptor.FieldDescriptor( 61 | name='is_default', full_name='tbclient.GetBubbleList.DataRes.is_default', index=3, 62 | number=4, type=13, cpp_type=3, label=1, 63 | has_default_value=False, default_value=0, 64 | message_type=None, enum_type=None, containing_type=None, 65 | is_extension=False, extension_scope=None, 66 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 67 | ], 68 | extensions=[ 69 | ], 70 | nested_types=[], 71 | enum_types=[ 72 | ], 73 | serialized_options=None, 74 | is_extendable=False, 75 | syntax='proto3', 76 | extension_ranges=[], 77 | oneofs=[ 78 | _descriptor.OneofDescriptor( 79 | name='_recommend', full_name='tbclient.GetBubbleList.DataRes._recommend', 80 | index=0, containing_type=None, 81 | create_key=_descriptor._internal_create_key, 82 | fields=[]), 83 | _descriptor.OneofDescriptor( 84 | name='_hasmore', full_name='tbclient.GetBubbleList.DataRes._hasmore', 85 | index=1, containing_type=None, 86 | create_key=_descriptor._internal_create_key, 87 | fields=[]), 88 | _descriptor.OneofDescriptor( 89 | name='_is_default', full_name='tbclient.GetBubbleList.DataRes._is_default', 90 | index=2, containing_type=None, 91 | create_key=_descriptor._internal_create_key, 92 | fields=[]), 93 | ], 94 | serialized_start=148, 95 | serialized_end=335, 96 | ) 97 | 98 | _DATARES.fields_by_name['recommend'].message_type = pyproto_dot_tbclient_dot_ThemeRecommand__pb2._THEMERECOMMAND 99 | _DATARES.fields_by_name['bubbles'].message_type = pyproto_dot_tbclient_dot_ThemeBgProp__pb2._THEMEBGPROP 100 | _DATARES.oneofs_by_name['_recommend'].fields.append( 101 | _DATARES.fields_by_name['recommend']) 102 | _DATARES.fields_by_name['recommend'].containing_oneof = _DATARES.oneofs_by_name['_recommend'] 103 | _DATARES.oneofs_by_name['_hasmore'].fields.append( 104 | _DATARES.fields_by_name['hasmore']) 105 | _DATARES.fields_by_name['hasmore'].containing_oneof = _DATARES.oneofs_by_name['_hasmore'] 106 | _DATARES.oneofs_by_name['_is_default'].fields.append( 107 | _DATARES.fields_by_name['is_default']) 108 | _DATARES.fields_by_name['is_default'].containing_oneof = _DATARES.oneofs_by_name['_is_default'] 109 | DESCRIPTOR.message_types_by_name['DataRes'] = _DATARES 110 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 111 | 112 | DataRes = _reflection.GeneratedProtocolMessageType('DataRes', (_message.Message,), { 113 | 'DESCRIPTOR' : _DATARES, 114 | '__module__' : 'pyproto.tbclient.GetBubbleList.DataRes_pb2' 115 | # @@protoc_insertion_point(class_scope:tbclient.GetBubbleList.DataRes) 116 | }) 117 | _sym_db.RegisterMessage(DataRes) 118 | 119 | 120 | # @@protoc_insertion_point(module_scope) 121 | -------------------------------------------------------------------------------- /pyproto/tbclient/GetBubbleList/GetBubbleListResIdl_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/tbclient.GetBubbleList.GetBubbleListResIdl.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | from pyproto.tbclient import Error_pb2 as pyproto_dot_tbclient_dot_Error__pb2 15 | from pyproto.tbclient.GetBubbleList import DataRes_pb2 as pyproto_dot_tbclient_dot_GetBubbleList_dot_DataRes__pb2 16 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='pyproto/tbclient.GetBubbleList.GetBubbleListResIdl.proto', 20 | package='tbclient.GetBubbleList', 21 | syntax='proto3', 22 | serialized_options=None, 23 | create_key=_descriptor._internal_create_key, 24 | serialized_pb=b'\n8pyproto/tbclient.GetBubbleList.GetBubbleListResIdl.proto\x12\x16tbclient.GetBubbleList\x1a\x1cpyproto/tbclient.Error.proto\x1a,pyproto/tbclient.GetBubbleList.DataRes.proto\"\x81\x01\n\x13GetBubbleListResIdl\x12\x32\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1f.tbclient.GetBubbleList.DataResH\x00\x88\x01\x01\x12#\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x0f.tbclient.ErrorH\x01\x88\x01\x01\x42\x07\n\x05_dataB\x08\n\x06_errorb\x06proto3' 25 | , 26 | dependencies=[pyproto_dot_tbclient_dot_Error__pb2.DESCRIPTOR,pyproto_dot_tbclient_dot_GetBubbleList_dot_DataRes__pb2.DESCRIPTOR,]) 27 | 28 | 29 | 30 | 31 | _GETBUBBLELISTRESIDL = _descriptor.Descriptor( 32 | name='GetBubbleListResIdl', 33 | full_name='tbclient.GetBubbleList.GetBubbleListResIdl', 34 | filename=None, 35 | file=DESCRIPTOR, 36 | containing_type=None, 37 | create_key=_descriptor._internal_create_key, 38 | fields=[ 39 | _descriptor.FieldDescriptor( 40 | name='data', full_name='tbclient.GetBubbleList.GetBubbleListResIdl.data', index=0, 41 | number=1, type=11, cpp_type=10, label=1, 42 | has_default_value=False, default_value=None, 43 | message_type=None, enum_type=None, containing_type=None, 44 | is_extension=False, extension_scope=None, 45 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 46 | _descriptor.FieldDescriptor( 47 | name='error', full_name='tbclient.GetBubbleList.GetBubbleListResIdl.error', index=1, 48 | number=2, type=11, cpp_type=10, label=1, 49 | has_default_value=False, default_value=None, 50 | message_type=None, enum_type=None, containing_type=None, 51 | is_extension=False, extension_scope=None, 52 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 53 | ], 54 | extensions=[ 55 | ], 56 | nested_types=[], 57 | enum_types=[ 58 | ], 59 | serialized_options=None, 60 | is_extendable=False, 61 | syntax='proto3', 62 | extension_ranges=[], 63 | oneofs=[ 64 | _descriptor.OneofDescriptor( 65 | name='_data', full_name='tbclient.GetBubbleList.GetBubbleListResIdl._data', 66 | index=0, containing_type=None, 67 | create_key=_descriptor._internal_create_key, 68 | fields=[]), 69 | _descriptor.OneofDescriptor( 70 | name='_error', full_name='tbclient.GetBubbleList.GetBubbleListResIdl._error', 71 | index=1, containing_type=None, 72 | create_key=_descriptor._internal_create_key, 73 | fields=[]), 74 | ], 75 | serialized_start=161, 76 | serialized_end=290, 77 | ) 78 | 79 | _GETBUBBLELISTRESIDL.fields_by_name['data'].message_type = pyproto_dot_tbclient_dot_GetBubbleList_dot_DataRes__pb2._DATARES 80 | _GETBUBBLELISTRESIDL.fields_by_name['error'].message_type = pyproto_dot_tbclient_dot_Error__pb2._ERROR 81 | _GETBUBBLELISTRESIDL.oneofs_by_name['_data'].fields.append( 82 | _GETBUBBLELISTRESIDL.fields_by_name['data']) 83 | _GETBUBBLELISTRESIDL.fields_by_name['data'].containing_oneof = _GETBUBBLELISTRESIDL.oneofs_by_name['_data'] 84 | _GETBUBBLELISTRESIDL.oneofs_by_name['_error'].fields.append( 85 | _GETBUBBLELISTRESIDL.fields_by_name['error']) 86 | _GETBUBBLELISTRESIDL.fields_by_name['error'].containing_oneof = _GETBUBBLELISTRESIDL.oneofs_by_name['_error'] 87 | DESCRIPTOR.message_types_by_name['GetBubbleListResIdl'] = _GETBUBBLELISTRESIDL 88 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 89 | 90 | GetBubbleListResIdl = _reflection.GeneratedProtocolMessageType('GetBubbleListResIdl', (_message.Message,), { 91 | 'DESCRIPTOR' : _GETBUBBLELISTRESIDL, 92 | '__module__' : 'pyproto.tbclient.GetBubbleList.GetBubbleListResIdl_pb2' 93 | # @@protoc_insertion_point(class_scope:tbclient.GetBubbleList.GetBubbleListResIdl) 94 | }) 95 | _sym_db.RegisterMessage(GetBubbleListResIdl) 96 | 97 | 98 | # @@protoc_insertion_point(module_scope) 99 | -------------------------------------------------------------------------------- /pyproto/tbclient/ThemeRecommand_pb2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by the protocol buffer compiler. DO NOT EDIT! 3 | # source: pyproto/tbclient.ThemeRecommand.proto 4 | """Generated protocol buffer code.""" 5 | from google.protobuf import descriptor as _descriptor 6 | from google.protobuf import message as _message 7 | from google.protobuf import reflection as _reflection 8 | from google.protobuf import symbol_database as _symbol_database 9 | # @@protoc_insertion_point(imports) 10 | 11 | _sym_db = _symbol_database.Default() 12 | 13 | 14 | 15 | 16 | DESCRIPTOR = _descriptor.FileDescriptor( 17 | name='pyproto/tbclient.ThemeRecommand.proto', 18 | package='tbclient', 19 | syntax='proto3', 20 | serialized_options=None, 21 | create_key=_descriptor._internal_create_key, 22 | serialized_pb=b'\n%pyproto/tbclient.ThemeRecommand.proto\x12\x08tbclient\"\xa2\x01\n\x0eThemeRecommand\x12\x11\n\x04icon\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08tip_text\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nbutton_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x62utton_text\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x07\n\x05_iconB\x0b\n\t_tip_textB\r\n\x0b_button_urlB\x0e\n\x0c_button_textb\x06proto3' 23 | ) 24 | 25 | 26 | 27 | 28 | _THEMERECOMMAND = _descriptor.Descriptor( 29 | name='ThemeRecommand', 30 | full_name='tbclient.ThemeRecommand', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | create_key=_descriptor._internal_create_key, 35 | fields=[ 36 | _descriptor.FieldDescriptor( 37 | name='icon', full_name='tbclient.ThemeRecommand.icon', index=0, 38 | number=1, type=9, cpp_type=9, label=1, 39 | has_default_value=False, default_value=b"".decode('utf-8'), 40 | message_type=None, enum_type=None, containing_type=None, 41 | is_extension=False, extension_scope=None, 42 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 43 | _descriptor.FieldDescriptor( 44 | name='tip_text', full_name='tbclient.ThemeRecommand.tip_text', index=1, 45 | number=2, type=9, cpp_type=9, label=1, 46 | has_default_value=False, default_value=b"".decode('utf-8'), 47 | message_type=None, enum_type=None, containing_type=None, 48 | is_extension=False, extension_scope=None, 49 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 50 | _descriptor.FieldDescriptor( 51 | name='button_url', full_name='tbclient.ThemeRecommand.button_url', index=2, 52 | number=3, type=9, cpp_type=9, label=1, 53 | has_default_value=False, default_value=b"".decode('utf-8'), 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 57 | _descriptor.FieldDescriptor( 58 | name='button_text', full_name='tbclient.ThemeRecommand.button_text', index=3, 59 | number=4, type=9, cpp_type=9, label=1, 60 | has_default_value=False, default_value=b"".decode('utf-8'), 61 | message_type=None, enum_type=None, containing_type=None, 62 | is_extension=False, extension_scope=None, 63 | serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), 64 | ], 65 | extensions=[ 66 | ], 67 | nested_types=[], 68 | enum_types=[ 69 | ], 70 | serialized_options=None, 71 | is_extendable=False, 72 | syntax='proto3', 73 | extension_ranges=[], 74 | oneofs=[ 75 | _descriptor.OneofDescriptor( 76 | name='_icon', full_name='tbclient.ThemeRecommand._icon', 77 | index=0, containing_type=None, 78 | create_key=_descriptor._internal_create_key, 79 | fields=[]), 80 | _descriptor.OneofDescriptor( 81 | name='_tip_text', full_name='tbclient.ThemeRecommand._tip_text', 82 | index=1, containing_type=None, 83 | create_key=_descriptor._internal_create_key, 84 | fields=[]), 85 | _descriptor.OneofDescriptor( 86 | name='_button_url', full_name='tbclient.ThemeRecommand._button_url', 87 | index=2, containing_type=None, 88 | create_key=_descriptor._internal_create_key, 89 | fields=[]), 90 | _descriptor.OneofDescriptor( 91 | name='_button_text', full_name='tbclient.ThemeRecommand._button_text', 92 | index=3, containing_type=None, 93 | create_key=_descriptor._internal_create_key, 94 | fields=[]), 95 | ], 96 | serialized_start=52, 97 | serialized_end=214, 98 | ) 99 | 100 | _THEMERECOMMAND.oneofs_by_name['_icon'].fields.append( 101 | _THEMERECOMMAND.fields_by_name['icon']) 102 | _THEMERECOMMAND.fields_by_name['icon'].containing_oneof = _THEMERECOMMAND.oneofs_by_name['_icon'] 103 | _THEMERECOMMAND.oneofs_by_name['_tip_text'].fields.append( 104 | _THEMERECOMMAND.fields_by_name['tip_text']) 105 | _THEMERECOMMAND.fields_by_name['tip_text'].containing_oneof = _THEMERECOMMAND.oneofs_by_name['_tip_text'] 106 | _THEMERECOMMAND.oneofs_by_name['_button_url'].fields.append( 107 | _THEMERECOMMAND.fields_by_name['button_url']) 108 | _THEMERECOMMAND.fields_by_name['button_url'].containing_oneof = _THEMERECOMMAND.oneofs_by_name['_button_url'] 109 | _THEMERECOMMAND.oneofs_by_name['_button_text'].fields.append( 110 | _THEMERECOMMAND.fields_by_name['button_text']) 111 | _THEMERECOMMAND.fields_by_name['button_text'].containing_oneof = _THEMERECOMMAND.oneofs_by_name['_button_text'] 112 | DESCRIPTOR.message_types_by_name['ThemeRecommand'] = _THEMERECOMMAND 113 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 114 | 115 | ThemeRecommand = _reflection.GeneratedProtocolMessageType('ThemeRecommand', (_message.Message,), { 116 | 'DESCRIPTOR' : _THEMERECOMMAND, 117 | '__module__' : 'pyproto.tbclient.ThemeRecommand_pb2' 118 | # @@protoc_insertion_point(class_scope:tbclient.ThemeRecommand) 119 | }) 120 | _sym_db.RegisterMessage(ThemeRecommand) 121 | 122 | 123 | # @@protoc_insertion_point(module_scope) 124 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | grpcio==1.38.0 2 | grpcio-tools==1.38.0 3 | protobuf==3.17.3 4 | frida==14.2.18 5 | frida-tools==9.2.4 --------------------------------------------------------------------------------