262 Commits

Author SHA1 Message Date
7893bb0cd5 优化Windows显示方式 2020-02-12 20:19:28 +08:00
0add87dfa8 关注消息 2020-01-30 21:48:23 +08:00
4ef018a34b 竟然会反502TAT 2020-01-30 20:44:47 +08:00
7102a45382 避免过于频繁更新状态 2020-01-15 13:01:57 +08:00
27e5224b6c @property 2020-01-13 09:22:56 +08:00
d9d0778834 更新时间,更新逻辑 2020-01-13 09:21:21 +08:00
e36eec9dac UPDATE README.md 2020-01-10 11:50:17 +08:00
81dbc119da UPDATE README.md 2020-01-10 11:47:50 +08:00
cf5913e281 粉丝团升级消息 2020-01-09 09:31:59 +08:00
bb5fa72f50 不存在时的判断 2020-01-09 09:27:41 +08:00
6a2288a45d 更新README 2020-01-03 09:48:16 +08:00
ee9556548d 主动更新礼物 2020-01-02 21:37:01 +08:00
107309c043 proto更新,粉丝团,牌子 2020-01-02 20:03:04 +08:00
d0b630262f 提交spec文件 2020-01-02 17:04:28 +08:00
ce23a67b59 回去测试下 2020-01-02 16:39:17 +08:00
7586432907 proto更新 2020-01-02 16:36:03 +08:00
5351641144 proto更新 2020-01-02 14:49:44 +08:00
f971380b5f 接口调整,Win 2020-01-01 22:39:24 +08:00
cae988e0fe 更新粉丝团 2020-01-01 21:39:20 +08:00
ff53afffb5 Proto更新--心累 2020-01-01 19:56:49 +08:00
8f1893fdb1 Proto更新 2020-01-01 17:17:53 +08:00
5c0ed5e13f DEMO CHECK 2020-01-01 13:30:26 +08:00
d327a230b2 显示优化 2020-01-01 13:17:21 +08:00
560baf1b01 房间信息获取接口 2020-01-01 12:34:06 +08:00
d3cce09a7a 提取请求接口,添加ping房间 2020-01-01 11:55:12 +08:00
a3fec20b52 代码兼容性 2019-12-31 17:49:38 +08:00
c4e2d8ee14 代码兼容性 2019-12-31 17:45:27 +08:00
452e1da468 类型提示 2019-12-31 15:56:21 +08:00
3096f742d5 判断 2019-12-31 15:47:45 +08:00
58991a8c43 控制台端 2019-12-31 15:45:48 +08:00
f598a5da05 默认值 2019-12-31 15:33:58 +08:00
372953b3e0 更新部分接口,待测试 2019-12-31 14:10:32 +08:00
37fdd0fa9a 搜索及详情接口OK 2019-12-31 12:59:37 +08:00
2d6a723be0 删除多余参数 2019-12-31 12:13:18 +08:00
3cd2db8f7b 避免玄学问题 2019-12-31 12:11:38 +08:00
28ed1df26b 规范输出 2019-12-31 12:11:13 +08:00
608f6924e3 命名 2019-12-31 12:06:55 +08:00
e8b981e7df 迷茫 2019-12-31 12:05:24 +08:00
d742edaff4 测试删除部分无用参数 2019-12-31 12:03:59 +08:00
0e37230f69 解析成功,待继续发掘有用数据 2019-12-31 11:27:56 +08:00
a14d1361bb 更新下proto 2019-12-31 10:48:36 +08:00
4da7e0c85d 搜索更新用户 2019-12-31 10:06:24 +08:00
a3b9f52684 DEMO 2019-12-30 18:09:26 +08:00
e402595a75 添加通用参数 2019-12-30 15:57:23 +08:00
b15428af21 TEST Var change 2019-12-29 20:12:32 +08:00
e1eaf45e58 更多验证规则 2019-12-29 20:10:27 +08:00
d5f7306e59 Merge branch 'master' of http://github.com/q792602257/XiguaLiveDanmakuHelper 2019-12-23 20:49:03 +08:00
de8cda6846 更新等待时间 2019-12-23 20:48:34 +08:00
637046c4ef 删除无用代码 2019-12-20 13:15:49 +08:00
96c68dc608 B站接口更新 2019-12-19 19:56:51 +08:00
fb25a21c4c 忘记删除print了 2019-12-18 22:50:26 +08:00
c8198bf246 最终还是迎来了这天 2019-12-18 22:43:24 +08:00
f0f3316714 令人失智的操作TAT 2019-12-13 10:52:00 +08:00
cd03b04cf7 写错了 2019-12-09 20:21:42 +08:00
e3fa5d9de0 避免下播马上上播它还是把稿投出去的问题(未测试) 2019-12-09 09:35:17 +08:00
8520a36be2 避免未开播在疯狂提交发布申请 2019-12-05 09:05:37 +08:00
65be98f6b8 加点小延迟 2019-12-04 10:12:16 +08:00
53bda4d853 逻辑 2019-12-03 09:21:00 +08:00
1c7840c10d 修复下播延迟投稿判断 2019-11-30 19:07:45 +08:00
96fc50498c Merge remote-tracking branch 'origin/master' 2019-11-29 09:23:27 +08:00
6acc94b7c5 录播延迟投稿,注释补全 2019-11-29 09:23:11 +08:00
ca7dc40b03 下载出错直接更新房间数据 2019-11-25 22:17:52 +08:00
f96dd9448b Typo 2019-11-25 09:36:50 +08:00
9fb552e6dc 优化更新时间间隔 2019-11-25 09:34:06 +08:00
9b2f1a744f 登陆问题 2019-10-24 21:57:00 +08:00
172e82ba54 改改自己的沙雕代码 2019-10-22 22:00:18 +08:00
2b0adbb81a 改改自己的沙雕代码 2019-10-22 21:56:06 +08:00
83af0df5d4 登陆延迟问题 2019-10-22 21:46:11 +08:00
f80a44f1ac 方法 2019-10-22 21:34:42 +08:00
f8a602e6a3 BUG修复 2019-10-22 10:21:30 +08:00
adc6e10df1 剔除一些无效代码,优化部分逻辑 2019-10-22 10:09:50 +08:00
64fbe010ef Typo 2019-10-19 08:28:38 +08:00
204d8342bb 更新设置 2019-10-19 08:27:51 +08:00
0fc33fccff 优化逻辑 2019-10-19 08:23:41 +08:00
cf169021c6 清理逻辑 2019-10-18 23:23:57 +08:00
a307760dcc 清理逻辑 2019-10-18 23:20:57 +08:00
ae08a4398a 结构更改 2019-10-18 23:13:16 +08:00
f6501ca698 Typo 2019-10-18 22:39:16 +08:00
3be383c750 开始上传就登陆下 2019-10-18 22:37:20 +08:00
6536acb10e 删除Bypy,b站账号Common化,通过接口控制账号 2019-10-18 22:34:24 +08:00
586ef37874 修复忽略了30分钟内从新开播的可能 2019-09-28 21:13:00 +08:00
8f20250dee 改下自己写的sb代码 2019-09-25 09:02:18 +08:00
b9d9a8c435 改下自己写的sb代码 2019-09-24 09:21:58 +08:00
2554b537e8 防抖~~~~~~~~
最近主播老是掉线,避免误传(B站删稿件要2个硬币了TAT)
2019-09-24 09:18:40 +08:00
a0824785e5 更改主播名称判断,西瓜老是给些其他主播的名字忽悠程序TAT、 2019-08-23 11:07:43 +08:00
f25aac1fd9 Reduce Waiting Time 2019-07-29 09:11:30 +08:00
325e781758 嗯,是个很简单的防抖算法呢(硬核防抖 2019-07-20 11:11:19 +08:00
997fa950fd Fix Jumped Issue 2019-07-17 13:14:48 +08:00
081649ab58 增加测量宽度 2019-07-17 09:59:23 +08:00
71e6f829c5 Test 2019-07-17 09:57:56 +08:00
9e78994c03 Fix Divide by zero 2019-07-17 09:55:16 +08:00
359b4b43c7 提高Net精度(虽然没啥用 2019-07-17 09:53:32 +08:00
e1c9beb872 提高Net精度(虽然没啥用 2019-07-17 09:50:53 +08:00
add5a4654c Merge remote-tracking branch 'origin/master'
# Conflicts:
#	templates/status.html
2019-07-17 09:27:31 +08:00
95565c33ec 更改状态图片,更改liveDownloader的连接池,api使用连接池 2019-07-17 09:26:39 +08:00
3e3881022e upd template 2019-05-30 08:12:00 +08:00
76f280172b status更改 2019-05-28 19:17:49 +08:00
182c97fb84 添加判断是否显示图表 2019-05-28 11:29:41 +08:00
ee7ddbb1de 支持一下图表 2019-05-28 10:34:52 +08:00
0cb3987380 Merge remote-tracking branch 'origin/master' 2019-05-22 10:01:39 +08:00
567bf5f002 优化因退出而导致的投稿日期不变的问题,优化因下拨后下载进程退出而房间信息未更新的问题 2019-05-22 10:01:07 +08:00
fecd35844f Fix Bug 2019-05-17 21:35:48 +08:00
b4559f6771 Fix Bug 2019-05-17 21:20:25 +08:00
708218d34a 代码优化(可能是负优化,待测试) 2019-05-17 09:50:11 +08:00
a3d9e17a71 代码部分优化(可能是负优化,待测试) 2019-05-16 20:55:43 +08:00
89e9410810 Merge branch 'with_api'
# Conflicts:
#	README.md
2019-05-14 20:43:34 +08:00
a6aafd0ef2 Merge branch 'with_api'
# Conflicts:
#	README.md
2019-05-14 20:41:29 +08:00
6f1563cfb6 Update Readme 2019-05-14 20:36:45 +08:00
f5971c8429 。。。 2019-05-14 20:32:50 +08:00
1677afd975 Typo Fix 2019-05-13 23:20:49 +08:00
22925398da 修复因西瓜直播搜索接口修改导致的无法获取直播用户的问题 2019-05-12 19:31:43 +08:00
f1615957bc Update README.md 2019-05-11 21:27:15 +08:00
b61bd4c70c Avoid loop in Boardcaster is not found and stop download 2019-05-11 21:21:43 +08:00
f4bc6d847d 更新一下因为不退出而导致之后的发布日期不对的问题 2019-05-10 23:22:53 +08:00
c1141c366a Try to add a new Curses Version 2019-05-10 23:21:03 +08:00
ef0fe2cb04 trying fixing stuck at downloading 2019-05-05 14:29:58 +08:00
46b3500faa more exactly time settings 2019-04-30 10:09:42 +08:00
1f07e1046c some text changes 2019-04-29 11:44:58 +08:00
251c1e53fc simple doClean Flag 2019-04-29 10:27:52 +08:00
84a283b4c2 Time Format 2019-04-29 10:09:56 +08:00
4389016b95 Typo Error Fix 2019-04-29 10:08:18 +08:00
f1b4a878a5 添加强制清理功能,添加百度云上传功能,部分逻辑修改 2019-04-29 09:50:26 +08:00
43e161ebb6 typo fix 2019-04-27 22:17:31 +08:00
ed3ab5dc4f time fix 2019-04-27 22:11:51 +08:00
2099321f0b threading doClean 2019-04-27 22:10:02 +08:00
4ea19b4ff4 Fix when program at another disk 2019-04-27 22:08:16 +08:00
1644f52eb0 避免在无法获取下载链接是将false传入downloader内 2019-04-26 14:49:28 +08:00
f607f11b82 增加百度云链接 2019-04-26 14:48:11 +08:00
c4c6b1a752 fix: while set not upload ,it will not move any file to free disk space 2019-04-24 13:05:59 +08:00
99926827f1 small fix 2019-04-24 11:09:17 +08:00
03ce8df291 Merge remote-tracking branch 'origin/with_api' into with_api 2019-04-22 05:59:47 +08:00
5c1f712900 修改页面样式,修复网速的准确度 2019-04-22 05:59:22 +08:00
d17d0bd534 ...Typo Error 2019-04-18 10:47:29 +08:00
e520e39b72 ...Typo Error 2019-04-18 10:43:27 +08:00
b3162b1ed5 ...Typo Error 2019-04-18 10:43:04 +08:00
69b594cf8e ...Typo Error 2019-04-18 10:39:25 +08:00
86e4aa483f 强制编码上传 2019-04-18 10:37:13 +08:00
17d2cc4ebd 添加部分提醒 2019-04-18 08:02:54 +08:00
1ec9f3c922 修改i清理方式 2019-04-18 07:57:27 +08:00
9f075077ba 避免沙雕注释 2019-04-17 22:49:50 +08:00
ba40134219 Limit upload too small file 2019-04-17 07:59:14 +08:00
1ca7226cfe 主动清理 2019-04-16 21:28:22 +08:00
e50ca2fd5a Merge remote-tracking branch 'origin/with_api' into with_api 2019-04-16 21:22:32 +08:00
a9ecd1e7ab 断点续传 2019-04-16 21:21:45 +08:00
987c7aef01 Merge remote-tracking branch 'origin/with_api' into with_api 2019-04-16 15:14:52 +08:00
21009f6b51 a little typo error 2019-04-16 15:14:18 +08:00
035e71185a Merge remote-tracking branch 'origin/with_api' into with_api 2019-04-14 15:37:53 +08:00
2a51593cc3 避免下到别人的直播了 2019-04-14 15:37:13 +08:00
b813129410 自动移动 2019-04-11 15:11:18 +08:00
6c02b965b0 fix: if disk will full , delete some record file 2019-04-10 21:11:40 +08:00
e77fa5d6ad 日志记录逻辑 2019-04-10 07:04:12 +08:00
e066048e9f 增加操作日志,记录操作日志 2019-04-09 22:15:37 +08:00
612a9185eb Minify 2019-04-09 14:23:08 +08:00
a6fa88b981 支持显示网速 2019-04-09 13:48:46 +08:00
a6662450de 部分逻辑,更改名字 2019-04-09 08:11:09 +08:00
86fbf31120 Fix download a file wasnt exists 2019-04-08 23:05:06 +08:00
ef7d4c8d3e Typo Error Fix 2019-04-08 22:01:38 +08:00
9f999c013e Typo Error Fix 2019-04-08 21:19:13 +08:00
78fe5582e6 添加:系统信息查看 2019-04-08 21:13:42 +08:00
14430e79ef 添加:系统信息查看 2019-04-08 21:11:22 +08:00
5e3f9e9aee 支持不上传视频(待测试) 2019-04-08 18:33:29 +08:00
b55686d095 支持不上传视频(待测试) 2019-04-08 18:32:23 +08:00
c3a965f284 页面及逻辑修改 2019-04-08 11:32:05 +08:00
99d148666e Fix: Max Retry 2019-04-07 23:35:47 +08:00
be1a1df00b support change while running 2019-04-07 22:27:17 +08:00
ce819185eb support change while running 2019-04-07 22:26:21 +08:00
16c68e5ceb wc 2019-04-07 19:12:03 +08:00
5fa4ee929e 改善代码兼容性 2019-04-07 16:01:27 +08:00
00190468a8 支持api获取状态 2019-04-07 15:34:17 +08:00
b9b0994f4c 支持api获取状态 2019-04-07 15:30:57 +08:00
f8d4be5385 更新:Api升级了
修复:下播超过1小时才会投稿视频
2019-04-07 00:46:58 +08:00
90f6e8e1cb 修复:Test fix 2019-04-03 11:43:23 +08:00
3c872b0484 修复Api更改导致的未开播时报错问题 2019-03-31 08:06:29 +08:00
5f949ccf34 Fix typo error 2019-03-29 08:06:30 +08:00
2750c9d25b 修复:无法更新房间信息的问题 2019-03-22 09:07:29 +08:00
6842961d42 修复小BUG导致无法上传 2019-03-22 07:59:19 +08:00
c89f84a44f 避免编码进程出错退出导致无法继续进行上传 2019-03-21 21:16:08 +08:00
5ee60d3dc7 改进:reload后删除文件 2019-03-21 15:41:08 +08:00
4c25ea3410 进程断开后,立即更新房间信息 2019-03-21 14:18:03 +08:00
6cbaa384dc .... 2019-03-21 14:16:32 +08:00
c9c962f646 .... 2019-03-21 13:05:24 +08:00
4d54e3dd6d Merge remote-tracking branch 'origin/master' 2019-03-21 13:01:23 +08:00
dd08229ff1 Fix 2019-03-21 13:00:57 +08:00
11161c4b71 Merge remote-tracking branch 'origin/master' 2019-03-21 07:47:43 +08:00
07d42c558a 添加方法,每次上传完成后,自动保存状态 2019-03-21 07:47:03 +08:00
bf8d3b48cb 对下载线程是否断开进行更频繁的检查,尽量减小更新房间信息更新的请求 2019-03-20 13:32:02 +08:00
80ac42075e Emeg Fix 2019-03-19 20:27:53 +08:00
9a3d3bd048 Encode Before upload 2019-03-19 13:40:33 +08:00
9a74b2b6e5 部分改进:下载文件大小为0时,删除文件并不上传该文件 2019-03-18 09:17:51 +08:00
9316b1e855 Fix : avoid exception when network is not stable 2019-03-17 22:12:18 +08:00
054c143e66 UPDATE README.md 2019-03-16 18:14:07 +08:00
041580e1ab 抽空写写注释 2019-03-16 18:12:17 +08:00
73d1dc6cf2 部分兼容输入中文 2019-03-16 17:55:17 +08:00
7692757091 Api: Fix showing "HEADERS incomplete" 2019-03-14 19:17:23 +08:00
426f4d6273 部分改进:录播工具提示 2019-03-14 17:59:44 +08:00
4c9d04f175 修复:下播后无法投稿的问题 2019-03-14 13:59:41 +08:00
7bc0b85ae5 Add downlaod http flv stream 2019-03-14 13:55:26 +08:00
179b808de6 Fix : while upload file is missing, uploader will pass the file 2019-03-12 20:51:37 +08:00
19d48ed324 LiveDownloader : add -bsf param to avoid encode failure 2019-03-12 20:47:31 +08:00
d1124a9370 trying yo encode to flv to avoid lagging 2019-03-11 13:10:31 +08:00
d9627a3ced Forget to start Encode Daemon TAT 2019-03-10 10:56:58 +08:00
1e039fb1c9 Try Encoding Before Upload 2019-03-10 10:54:31 +08:00
bfbbe06cd2 liveDownloader updPlaylist when finished downloading a part 2019-03-03 00:50:53 +08:00
767b4728b5 Fix : self.Files not empty while next live start 2019-02-21 10:34:31 +08:00
dee41be85d Emeg fix 2019-02-16 23:05:35 +00:00
1e1654a4b8 Fix duplicated user has been shown 2019-02-16 08:03:48 +00:00
b9b24fe7c6 Delete Encode function 2019-02-16 07:58:31 +00:00
216c9085c1 Improve: when server not return "MULTI_PART_SUCCESS" 2019-02-14 16:58:36 +08:00
0fd44117ec Fix: chunkSize will not upload when MultiPart PUT Error 2019-02-14 16:46:29 +08:00
ed718fa438 Trying Fix : Duplicated User had shown at Lottery finished 2019-02-11 13:18:56 +08:00
8a61170fbf Emeg Fix : str is not callable 2019-02-08 10:48:03 +08:00
fa7a9bc102 录播工具:房间名放在设置里 2019-02-07 16:00:59 +08:00
35d97a77b1 Emeg Fix : import json TAT 2019-02-07 12:45:02 +08:00
48eccd68c5 Fix: 搜索时,出现非JSON回复导致程序退出 2019-02-06 21:07:57 +08:00
362f5c51d3 整理代码 2019-02-04 16:16:41 +08:00
0219d5d1aa Fix: Actions when upload finished will not work fixed 2019-02-02 19:21:26 +08:00
530522f51c 录播工具改进:下载完毕后用ffmpeg过一遍再上传,避免视频文件错误 2019-02-02 12:05:01 +08:00
b8b793e292 网络错误人性化提示 2019-02-01 20:17:39 +08:00
e4fef3df33 修复:脑子不够用 判断反了 2019-02-01 19:37:03 +08:00
54fa20c4f7 紧急更新:新礼物模板 2019-02-01 19:36:42 +08:00
89edd10dc2 Emeg Fix : While Lottery is None , Program will crash 2019-02-01 16:44:38 +08:00
ebe01566c0 Fix: Not show Error Msg when not living 2019-02-01 16:34:14 +08:00
a0f76eb00b Merge branch 'master' of https://github.com/q792602257/XiguaLiveDanmakuHelper 2019-02-01 16:33:25 +08:00
f81c2811ce 录播助手更新:避免因为未开播而导致出现错误提示 2019-02-01 16:31:32 +08:00
c12d8cf4bb Remove Testing Things 2019-02-01 16:26:47 +08:00
77d7f35d25 Add: Actions When Upload Finished 2019-02-01 16:20:50 +08:00
84ca4d0a62 修改isValidRoom判断,避免误更改导致无法获取弹幕 2019-02-01 16:17:21 +08:00
4a59cbcf82 抽奖信息可从弹幕中提取,可实时检测抽奖避免刷屏 2019-02-01 13:33:01 +08:00
1b920fa55c 修复:因isValidRoom判断错误导致的无法获取弹幕,修正抽奖结束时间判断 2019-02-01 13:08:09 +08:00
81f730ea68 各种适配新Android Api,修复各种Bug 2019-01-31 23:05:48 +08:00
a1cfc9b914 Update : Replace delete downloaded files With move to oss 2019-01-31 17:23:18 +08:00
81763fdf37 Emeg Update : Fix isLive is always True 2019-01-31 13:09:21 +08:00
884122b007 Emeg Update: dynamic roomId fix 2019-01-30 19:07:07 +08:00
8c0320c97e 全面改为AndroidApi,添加抽奖识别及消息提示 2019-01-29 13:50:29 +08:00
14525ee76e 添加搜索功能[Beta]
Update ReadMe.md

Signed-off-by: Jerry Yan <792602257@qq.com>
2019-01-28 20:26:23 +08:00
cd4d7605f5 Fix Conflicts
# Conflicts:
#	api.py
2019-01-28 18:58:16 +08:00
5da70e81f9 Api使用Android app弹幕协议 2019-01-28 18:54:24 +08:00
f7727a3c39 Emeg: fix default room 2019-01-27 22:26:06 +08:00
e46e4ec0d7 Update README.md 2019-01-27 22:20:23 +08:00
a4f4c10efc 修正Linux版显示 2019-01-27 22:18:17 +08:00
82b076df3f 修正因未开播而导致的Queue内占满了False的BUG 2019-01-26 18:54:41 +08:00
cf8cbaae8c 修复删除已上传视频的逻辑,添加 追加上传功能 2019-01-26 16:29:04 +08:00
50216dc3e7 Create README.md 2019-01-26 14:09:26 +08:00
90435ccbaf 上传完成后自动删除片段,以节省内存 2019-01-26 14:04:23 +08:00
c41ed1f950 Bug Fixed 2019-01-26 13:21:44 +08:00
48cb2edc58 Fix Bugs And Improve Perfomance 2019-01-26 04:18:57 +08:00
798b59e3fd 修改Bilibili.py,尝试下载好片段就上传,等待下播后结束上传 2019-01-25 19:39:15 +08:00
d290c89345 初版自动投稿工具 to Bilibili
直播缓存完就直接上传了,正在测试中,感谢bilibili.py原代码作者:comwrg
2019-01-25 14:26:07 +08:00
33739d21b3 更新:添加未知消息的提示,添加设置房管消息检测 2019-01-23 19:43:53 +08:00
2df0dc07bd 临时更新:未返回导致的错误 2019-01-23 19:12:47 +08:00
746f993a8d 准备加入自动投递功能 2019-01-23 14:50:01 +08:00
4270612a98 更新大部分判断,WinMain加入全部显示参数启动 2019-01-22 21:37:44 +08:00
52a49e5e2d 临时更新,因西瓜视频WEB API变化 2019-01-22 15:22:30 +08:00
4572fd63ea Emeg Update 2019-01-22 15:08:05 +08:00
10754d8ca0 修正部分代码 2019-01-22 00:29:37 +08:00
ef732aa965 增加DEBUG模式 2019-01-22 00:28:25 +08:00
414aef7eb3 修正房间提示信息 2019-01-22 00:21:32 +08:00
e3da5d98b3 增加禁言消息 2019-01-22 00:13:49 +08:00
5d5a0a9432 改进标题文字 2019-01-20 23:29:53 +08:00
e3b82555d6 修正部分代码 2019-01-20 23:28:04 +08:00
ab06868f06 改进部分代码,增加Linux可运行的版本,可自己选择想要进入的房间
Signed-off-by: Jerry Yan <792602257@qq.com>
2019-01-20 23:10:35 +08:00
c3015eba65 误删除代码,暂时恢复部分,优化代码结构
待写文档,待写README
2019-01-17 11:42:04 +08:00
37 changed files with 30803 additions and 289 deletions

181
.gitignore vendored Normal file
View File

@ -0,0 +1,181 @@
# Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
### VirtualEnv template
# Virtualenv
# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
.Python
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
[Ss]cripts
pyvenv.cfg
.venv
pip-selfcheck.json

1
Demo/256_.json Executable file

File diff suppressed because one or more lines are too long

BIN
Demo/324_.txt Normal file

Binary file not shown.

15
Demo/Xigua.proto Executable file
View File

@ -0,0 +1,15 @@
syntax = "proto2";
message XiguaLive {
message Data {
// WebcastChatMessage 聊天
// WebcastGiftMessage 礼物
required string method = 1;
required bytes raw = 2;
}
repeated Data data = 1;
required string cursor = 2;
optional int32 fetch_interval = 3;
optional int32 now = 4;
required string internal_ext = 5;
}

10
Demo/XiguaGift.proto Normal file
View File

@ -0,0 +1,10 @@
syntax = "proto2";
// 礼物
message Gift {
required string id = 1;
required string name = 2;
}
message GiftPack {
required int32 id = 1;
required Gift gift = 2;
}

89
Demo/XiguaMessage.proto Normal file
View File

@ -0,0 +1,89 @@
syntax = "proto2";
import "XiguaUser.proto";
import "XiguaGift.proto";
message Message {
required CommonInfo commonInfo = 1;
}
message FansClubMessage {
required CommonInfo commonInfo = 1;
// 升级是1加入是2
required int32 type = 2;
// 提示文字
required string content = 3;
required User user = 4;
}
message FansClubStatsMessage {
required CommonInfo commonInfo = 1;
required string title = 2;
required int32 count = 3;
}
message UserSeqMessage {
required CommonInfo commonInfo = 1;
required string popularityText = 4;
required int32 popularity = 6;
}
message DailyRankMessage {
required CommonInfo commonInfo = 1;
required int32 ranking = 10;
}
message ChatMessage {
required CommonInfo commonInfo = 1;
required User user = 2;
required string content = 3;
}
message MemberMessage {
required CommonInfo commonInfo = 1;
required User user = 2;
required string popularityText = 14;
}
message GiftMessage {
required CommonInfo commonInfo = 1;
required int32 giftId = 2;
// 可能是GroupId之类的东西
// required int32 UNKNOWN_INT = 3;
required int32 content4 = 4;
required int32 repeated = 5;
required int32 combo = 6;
optional User user = 7;
// 是否发完了,注:不可连击的也是没有发完的
optional bool isFinished = 9 [ default = false ];
}
message SocialMessage {
required CommonInfo commonInfo = 1;
required User user = 2;
required int32 int4 = 4;
required int32 fansCount = 6;
}
// 样式
message Style {
optional string color = 1;
optional int32 fontWeight = 4;
}
// 参数
message Params {
// 1 字符串
// 11 用户
// 12 礼物
required int32 type = 1;
optional Style style = 2;
optional string string = 11;
optional UserPack users = 21;
optional GiftPack gifts = 22;
}
// 自定义显示信息
message DisplayText {
// 参数
required string method = 1;
required string format = 2;
optional Style bgStyle = 3;
required Params params = 4;
}
// 通用定义
message CommonInfo {
required string method = 1;
required int32 msg_id = 2;
required int32 room_id = 3;
required int32 create_time = 4;
optional int32 someEnum = 6;
optional DisplayText displayText = 8;
}

81
Demo/XiguaUser.proto Normal file
View File

@ -0,0 +1,81 @@
syntax = "proto2";
message UserPack {
required User user = 1;
}
// 头衔
message Badge {
message FanClubText {
required string text = 1;
optional string color = 2;
required int32 level = 3;
}
repeated string url = 1;
// optional string localUrl = 2;
optional int32 height = 3;
optional int32 width = 4;
// 3 房管
// 6 贵族
// 7 粉丝团
optional int32 type = 6;
optional string clickTo = 7;
optional FanClubText fanClubText = 8;
}
message FansClubPack {
message FansClub {
required string title = 1 [default = ''];
required int32 level = 2 [default = 0];
optional int32 someEnum = 3;
}
required FansClub fansClub = 1;
}
// 用户信息
message User {
// 头像
message Avatar {
required string url = 1;
optional string id = 2;
}
// 粉丝和粉
message Follow {
optional int32 following = 1 [default = 0];
optional int32 follower = 2 [default = 0];
}
// 花钱等级
message PayGrade {
required int32 current = 1;
required int32 level = 6;
optional int32 currentLevelNeed = 10;
optional int32 nextLevelNeed = 11;
optional string content = 13;
required Badge badge = 19;
optional int32 toNextLevelNeed = 21;
}
// 荣誉等级
message HonorLevel {
required Badge badge = 19;
}
// 贵族
message Noble {
message NobleBoarder {
repeated string urlList = 1;
required string uri = 2;
optional int32 height = 3;
optional int32 width = 4;
}
required string content = 4;
optional NobleBoarder boarder = 8;
}
required int64 id = 1;
required string nickname = 3;
required int32 gender = 4;
// 这个顺序可能有点迷,不是很清楚
required Avatar avatarThumb = 9;
optional Avatar avatarMedium = 10;
optional Avatar avatarLarge = 11;
repeated Badge badge = 21;
optional Follow follow = 22;
required PayGrade payGrade = 23;
required FansClubPack fansClub = 24;
required int32 totalPaid = 34;
}

BIN
Demo/a.txt Normal file

Binary file not shown.

BIN
Demo/fst.txt Normal file

Binary file not shown.

997
Demo/guanzhu.txt Normal file
View File

@ -0,0 +1,997 @@
1 {
1: "WebcastGiftMessage"
2 {
1 {
1: "WebcastGiftMessage"
2: 6787717978657360643
3: 6787691314156276488
4: 1580388803763
6: 1
8 {
1: "webcast_xigua_gift_message"
2: "{0:user} \351\200\201\347\273\231\344\270\273\346\222\255{2:string}\344\270\252{1:gift}"
3 {
1: "#ffff9d5c"
4: 400
}
4 {
1: 11
2 {
1: "#ffffd600"
4: 400
}
21 {
1 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
2: 1
}
}
4 {
1: 12
2 {
1: "#ffff9d5c"
4: 400
}
22 {
1: 10001
2 {
1: "live_gift_10001"
2: "\350\245\277\347\223\234"
}
}
}
4 {
1: 1
2 {
1: "#ffff9d5c"
4: 400
}
11: "18"
}
}
}
2: 10001
3: 4997044
4: 1
5: 18
6: 18
7 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
11: 1580388797
12: 7453182
}
}
1 {
1: "WebcastSocialMessage"
2 {
1 {
1: "WebcastSocialMessage"
2: 6787718225754295054
3: 6787691314156276488
4: 1580388803802
6: 1
}
2 {
1: 111036833136
3: "\347\224\250\346\210\2679627521617519"
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/3796/2975850990~120x256.image"
}
22 {
1: 1
2: 19
}
23 {
19: ""
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAApZHNJdD-IbL7CES631w87jSXrSyXZfqETb-HYnYx6Ug"
54: 3
}
4: 1
6: 169079
}
}
1 {
1: "WebcastGiftMessage"
2 {
1 {
1: "WebcastGiftMessage"
2: 6787718023417531148
3: 6787691314156276488
4: 1580388804048
6: 1
8 {
1: "webcast_xigua_gift_message"
2: "{0:user} \351\200\201\347\273\231\344\270\273\346\222\255{2:string}\344\270\252{1:gift}"
3 {
1: "#ffff9d5c"
4: 400
}
4 {
1: 11
2 {
1: "#ffffd600"
4: 400
}
21 {
1 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
2: 1
}
}
4 {
1: 12
2 {
1: "#ffff9d5c"
4: 400
}
22 {
1: 10001
2 {
1: "live_gift_10001"
2: "\350\245\277\347\223\234"
}
}
}
4 {
1: 1
2 {
1: "#ffff9d5c"
4: 400
}
11: "19"
}
}
}
2: 10001
3: 4997044
4: 1
5: 19
6: 19
7 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
11: 1580388797
12: 7453182
}
}
1 {
1: "WebcastRoomUserSeqMessage"
2 {
1 {
1: "WebcastRoomUserSeqMessage"
2: 6787718227533761294
3: 6787691314156276488
4: 1580388804226
}
2 {
1: 9999
2 {
1: 4719119436
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/6368/3857576856~120x256.image"
}
23: ""
54: 3
}
3: 1
}
2 {
1: 9998
2 {
1: 60374191432
2: 259345
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/da99000fd41edfb7daa6~120x256.image"
}
23: ""
54: 3
}
3: 2
}
2 {
1: 1699
2 {
1: 3544417251634206
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/830d7e15f45946aa9b757a500cc6dcbe~120x256.image"
}
23: ""
54: 3
}
3: 3
}
2 {
1: 1099
2 {
1: 4261353838881501
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/c24df9dffd6d45929c227c5da22fe406~120x256.image"
}
23: ""
54: 3
}
3: 4
}
2 {
1: 520
2 {
1: 2933125236921479
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/2e1c9d64f34a4a3e8a326fe5394659fd~120x256.image"
}
23: ""
54: 3
}
3: 5
}
2 {
1: 300
2 {
1: 3927095572170669
9 {
1: "http://p1-xg.bytecdn.cn/thumb/daaa001914e0039994ae"
2: "daaa001914e0039994ae"
}
23: ""
54: 3
}
3: 6
}
2 {
1: 120
2 {
1: 153552343543981
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3795/3033762272~120x256.image"
}
23: ""
54: 3
}
3: 7
}
2 {
1: 99
2 {
1: 1732418933370259
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/5941f17833524bfa9316a648c39c990f~120x256.image"
}
23: ""
54: 3
}
3: 8
}
2 {
1: 99
2 {
1: 104372509299
9 {
1: "http://p1-xg.bytecdn.cn/thumb/da920004cd041ec12061"
2: "da920004cd041ec12061"
}
23: ""
54: 3
}
3: 9
}
2 {
1: 60
2 {
1: 60518722952
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/0f9162a614bd474f9fbda57614a0c9f1~120x256.image"
}
23: ""
54: 3
}
3: 10
}
2 {
1: 30
2 {
1: 1261881879167767
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3795/3044413937~120x256.image"
}
23: ""
54: 3
}
3: 11
}
2 {
1: 22
2 {
1: 1173933315333736
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/a181c0707ff540aba16f43af049a3791~120x256.image"
}
23: ""
54: 3
}
3: 12
}
2 {
1: 20
2 {
1: 3949047076102647
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/187afa353816402cb827e9fae386ca2a~120x256.image"
}
23: ""
54: 3
}
3: 13
}
2 {
1: 2
2 {
1: 65771610619
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/3793/3131589739~120x256.image"
}
23: ""
54: 3
}
3: 14
}
2 {
2 {
1: 99827340042
9 {
1: "http://p1-xg.bytecdn.cn/thumb/da74000192436fc5db6e"
2: "da74000192436fc5db6e"
}
23: ""
54: 3
}
3: 15
}
2 {
2 {
1: 99482502045
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3793/3114521287~120x256.image"
}
23: ""
54: 3
}
3: 16
}
2 {
2 {
1: 98103952579
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/3793/3131589739~120x256.image"
}
23: ""
54: 3
}
3: 17
}
2 {
2 {
1: 9746464842
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/6ad34237256e4471b16810eb098224c0~120x256.image"
}
23: ""
54: 3
}
3: 18
}
2 {
2 {
1: 97221408269
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/3793/3131589739~120x256.image"
}
23: ""
54: 3
}
3: 19
}
2 {
2 {
1: 971618215795604
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3797/2889309425~120x256.image"
}
23: ""
54: 3
}
3: 20
}
3: 461
4: "15\344\270\207\344\272\272\346\260\224"
6: 158310
}
}
1 {
1: "WebcastGiftMessage"
2 {
1 {
1: "WebcastGiftMessage"
2: 6787717971278351115
3: 6787691314156276488
4: 1580388804414
6: 1
8 {
1: "webcast_xigua_gift_message"
2: "{0:user} \351\200\201\347\273\231\344\270\273\346\222\255{2:string}\344\270\252{1:gift}"
3 {
1: "#ffff9d5c"
4: 400
}
4 {
1: 11
2 {
1: "#ffffd600"
4: 400
}
21 {
1 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
2: 1
}
}
4 {
1: 12
2 {
1: "#ffff9d5c"
4: 400
}
22 {
1: 10001
2 {
1: "live_gift_10001"
2: "\350\245\277\347\223\234"
}
}
}
4 {
1: 1
2 {
1: "#ffff9d5c"
4: 400
}
11: "20"
}
}
}
2: 10001
3: 4997044
4: 1
5: 20
6: 20
7 {
1: 105855829073
3: "\345\260\217\350\234\234\346\237\240\346\252\254\350\214\266"
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
10 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
11 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3791/5070639578~120x256.image"
}
15: 1
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 2
2: 1
}
23 {
1: 62
6: 5
10: 51
11: 99
13: "\350\267\235\347\246\2736\347\272\247\350\277\230\345\267\25638\351\222\273\347\237\263"
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21: 38
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32: ""
34: 62
37: 1
38: "0"
44: ""
46: "MS4wLjABAAAAd4R7mC-c8FCTjCqTIhJ0CoydF_FMweyatdS66xud0hY"
48: ""
1028: "105855829073"
}
11: 1580388797
12: 7453184
}
}
2: "6787717971278351115_1580388804554_6787718002764073739_1"
3: 1000
4: 1580388804554
5: "fetch_time:1580388804554|start_time:1580388804048|ack_ids:6787718023417531148_1b2|fetch_id:6787718004823608078|flag:1|seq:141"

165
Demo/jingyan.txt Normal file
View File

@ -0,0 +1,165 @@
1 {
1: "WebcastMemberMessage"
2 {
1 {
1: "WebcastMemberMessage"
2: 6787727734057011981
3: 6787691314156276488
6: 1
8 {
1: "member_silence_toast_3"
2: "{0:user} \350\242\253\347\256\241\347\220\206\345\221\230 {1:user} \347\246\201\350\250\200\344\272\206"
3 {
1: "#de000000"
4: 400
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 53536270159
3: "\350\243\244\350\243\206\351\207\214\347\232\204\345\244\247\345\256\235\345\211\221"
38: "0"
46: "MS4wLjABAAAAtH9p-LupXO1oQVJtlefmpryPoXqWzKs3_Nad9BlAREA"
}
}
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 2721997823950523
3: "\350\257\267\345\217\253\346\210\221\347\226\257\345\255\220\345\205\255"
38: "0"
46: "MS4wLjABAAAA1KKMtPQlRg_wecgX0G2Wl-ZIcWe-Yos95-IBwF1AzhSYzL5-zXCa4lciHj2HZho5"
}
}
}
}
}
2 {
1: 53536270159
3: "\350\243\244\350\243\206\351\207\214\347\232\204\345\244\247\345\256\235\345\211\221"
4: 1
9 {
1: "http://p3-xg.bytecdn.cn/thumb/1bf40000bd6dc5335b2d"
2: "1bf40000bd6dc5335b2d"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_9.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_7.png"
6: 7
8 {
1: "\346\260\270\346\201\222"
2: "#FFFFFF"
3: 7
}
}
22 {
1: 1
2: 17
}
23 {
6: 9
19 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_9.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
1: "\346\260\270\346\201\222"
2: 7
3: 1
4 {
1 {
1: 2
2 {
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_7.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_7.png"
3: 48
4: 150
}
}
2: "\346\260\270\346\201\222"
}
}
}
32 {
1: 1
}
38: "0"
46: "MS4wLjABAAAAtH9p-LupXO1oQVJtlefmpryPoXqWzKs3_Nad9BlAREA"
50 {
1 {
3: 1008
4: 1125
}
3 {
3: 105
4: 111
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2Fnoble%2Fnoble_privilege_intro%2Findex.html%3Fforbid_right_back%3D1&type=fullscreen&hide_nav_bar=1&status_bar_color=white&status_bar_bg_color=%2300000000&noble_intercept=1&__live_platform__=webcast"
}
4: "\346\231\256\351\200\232\347\224\250\346\210\267"
6 {
3: 366
4: 615
}
7 {
3: 60
4: 108
}
8 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
2: "webcast/noble_boarder.png"
3: 64
4: 64
}
}
54: 3
}
3: 555
4 {
1: 2721997823950523
3: "\350\257\267\345\217\253\346\210\221\347\226\257\345\255\220\345\205\255"
38: "0"
46: "MS4wLjABAAAA1KKMtPQlRg_wecgX0G2Wl-ZIcWe-Yos95-IBwF1AzhSYzL5-zXCa4lciHj2HZho5"
}
10: 9
14: "16\344\270\207\344\272\272\346\260\224"
}
}
2: "6787727734057011981_1580391018357_6787727537927867150_1"
3: 1000
4: 1580391018357
5: "fetch_time:1580391018357|start_time:1580391017508|ack_ids:6787727734057011981_1296|fetch_id:6787727723432626957|flag:1|seq:126"

1104
Demo/result.txt Executable file

File diff suppressed because it is too large Load Diff

4406
Demo/result2.txt Executable file

File diff suppressed because it is too large Load Diff

1434
Demo/result3.txt Executable file

File diff suppressed because it is too large Load Diff

2576
Demo/result4.json Normal file

File diff suppressed because it is too large Load Diff

6007
Demo/result4.txt Normal file

File diff suppressed because it is too large Load Diff

605
Demo/result5.txt Normal file
View File

@ -0,0 +1,605 @@
1 {
1: "WebcastChatMessage"
2 {
1 {
1: "WebcastChatMessage"
2: 6776883976293452551
3: 6776859660747344653
4: 1577866267927
6: 1
8 {
1: "webcast_chat_display_text"
2: "{0:user}{1:string}"
3 {
1: "#ff36c0cf"
4: 400
}
4 {
1: 11
2 {
1: "#60000000"
4: 400
}
21 {
1 {
1: 51510235218
3: "\351\222\242\346\236\252\345\205\204\345\274\237\350\266\205\345\223\245"
4: 1
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/2e8b032f45854441bd5e539ea892e00f~120x256.image"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
2: "webcast/xigua_admin_badge_v2.png"
3: 16
4: 28
6: 3
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_16.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
21 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_15.png"
6: 7
8 {
1: "\351\222\242\346\236\252\346\211\213"
2: "#FFFFFF"
3: 15
}
}
22 {
1: 45
2: 17
}
23 {
6: 16
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_16.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
}
24 {
1 {
1: "\351\222\242\346\236\252\346\211\213"
2: 15
3: 1
4 {
1 {
1: 2
2 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_15.png"
3: 48
4: 150
}
}
2: "\351\222\242\346\236\252\346\211\213"
}
}
}
32 {
2: 1
}
38: "0"
46: "MS4wLjABAAAALx1qtwLJiLVbuWXt7ZYTxHxVFvZz2PITy5YfQidfGp4"
50 {
1 {
3: 1008
4: 1125
}
3 {
3: 105
4: 111
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2Fnoble%2Fnoble_privilege_intro%2Findex.html%3Fforbid_right_back%3D1&status_bar_bg_color=%2300000000&noble_intercept=1&__live_platform__=webcast&type=fullscreen&hide_nav_bar=1&status_bar_color=white"
}
4: "\346\231\256\351\200\232\347\224\250\346\210\267"
6 {
3: 366
4: 615
}
7 {
3: 60
4: 108
}
8 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
2: "webcast/noble_boarder.png"
3: 64
4: 64
}
}
}
2: 1
}
}
4 {
1: 1
11: "\350\277\231\346\263\242\346\223\215\344\275\234\343\200\202\346\254\272\350\264\237\344\272\272\345\221\200"
}
}
}
2 {
1: 51510235218
3: "\351\222\242\346\236\252\345\205\204\345\274\237\350\266\205\345\223\245"
4: 1
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/2e8b032f45854441bd5e539ea892e00f~120x256.image"
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_admin_badge_v2.png~tplv-obj.image"
2: "webcast/xigua_admin_badge_v2.png"
3: 16
4: 28
6: 3
}
21 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_16.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
21 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_15.png"
6: 7
8 {
1: "\351\222\242\346\236\252\346\211\213"
2: "#FFFFFF"
3: 15
}
}
22 {
1: 45
2: 17
}
23 {
6: 16
19 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_16.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_16.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
}
24 {
1 {
1: "\351\222\242\346\236\252\346\211\213"
2: 15
3: 1
4 {
1 {
1: 2
2 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_15.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_15.png"
3: 48
4: 150
}
}
2: "\351\222\242\346\236\252\346\211\213"
}
}
}
32 {
2: 1
}
38: "0"
46: "MS4wLjABAAAALx1qtwLJiLVbuWXt7ZYTxHxVFvZz2PITy5YfQidfGp4"
50 {
1 {
3: 1008
4: 1125
}
3 {
3: 105
4: 111
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2Fnoble%2Fnoble_privilege_intro%2Findex.html%3Fforbid_right_back%3D1&status_bar_bg_color=%2300000000&noble_intercept=1&__live_platform__=webcast&type=fullscreen&hide_nav_bar=1&status_bar_color=white"
}
4: "\346\231\256\351\200\232\347\224\250\346\210\267"
6 {
3: 366
4: 615
}
7 {
3: 60
4: 108
}
8 {
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
2: "webcast/noble_boarder.png"
3: 64
4: 64
}
}
}
3: "\350\277\231\346\263\242\346\223\215\344\275\234\343\200\202\346\254\272\350\264\237\344\272\272\345\221\200"
}
}
1 {
1: "WebcastChatMessage"
2 {
1 {
1: "WebcastChatMessage"
2: 6776883987831969295
3: 6776859660747344653
4: 1577866267933
6: 1
}
2 {
1: 100902326983
3: "\346\211\254\345\256\266\345\206\233\347\201\254\344\272\232\351\243\236"
4: 1
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/aade000f6df1961243c5~120x256.image"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_9.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_4.png"
6: 7
8 {
1: "\351\222\242\346\236\252\346\211\213"
2: "#FFFFFF"
3: 4
}
}
22 {
1: 45
2: 7
}
23 {
6: 9
19 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_9.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_9.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
1: "\351\222\242\346\236\252\346\211\213"
2: 4
3: 1
4 {
1 {
1: 2
2 {
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_4.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_4.png"
3: 48
4: 150
}
}
2: "\351\222\242\346\236\252\346\211\213"
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAArfQQ4YVnKMKthzbKgv2swkggu8Ovv8eQCp56JmvvRvE"
50 {
1 {
3: 1008
4: 1125
}
3 {
3: 105
4: 111
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2Fnoble%2Fnoble_privilege_intro%2Findex.html%3Fforbid_right_back%3D1&type=fullscreen&hide_nav_bar=1&status_bar_color=white&status_bar_bg_color=%2300000000&noble_intercept=1&__live_platform__=webcast"
}
4: "\346\231\256\351\200\232\347\224\250\346\210\267"
6 {
3: 366
4: 615
}
7 {
3: 60
4: 108
}
8 {
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
2: "webcast/noble_boarder.png"
3: 64
4: 64
}
}
}
3: "\351\230\277\344\274\237\345\220\271\347\211\233\346\257\224"
}
}
1 {
1: "WebcastRoomUserSeqMessage"
2 {
1 {
1: "WebcastRoomUserSeqMessage"
2: 6776884008732789507
3: 6776859660747344653
4: 1577866268029
}
2 {
1: 1975
2 {
1: 479033461313651
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/49b2bd0b157e4787917b029da02d2622~120x256.image"
}
23: ""
}
3: 1
}
2 {
1: 999
2 {
1: 3962278245043603
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/241f1001013a2e8505175~120x256.image"
}
23: ""
}
3: 2
}
2 {
1: 571
2 {
1: 53231054839
9 {
1: "http://wx.qlogo.cn/mmopen/XFJ8HdGGwGDwy1reeaMqlfQrUh81uSv81HqUsESBK8YsNQ2oEIct3ibwdq1k55HLC7m43nfFiaX3EYpw2lKH4wibw/64"
}
23: ""
}
3: 3
}
2 {
1: 520
2 {
1: 88336033429
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/647c6fcddfa84d328d9c51f0294599d0~120x256.image"
}
23: ""
}
3: 4
}
2 {
1: 520
2 {
1: 58722717092
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/8a4dc6f002b545bca632615290f4527d~120x256.image"
}
23: ""
}
3: 5
}
2 {
1: 297
2 {
1: 52379408873
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/24990023eae5e3325fcc~120x256.image"
}
23: ""
}
3: 6
}
2 {
1: 140
2 {
1: 57254508132
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/216c00283d70176a9e97~120x256.image"
}
23: ""
}
3: 7
}
2 {
1: 128
2 {
1: 3056263838569380
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/fe8f000122d925f9a0fb~120x256.image"
}
23: ""
}
3: 8
}
2 {
1: 99
2 {
1: 23239313505
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/5d4700073713949f592e~120x256.image"
}
23: ""
}
3: 9
}
2 {
1: 35
2 {
1: 3239311302
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/737/6093229802~120x256.image"
}
23: ""
}
3: 10
}
2 {
1: 30
2 {
1: 822069738617544
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/2b5f6e3d331443b3bf51875567fa2b5d~120x256.image"
}
23: ""
}
3: 11
}
2 {
1: 22
2 {
1: 83166975758782
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/0baffeeb3d2d4fa8898b275968f18564~120x256.image"
}
23: ""
}
3: 12
}
2 {
1: 14
2 {
1: 104729678256
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/db140012b3f29800ab6d~120x256.image"
}
23: ""
}
3: 13
}
2 {
1: 11
2 {
1: 5538311676
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/dad300141ece34b4e3c7~120x256.image"
}
23: ""
}
3: 14
}
2 {
1: 8
2 {
1: 109675723458
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/9cf549b429f740f6a90c41e4b5b632b9~120x256.image"
}
23: ""
}
3: 15
}
2 {
1: 6
2 {
1: 81425804261
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/9fd60005b91e43cc85e2~120x256.image"
}
23: ""
}
3: 16
}
2 {
1: 5
2 {
1: 2115111742610984
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/b20c086a5b644a6f919dfdd3dad442e6~120x256.image"
}
23: ""
}
3: 17
}
2 {
1: 3
2 {
1: 100743319316
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/6d8e7bba2195468fb24a4e3ea7992b92~120x256.image"
}
23: ""
}
3: 18
}
2 {
1: 2
2 {
1: 51035982268
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/d041e17415bc42c9a9815a8aaa2c3d8b~120x256.image"
}
23: ""
}
3: 19
}
2 {
1: 1
2 {
1: 1772009086784855
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/9fe0aa53dc254c0081a0fc2ce65f1559~120x256.image"
}
23: ""
}
3: 20
}
3: 826
4: "13\344\270\207\344\272\272\346\260\224"
6: 136763
}
}
2: "6776884008732789507_1577866268700_1_1"
3: 1000
4: 1577866268700
5: "fetch_time:1577866268700|start_time:1577866263586|fetch_id:6776884010443557636|flag:0|seq:22"

234
Demo/resulta.txt Normal file
View File

@ -0,0 +1,234 @@
1 {
1: "WebcastRoomUserSeqMessage"
2 {
1 {
1: "WebcastRoomUserSeqMessage"
2: 6776963484661500684
3: 6776943780420389640
4: 1577884770601
}
2 {
1: 132
2 {
1: 3962279791967276
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/278ac6165ba34b7aa371e1df5ea337b3~120x256.image"
}
23: ""
}
3: 1
}
2 {
1: 66
2 {
1: 2933125236921479
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/2e1c9d64f34a4a3e8a326fe5394659fd~120x256.image"
}
23: ""
}
3: 2
}
2 {
1: 45
2 {
1: 50230797308
9 {
1: "http://p9-xg.bytecdn.cn/thumb/dac400045e7008dbd42d"
2: "dac400045e7008dbd42d"
}
23: ""
}
3: 3
}
2 {
1: 5
2 {
1: 9746464842
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/6ad34237256e4471b16810eb098224c0~120x256.image"
}
23: ""
}
3: 4
}
2 {
1: 5
2 {
1: 111552853752
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3792/5112637127~120x256.image"
}
23: ""
}
3: 5
}
2 {
1: 3
2 {
1: 16665341581
9 {
1: "http://p3-xg.bytecdn.cn/thumb/da80000309bef5b49fa0"
2: "da80000309bef5b49fa0"
}
23: ""
}
3: 6
}
2 {
2 {
1: 97942455882
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3792/5112637127~120x256.image"
}
23: ""
}
3: 7
}
2 {
2 {
1: 97363408846
9 {
1: "http://p3-xg.bytecdn.cn/thumb/dab00018fc4fda3b5a21"
2: "dab00018fc4fda3b5a21"
}
23: ""
}
3: 8
}
2 {
2 {
1: 96959753387
9 {
1: "http://p9-xg.bytecdn.cn/thumb/173b600285dcf9f649150"
2: "173b600285dcf9f649150"
}
23: ""
}
3: 9
}
2 {
2 {
1: 96119123780
9 {
1: "http://p9-xg.bytecdn.cn/thumb/241ef00000e3f17f517d7"
2: "241ef00000e3f17f517d7"
}
23: ""
}
3: 10
}
2 {
2 {
1: 9609510451
9 {
1: "http://p3-xg.bytecdn.cn/thumb/da51000807963daceae0"
2: "da51000807963daceae0"
}
23: ""
}
3: 11
}
2 {
2 {
1: 95931639233
9 {
1: "http://p9-xg.bytecdn.cn/thumb/71a30006cf20be61eb9b"
2: "71a30006cf20be61eb9b"
}
23: ""
}
3: 12
}
2 {
2 {
1: 94602295110
9 {
1: "http://p1-xg.bytecdn.cn/thumb/173b70008753becec983c"
2: "173b70008753becec983c"
}
23: ""
}
3: 13
}
2 {
2 {
1: 94432960458
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/3795/3047680722~120x256.image"
}
23: ""
}
3: 14
}
2 {
2 {
1: 94385438443
9 {
1: "http://p3-xg.bytecdn.cn/thumb/6593000eb2048e45ee0b"
2: "6593000eb2048e45ee0b"
}
23: ""
}
3: 15
}
2 {
2 {
1: 94193267099
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/da57000b43a72cedd2fc~120x256.image"
}
23: ""
}
3: 16
}
2 {
2 {
1: 93948536567
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/fe7300005f28e10f3c52~120x256.image"
}
23: ""
}
3: 17
}
2 {
2 {
1: 93175525403
9 {
1: "http://p9-xg.bytecdn.cn/thumb/da83000d9328094b90d6"
2: "da83000d9328094b90d6"
}
23: ""
}
3: 18
}
2 {
2 {
1: 93064266997
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/6588002a7fcd121c60f6~120x256.image"
}
23: ""
}
3: 19
}
2 {
2 {
1: 92866340217
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3795/3044413937~120x256.image"
}
23: ""
}
3: 20
}
3: 365
4: "5.6\344\270\207\344\272\272\346\260\224"
6: 56661
}
}
2: "6776963484661500684_1577884771191_6776957423184169736_1"
3: 1000
4: 1577884771191
5: "fetch_time:1577884771191|start_time:1577884288940|fetch_id:6776963481247042317|flag:0|seq:1283"

4732
Demo/resultb.txt Normal file

File diff suppressed because it is too large Load Diff

4489
Demo/resultc.txt Normal file

File diff suppressed because it is too large Load Diff

862
Demo/resultfst.txt Normal file
View File

@ -0,0 +1,862 @@
1 {
1: "WebcastMemberMessage"
2 {
1 {
1: "WebcastMemberMessage"
2: 6776965782439283463
3: 6776895930592398094
6: 1
8 {
1: "live_room_enter_toast"
2: "{0:user} \346\235\245\344\272\206{1:string}"
3 {
1: "#de000000"
4: 400
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 1587335753631549
3: "\345\260\217\345\244\251\346\211\215\350\264\235\345\243\263"
9 {
1: "http://p3.pstatp.com/thumb/3793/3131589739"
2: "3793/3131589739"
}
22 {
1: 33
2: 2
}
23 {
19: ""
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAh0jOEAHZj6-a55dwsKu6i0ilHwHcWPx8mLImJ5iDJzfgkYhU0mFv-oLZ6yx6wNi0"
}
}
}
}
}
2 {
1: 1587335753631549
3: "\345\260\217\345\244\251\346\211\215\350\264\235\345\243\263"
9 {
1: "http://p3.pstatp.com/thumb/3793/3131589739"
2: "3793/3131589739"
}
22 {
1: 33
2: 2
}
23 {
19: ""
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAh0jOEAHZj6-a55dwsKu6i0ilHwHcWPx8mLImJ5iDJzfgkYhU0mFv-oLZ6yx6wNi0"
}
3: 15103
10: 1
14: "132\344\270\207\344\272\272\346\260\224"
}
}
1 {
1: "WebcastMemberMessage"
2 {
1 {
1: "WebcastMemberMessage"
2: 6776965783190555404
3: 6776895930592398094
6: 1
8 {
1: "live_room_enter_toast"
2: "{0:user} \346\235\245\344\272\206{1:string}"
3 {
1: "#de000000"
4: 400
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 50909397248
3: "\347\214\223\347\214\223\347\214\223\345\255\220"
4: 1
9 {
1: "http://p1.pstatp.com/thumb/96b002412f02c3d2735"
2: "96b002412f02c3d2735"
}
21 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
22 {
1: 24
2: 1
}
23 {
6: 5
19 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAwlVH0meNefJYE9l5cBWj5vZX8ooB9bII44Cf2CRXp9s"
}
}
}
}
}
2 {
1: 50909397248
3: "\347\214\223\347\214\223\347\214\223\345\255\220"
4: 1
9 {
1: "http://p1.pstatp.com/thumb/96b002412f02c3d2735"
2: "96b002412f02c3d2735"
}
21 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
22 {
1: 24
2: 1
}
23 {
6: 5
19 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_5.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_5.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAwlVH0meNefJYE9l5cBWj5vZX8ooB9bII44Cf2CRXp9s"
}
3: 15103
10: 1
14: "132\344\270\207\344\272\272\346\260\224"
}
}
1 {
1: "WebcastRoomUserSeqMessage"
2 {
1 {
1: "WebcastRoomUserSeqMessage"
2: 6776965783814933256
3: 6776895930592398094
4: 1577885306057
}
2 {
1: 2997
2 {
1: 92747501043
2: 517409
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/feaa00016eaa01bf172e~120x256.image"
}
23: ""
}
3: 1
}
2 {
1: 2198
2 {
1: 1182693581391939
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/dae10014972e8d70953e~120x256.image"
}
23: ""
}
3: 2
}
2 {
1: 1998
2 {
1: 5981054057
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/75660014ae3215bae055~120x256.image"
}
23: ""
}
3: 3
}
2 {
1: 1099
2 {
1: 3836408254
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/6620/5484795979~120x256.image"
}
23: ""
}
3: 4
}
2 {
1: 999
2 {
1: 830872766922279
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/5a67caf5ae404432aa0524c33001241c~120x256.image"
}
23: ""
}
3: 5
}
2 {
1: 999
2 {
1: 7185332641
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/754e3527d08540089a3adf6495845240~120x256.image"
}
23: ""
}
3: 6
}
2 {
1: 520
2 {
1: 93127918477
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/3795/3044413937~120x256.image"
}
23: ""
}
3: 7
}
2 {
1: 520
2 {
1: 50073154686
9 {
1: "http://p1-xg.bytecdn.cn/thumb/da790015e9c75441ff34"
2: "da790015e9c75441ff34"
}
23: ""
}
3: 8
}
2 {
1: 520
2 {
1: 104620584571
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/daa30018abcde9559b55~120x256.image"
}
23: ""
}
3: 9
}
2 {
1: 120
2 {
1: 5994520551
9 {
1: "http://p1-xg.bytecdn.cn/thumb/aae5000ffc17e4f1f5da"
2: "aae5000ffc17e4f1f5da"
}
23: ""
}
3: 10
}
2 {
1: 100
2 {
1: 54883854814
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/da68001693847d505008~120x256.image"
}
23: ""
}
3: 11
}
2 {
1: 99
2 {
1: 82020236564
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/5042000ff6673790f6d2~120x256.image"
}
23: ""
}
3: 12
}
2 {
1: 66
2 {
1: 3688188102
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/e590005f1b8bdbd812c~120x256.image"
}
23: ""
}
3: 13
}
2 {
1: 38
2 {
1: 75972230499
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/173b400272ba1269fb7d8~120x256.image"
}
23: ""
}
3: 14
}
2 {
1: 20
2 {
1: 654947037492940
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/2e549000299b4f464f99f~120x256.image"
}
23: ""
}
3: 15
}
2 {
1: 17
2 {
1: 6896749077
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/5046000873dbc5a8f31f~120x256.image"
}
23: ""
}
3: 16
}
2 {
1: 14
2 {
1: 50569473736
9 {
1: "http://p3-xg.bytecdn.cn/thumb/5d4b0002a7134afffa47"
2: "5d4b0002a7134afffa47"
}
23: ""
}
3: 17
}
2 {
1: 14
2 {
1: 2581241782866604
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/51c85ec9c5754938b89504217ae5bbbc~120x256.image"
}
23: ""
}
3: 18
}
2 {
1: 13
2 {
1: 50651928991
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/f81fee15e94a4405acc921916bfaff09~120x256.image"
}
23: ""
}
3: 19
}
2 {
1: 11
2 {
1: 106001804992
9 {
1: "http://sf6-ttcdn-tos.pstatp.com/img/mosaic-legacy/fe5f000080632ba520f5~120x256.image"
}
23: ""
}
3: 20
}
3: 15094
4: "132\344\270\207\344\272\272\346\260\224"
6: 1329944
}
}
1 {
1: "WebcastChatMessage"
2 {
1 {
1: "WebcastChatMessage"
2: 6776965784796482315
3: 6776895930592398094
4: 1577885306078
6: 1
}
2 {
1: 52120728008
3: "\346\234\250\345\255\2202910"
4: 1
9 {
1: "http://p1.pstatp.com/thumb/ef6000df19086df2853"
2: "ef6000df19086df2853"
}
21 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_3.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
22 {
1: 65
2: 16
}
23 {
6: 3
19 {
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
1: "http://p6-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/xigua_paygrade_level_3.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_3.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&__live_platform__=webcast&type=popup&gravity=bottom&height=400&radius=8"
}
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAD4OSjJ5hRbYDzZI0GJT_usTlLPEBYFrtPEYzBwLiIzQ"
50 {
1 {
3: 1008
4: 1125
}
3 {
3: 105
4: 111
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2Fnoble%2Fnoble_privilege_intro%2Findex.html%3Fforbid_right_back%3D1&type=fullscreen&hide_nav_bar=1&status_bar_color=white&status_bar_bg_color=%2300000000&noble_intercept=1&__live_platform__=webcast"
}
4: "\346\231\256\351\200\232\347\224\250\346\210\267"
6 {
3: 366
4: 615
}
7 {
3: 60
4: 108
}
8 {
1: "http://p1-webcast-ttcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p3-webcast-ttcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
1: "http://p9-webcast-ttcdn.byteimg.com/img/webcast/noble_boarder.png~tplv-obj.image"
2: "webcast/noble_boarder.png"
3: 64
4: 64
}
}
}
3: "\350\277\231\346\230\257\345\267\247\345\205\213\345\212\233\345\270\275\345\255\220\357\274\237"
}
}
1 {
1: "WebcastMemberMessage"
2 {
1 {
1: "WebcastMemberMessage"
2: 6776965784520887054
3: 6776895930592398094
6: 1
8 {
1: "live_room_enter_toast"
2: "{0:user} \346\235\245\344\272\206{1:string}"
3 {
1: "#de000000"
4: 400
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 71581494772
3: "\345\217\253\346\210\221\350\221\211\345\220\214\345\255\246"
4: 1
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3792/5112637127~120x256.image"
}
22 {
1: 6
}
23 {
19: ""
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAfgxQATVlN1REs0ezLccSYBNp34sVcfh3EZHMu5Fi8uE"
}
}
}
}
}
2 {
1: 71581494772
3: "\345\217\253\346\210\221\350\221\211\345\220\214\345\255\246"
4: 1
9 {
1: "http://sf3-ttcdn-tos.pstatp.com/img/mosaic-legacy/3792/5112637127~120x256.image"
}
22 {
1: 6
}
23 {
19: ""
}
24 {
1 {
4 {
1 {
1: 0
2: ""
}
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAfgxQATVlN1REs0ezLccSYBNp34sVcfh3EZHMu5Fi8uE"
}
3: 15103
10: 1
14: "132\344\270\207\344\272\272\346\260\224"
}
}
1 {
1: "WebcastMemberMessage"
2 {
1 {
1: "WebcastMemberMessage"
2: 6776965785094048520
3: 6776895930592398094
6: 1
8 {
1: "live_room_enter_toast"
2: "{0:user} \346\235\245\344\272\206{1:string}"
3 {
1: "#de000000"
4: 400
}
4 {
1: 11
2 {
1: "#61000000"
4: 400
}
21 {
1 {
1: 6205145196
3: "\346\210\221\344\270\215\346\230\257\350\200\201\351\211\204"
4: 1
9 {
1: "http://p1-xg.bytecdn.cn/thumb/249a001395445a62671d"
2: "249a001395445a62671d"
}
21 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_8.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\345\270\203\344\270\200\347\217\255"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 15
2: 54
}
23 {
6: 8
19 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_8.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
1: "\345\270\203\344\270\200\347\217\255"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\345\270\203\344\270\200\347\217\255"
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAGMn5pO7qE_ZZu6ETuJmfSW8KLhLOtRkLnr3IiLE2e6A"
}
}
}
}
}
2 {
1: 6205145196
3: "\346\210\221\344\270\215\346\230\257\350\200\201\351\211\204"
4: 1
9 {
1: "http://p1-xg.bytecdn.cn/thumb/249a001395445a62671d"
2: "249a001395445a62671d"
}
21 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_8.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
21 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
6: 7
8 {
1: "\345\270\203\344\270\200\347\217\255"
2: "#FFFFFF"
3: 14
}
}
22 {
1: 15
2: 54
}
23 {
6: 8
19 {
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
1: "http://p3-webcast-xgcdn.byteimg.com/img/webcast/xigua_paygrade_level_8.png~tplv-obj.png"
2: "webcast/xigua_paygrade_level_8.png"
3: 16
4: 30
6: 1
7: "sslocal://webcast_webview?url=https%3A%2F%2Fwebcast.ixigua.com%2Ffalcon%2Fwebcast_xigua%2Fpage%2FhonorLevel%2Findex.html&type=popup&gravity=bottom&height=400&radius=8&__live_platform__=webcast"
}
}
24 {
1 {
1: "\345\270\203\344\270\200\347\217\255"
2: 14
3: 1
4 {
1 {
1: 2
2 {
1: "http://p9-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p1-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
1: "http://p6-webcast-xgcdn.byteimg.com/img/webcast/xigua_fansclub_medal_14.png~tplv-obj.image"
2: "webcast/xigua_fansclub_medal_14.png"
3: 48
4: 150
}
}
2: "\345\270\203\344\270\200\347\217\255"
}
}
}
32: ""
38: "0"
46: "MS4wLjABAAAAGMn5pO7qE_ZZu6ETuJmfSW8KLhLOtRkLnr3IiLE2e6A"
}
3: 15103
10: 1
14: "132\344\270\207\344\272\272\346\260\224"
}
}
1 {
1: "WebcastFansclubStatisticsMessage"
2 {
1 {
1: "WebcastFansclubStatisticsMessage"
2: 6776950071441869579
3: 6776895930592398094
4: 1577885306430
6: 1
}
2: "\345\270\203\344\270\200\347\217\255"
3: 19325
}
}
1 {
1: "WebcastFansclubMessage"
2 {
1 {
1: "WebcastFansclubMessage"
2: 6776950071441885963
3: 6776895930592398094
4: 1577885306441
6: 1
}
2: 2
3: "\346\201\255\345\226\234 \347\210\261\345\220\203\351\261\274\347\232\204\347\213\256\345\255\220\351\270\255 \346\210\220\344\270\272\347\254\25419325\345\220\215\347\262\211\344\270\235\345\233\242\346\210\220\345\221\230"
4 {
1: 109556646111
3: "\347\210\261\345\220\203\351\261\274\347\232\204\347\213\256\345\255\220\351\270\255"
9 {
1: "http://sf1-ttcdn-tos.pstatp.com/img/tos-cn-i-0022/66d462f176c841a0a4939ad355fe8c00~120x256.image"
}
24 {
1 {
1: "\345\270\203\344\270\200\347\217\255"
2: 1
3: 1
4 {
1 {
1: 2
2 {
1: "https://p1.pstatp.com/obj/webcast/xigua_fansclub_1.png"
2: "webcast/xigua_fansclub_1.png"
3: 48
4: 150
}
}
2: "\345\270\203\344\270\200\347\217\255"
}
}
}
}
}
}
2: "6776950071441885963_1577885306619_6776965731513060100_1"
3: 1000
4: 1577885306619
5: "fetch_time:1577885306619|start_time:1577885302380|fetch_id:6776965761064883715|flag:0|seq:387"

18
README.md Normal file
View File

@ -0,0 +1,18 @@
# XiguaLiveDanmakuHelper
### 因西瓜直播弹幕接口换成了ProtoBuf已经尝试解析出了部分proto
[v7旧版本](https://github.com/q792602257/XiguaLiveDanmakuHelper/tree/v7)仍可用就是带动画的礼物不显示而已)
### 西瓜直播弹幕助手--控制台版
界面版:[q792602257/XiguaDanmakuHelperGUI](https://github.com/q792602257/XiguaDanmakuHelperGUI "C# ver")
### 西瓜直播弹幕接口```api.py```
> - 基于安卓8.1.6
### 西瓜直播弹幕助手--礼物端```WinMain.py```
### <s>计划更新</s>
### 并没有呢,这段时间太忙了

40
Struct/Chat.py Normal file
View File

@ -0,0 +1,40 @@
from .User import User
from .Lottery import Lottery
from XiguaMessage_pb2 import ChatMessage
class Chat:
content = ""
user = None
filterString = ["", ]
isFiltered = False
def __init__(self, json=None, lottery: Lottery = None):
if lottery:
self.filterString.append(lottery.content)
if json:
if type(json) == bytes:
self.parsePb(json)
else:
self.parse(json)
def parsePb(self, raw):
_message = ChatMessage()
_message.ParseFromString(raw)
self.user = User(_message.user)
self.content = _message.content
if self.content in self.filterString:
self.isFiltered = True
def parse(self, json):
self.user = User(json)
if "extra" in json:
if "content" in json["extra"]:
self.content = json["extra"]['content']
if self.content in self.filterString:
self.isFiltered = True
def __str__(self):
return "{} : {}".format(self.user, self.content)
def __unicode__(self):
return self.__str__()

0
Struct/Digg.py Normal file
View File

93
Struct/Gift.py Normal file
View File

@ -0,0 +1,93 @@
import requests
from .User import User
from XiguaMessage_pb2 import GiftMessage
class Gift:
roomID = 0
giftList = {}
def __init__(self, json=None):
self.ID = 0
self.count = 0
self.amount = 0
self.user = None
self.isFinished = False
self.backupName = None
if json:
if type(json) == bytes:
self.parsePb(json)
else:
self.parse(json)
def parsePb(self, raw):
_message = GiftMessage()
_message.ParseFromString(raw)
self.user = User(_message.user)
self.ID = _message.giftId
self.count = _message.repeated
self.isFinished = _message.isFinished
self.backupName = _message.commonInfo.displayText.params.gifts.gift.name
def parse(self, json):
self.user = User(json)
if "common" in json and json["common"] is not None:
if Gift.roomID != int(json["common"]["room_id"]):
Gift.roomID = int(json["common"]["room_id"])
self.update()
if "extra" in json and json["extra"] is not None:
if "present_info" in json["extra"] and json["extra"]['present_info'] is not None:
self.ID = int(json["extra"]['present_info']['id'])
self.count = json["extra"]['present_info']['repeat_count']
elif "present_end_info" in json["extra"] and json["extra"]['present_end_info'] is not None:
self.ID = int(json["extra"]['present_end_info']['id'])
self.count = json["extra"]['present_end_info']['count']
if self.ID != 0 and self.ID in self.giftList:
self.amount = self.giftList[self.ID]['diamond_count'] * self.count
else:
self.update()
@classmethod
def update(cls):
p = requests.get("https://i.snssdk.com/videolive/gift/get_gift_list?room_id={roomID}"
"&version_code=800&device_platform=android".format(roomID=Gift.roomID))
d = p.json()
if "gift_info" not in d:
print("错误:礼物更新失败")
else:
for i in d["gift_info"]:
cls.addGift(i)
def isAnimate(self):
if self.ID != 0 and self.ID in self.giftList:
if 'combo' in self.giftList[self.ID]:
return self.giftList[self.ID]["combo"] == False
elif 'meta' in self.giftList[self.ID] and 'combo' in self.giftList[self.ID]['meta']:
return self.giftList[self.ID]['meta']["combo"] == False
elif 'type' in self.giftList[self.ID]:
return self.giftList[self.ID]["type"] == 2
return False
def _getGiftName(self):
if self.ID in self.giftList:
return self.giftList[self.ID]["name"]
elif self.backupName is not None:
return self.backupName
else:
return "未知礼物[{}]".format(self.ID)
def __str__(self):
return "{user} 送出的 {count}{name}".format(user=self.user, count=self.count, name=self._getGiftName())
def __unicode__(self):
return self.__str__()
def __repr__(self):
return "西瓜礼物【{}(ID:{})】".format(self._getGiftName(), self.ID)
@classmethod
def addGift(cls, _gift):
if 'id' not in _gift:
return
_id = int(_gift["id"])
cls.giftList[_id] = _gift

71
Struct/Lottery.py Normal file
View File

@ -0,0 +1,71 @@
# coding=utf-8
import requests
import time
from .LuckyUser import LuckyUser
class Lottery:
ID = 0
isActive = False
content = ""
isFinished = False
luckyUsers = []
joinedUserCount = 0
prizeName = ""
finish = 0
def __init__(self, json=None):
if json:
self.parse(json)
def parse(self, json):
if "lottery_info" in json and json["lottery_info"] is not None:
self.isActive = int(json["lottery_info"]["status"]) > 0
self.ID = json["lottery_info"]["lottery_id"]
for i in json["lottery_info"]['conditions']:
if i['type'] != 3:
continue
self.content = i["content"]
self.joinedUserCount = int(json["lottery_info"]["candidate_num"])
self.prizeName = json["lottery_info"]["prize_info"]["name"]
_delta = int(json["lottery_info"]["draw_time"]) - int(json["lottery_info"]["current_time"])
self.finish = time.time()+_delta+1
elif "extra" in json and json["extra"] is not None:
if "lottery_info" in json["extra"] and json["extra"]["lottery_info"] is not None:
return self.parse(json["extra"])
def update(self):
if self.isActive:
if not self.isFinished and self.finish > time.time():
self.checkFinished()
return True
return False
def checkFinished(self):
p = requests.get("https://i.snssdk.com/videolive/lottery/check_user_right?lottery_id={}"
"&version_code=730&device_platform=android".format(
self.ID
))
d = p.json()
if d["base_resp"]["status_code"] != 0:
self.isActive = False
self.isFinished = False
return
self.isActive = int(d["lottery_info"]["status"]) > 0
self.isFinished = int(d["lottery_info"]["status"]) == 2
self.joinedUserCount = int(d["lottery_info"]["candidate_num"])
if self.isFinished:
self.luckyUsers = [ LuckyUser(i) for i in d["lottery_info"]["lucky_users"] ]
def __str__(self):
if self.isFinished:
ret = "恭喜以下中奖用户:\n"
for i in self.luckyUsers:
ret += "> {} {}\n".format(i,self.prizeName)
ret += "> 参与人数:{}".format(self.joinedUserCount)
return ret
elif self.isActive:
return "正在抽奖中。。。\n" \
"> 参与人数:{}".format(self.joinedUserCount)
else:
return "抽奖已失效"

19
Struct/LuckyUser.py Normal file
View File

@ -0,0 +1,19 @@
from .User import User
class LuckyUser:
user = None
count = 0
def __init__(self, json=None):
if json:
self.parse(json)
def parse(self, json):
self.user = User()
self.user.ID = json['user_id']
self.user.name = json['user_name']
self.count = int(json["grant_count"])
def __str__(self):
return "用户 {} 获得了 {}".format(self.user,self.count)

36
Struct/MemberMsg.py Normal file
View File

@ -0,0 +1,36 @@
from .User import User
class MemberMsg:
type = 0
content = ""
user = None
def __init__(self, json=None):
if json:
self.parse(json)
def parse(self, json):
self.user = User(json)
if "extra" in json:
if "action" in json["extra"]:
self.type = json["extra"]['action']
elif "content" in json["extra"]:
self.content = json["extra"]['content']
def __str__(self):
if self.type == 3:
return "{} 被禁言了".format(self.user)
elif self.type == 4:
return "{} 被取消禁言了".format(self.user)
elif self.type == 5:
return "{} 被任命为房管".format(self.user)
elif self.type == 1:
return "{} 进入了房间".format(self.user)
else:
if self.content == "":
return "未知消息{} 关于用户 {}".format(self.type, self.user)
return self.content.format(self.user)
def __unicode__(self):
return self.__str__()

73
Struct/User.py Normal file
View File

@ -0,0 +1,73 @@
from XiguaUser_pb2 import User as UserPb
class User:
def __init__(self, json=None):
self.ID = 0
self.name = ""
self.brand = ""
self.level = 0
self.type = 0
self.block = False
self.mute = False
if json:
if type(json) == bytes:
self.parsePb(json)
elif type(json) == UserPb:
self.parseUserPb(json)
else:
self.parse(json)
def parseUserPb(self, _user):
self.ID = _user.id
self.name = _user.nickname
self.brand = _user.fansClub.fansClub.title
self.level = _user.fansClub.fansClub.level
def parsePb(self, raw):
_user = UserPb()
_user.ParseFromString(raw)
self.parseUserPb(_user)
def parse(self, json):
if "extra" in json:
if "user" in json["extra"] and json["extra"]["user"] is not None:
self.ID = json["extra"]['user']['user_id']
self.name = json["extra"]['user']['name']
if "im_discipulus_info" in json["extra"] and json["extra"]["im_discipulus_info"] is not None:
self.level = json["extra"]["im_discipulus_info"]["level"]
self.brand = json["extra"]["im_discipulus_info"]["discipulus_group_title"]
if "user_room_auth_status" in json["extra"] and json["extra"]["user_room_auth_status"] is not None:
self.type = json["extra"]["user_room_auth_status"]["user_type"]
self.block = json["extra"]["user_room_auth_status"]["is_block"]
self.mute = json["extra"]["user_room_auth_status"]["is_silence"]
elif "user_info" in json and json["user_info"] is not None:
self.ID = json['user_info']['user_id']
self.name = json['user_info']['name']
elif "anchor" in json and json["anchor"] is not None:
if "user_info" in json["anchor"] and json["anchor"]['user_info'] is not None:
self.ID = json["anchor"]['user_info']['user_id']
self.name = json["anchor"]['user_info']['name']
if self.type is None:
self.type = 0
if isinstance(self.level, str):
self.level = int(self.level)
def __str__(self):
if self.level == 0:
if self.type == 1:
return "[房管]{}".format(self.name)
elif self.type == 3:
return "[主播]{}".format(self.name)
else:
return "{}".format(self.name)
else:
if self.type != 0:
return "[{}{}]{}".format(self.brand, self.level, self.name)
return "<{}{}>{}".format(self.brand, self.level, self.name)
def __unicode__(self):
return self.__str__()
def __repr__(self):
return "西瓜用户【{}(ID:{})】".format(self.name, self.ID)

237
WinMain.py Normal file
View File

@ -0,0 +1,237 @@
import os
import sys
import time
import requests
from Struct.MemberMsg import MemberMsg
from Struct.User import User
from Struct.Gift import Gift
from Struct.Chat import Chat
from Struct.Lottery import Lottery
from api import XiGuaLiveApi as Api
import msvcrt
import ctypes
SHOW_ALL = False
def readInput(caption, default, timeout: int = 5):
start_time = time.time()
print('{}({})\r\n>'.format(caption, default), end="")
input = ''
while True:
if msvcrt.kbhit():
chr = msvcrt.getwche()
if ord(chr) == 13: # enter_key
break
elif ord(chr) == 27:
break
elif ord(chr) == 8:
if input != "":
input = input[:-1]
msvcrt.putch(b" ")
msvcrt.putch(b" ")
msvcrt.putch(b"\b")
msvcrt.putch(b"\b")
if len(input) == 0:
start_time = time.time()
elif 32 > ord(chr) or 255 > ord(chr) > 126: # space_char
continue
else:
input += chr
if len(input) == 0 and (time.time() - start_time) > timeout:
break
if len(input) > 0:
print()
return input
else:
print("使用默认值")
return default
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# 字体颜色定义 ,关键在于颜色编码由2位十六进制组成分别取0~f前一位指的是背景色后一位指的是字体色
# 由于该函数的限制应该是只有这16种可以前景色与背景色组合。也可以几种颜色通过或运算组合组合后还是在这16种颜色中
# Windows CMD命令行 字体颜色定义 text colors
FOREGROUND_BLACK = 0x00 # black.
FOREGROUND_DARKBLUE = 0x01 # dark blue.
FOREGROUND_DARKGREEN = 0x02 # dark green.
FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
FOREGROUND_DARKRED = 0x04 # dark red.
FOREGROUND_DARKPINK = 0x05 # dark pink.
FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
FOREGROUND_DARKWHITE = 0x07 # dark white.
FOREGROUND_DARKGRAY = 0x08 # dark gray.
FOREGROUND_BLUE = 0x09 # blue.
FOREGROUND_GREEN = 0x0a # green.
FOREGROUND_SKYBLUE = 0x0b # skyblue.
FOREGROUND_RED = 0x0c # red.
FOREGROUND_PINK = 0x0d # pink.
FOREGROUND_YELLOW = 0x0e # yellow.
FOREGROUND_WHITE = 0x0f # white.
# Windows CMD命令行 背景颜色定义 background colors
BACKGROUND_BLACK = 0x00 # dark blue.
BACKGROUND_DARKBLUE = 0x10 # dark blue.
BACKGROUND_DARKGREEN = 0x20 # dark green.
BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.
BACKGROUND_DARKRED = 0x40 # dark red.
BACKGROUND_DARKPINK = 0x50 # dark pink.
BACKGROUND_DARKYELLOW = 0x60 # dark yellow.
BACKGROUND_DARKWHITE = 0x70 # dark white.
BACKGROUND_DARKGRAY = 0x80 # dark gray.
BACKGROUND_BLUE = 0x90 # blue.
BACKGROUND_GREEN = 0xa0 # green.
BACKGROUND_SKYBLUE = 0xb0 # skyblue.
BACKGROUND_RED = 0xc0 # red.
BACKGROUND_PINK = 0xd0 # pink.
BACKGROUND_YELLOW = 0xe0 # yellow.
BACKGROUND_WHITE = 0xf0 # white.
def set_cmd_text_color(color, handle=std_out_handle):
Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
return Bool
def resetColor():
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_WHITE)
class WinMain(Api):
_tmp = 0
def getTitle(self):
self._tmp += 1
if self._tmp > 10:
self._tmp = 0
if self._tmp < 5:
return "{} 的直播间 --弹幕助手 by JerryYan".format(self.broadcaster)
else:
if self.roomPopularity == 0:
self._tmp = 0
return self.getTitle()
else:
return "人气:{} --弹幕助手 by JerryYan".format(self.roomPopularity)
def onMessage(self, msg: str):
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
print("消息 : ", msg, end="")
resetColor()
print()
def onJoin(self, user: User):
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK)
print("欢迎", user, "加入了粉丝团", end="")
resetColor()
print()
def onSubscribe(self, user: User):
if SHOW_ALL:
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
print("用户", user, "关注了主播", end="")
resetColor()
print()
def onEnter(self, msg:MemberMsg):
if SHOW_ALL:
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
print("提示 :", msg, end="")
resetColor()
print()
def onChat(self, chat: Chat):
if SHOW_ALL:
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_WHITE)
if not chat.isFiltered:
print(chat, end="")
resetColor()
print()
def onLottery(self, i:Lottery):
set_cmd_text_color(FOREGROUND_WHITE | BACKGROUND_DARKGRAY)
print(i, end="")
resetColor()
print()
def onPresent(self, gift: Gift):
if SHOW_ALL:
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
print("连击 :", gift)
resetColor()
def onPresentEnd(self, gift: Gift):
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK)
print("感谢", gift, end="")
resetColor()
print()
def onLike(self, user: User):
if SHOW_ALL:
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
print("用户", user, "点了喜欢", end="")
resetColor()
print()
def onLeave(self, json: any):
return
def warning(*args):
print(*args)
if __name__ == "__main__":
name = "永恒de草薙"
resetColor()
print("西瓜直播礼物助手 by JerryYan")
print("接口版本8.1.6")
if len(sys.argv) > 1:
name = sys.argv[1]
if len(sys.argv) > 2:
SHOW_ALL = sys.argv[2] == "a"
else:
name = readInput("请输入主播用户名,默认为", name, 3)
print("搜索【", name, "", end="\t", flush=True)
api = WinMain(name)
if not api.isValidUser:
input("用户不存在")
sys.exit()
print("OK")
print(api.broadcaster.__repr__())
print("更新房间信息,请稍后", end="\t", flush=True)
os.system("title {}".format(api.getTitle()))
if api.updRoomInfo(True):
print("OK")
else:
print("FAIL")
print("更新房间礼物信息", end="\t", flush=True)
__res = api.updGiftInfo()
if __res < 0:
print("FAIL")
else:
print('OK\n礼物种数:', __res)
print("=" * 30)
while True:
if api.isLive:
os.system("title {}".format(api.getTitle()))
try:
api.getDanmaku()
except requests.exceptions.BaseHTTPError:
print("网络错误,请确认网络")
time.sleep(5)
except Exception as e:
print(e.__str__())
time.sleep(1)
else:
set_cmd_text_color(FOREGROUND_RED)
print("主播未开播等待1分钟后重试")
resetColor()
time.sleep(60)
api.updRoomInfo(True)

33
WinMain.spec Normal file
View File

@ -0,0 +1,33 @@
# -*- mode: python -*-
block_cipher = None
a = Analysis(['WinMain.py'],
pathex=['E:\\XiGuaLiveDanmakuHelper',r'C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.18362.0\\ucrt\\DLLs\\x86'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='西瓜直播礼物助手',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False,
runtime_tmpdir=None,
console=True,
icon='./ico.ico' )

122
XiguaGift_pb2.py Normal file
View File

@ -0,0 +1,122 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: XiguaGift.proto
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='XiguaGift.proto',
package='',
syntax='proto2',
serialized_options=None,
serialized_pb=b'\n\x0fXiguaGift.proto\" \n\x04Gift\x12\n\n\x02id\x18\x01 \x02(\t\x12\x0c\n\x04name\x18\x02 \x02(\t\"+\n\x08GiftPack\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x13\n\x04gift\x18\x02 \x02(\x0b\x32\x05.Gift'
)
_GIFT = _descriptor.Descriptor(
name='Gift',
full_name='Gift',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='Gift.id', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='name', full_name='Gift.name', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=19,
serialized_end=51,
)
_GIFTPACK = _descriptor.Descriptor(
name='GiftPack',
full_name='GiftPack',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='GiftPack.id', index=0,
number=1, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='gift', full_name='GiftPack.gift', index=1,
number=2, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=53,
serialized_end=96,
)
_GIFTPACK.fields_by_name['gift'].message_type = _GIFT
DESCRIPTOR.message_types_by_name['Gift'] = _GIFT
DESCRIPTOR.message_types_by_name['GiftPack'] = _GIFTPACK
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
Gift = _reflection.GeneratedProtocolMessageType('Gift', (_message.Message,), {
'DESCRIPTOR' : _GIFT,
'__module__' : 'XiguaGift_pb2'
# @@protoc_insertion_point(class_scope:Gift)
})
_sym_db.RegisterMessage(Gift)
GiftPack = _reflection.GeneratedProtocolMessageType('GiftPack', (_message.Message,), {
'DESCRIPTOR' : _GIFTPACK,
'__module__' : 'XiguaGift_pb2'
# @@protoc_insertion_point(class_scope:GiftPack)
})
_sym_db.RegisterMessage(GiftPack)
# @@protoc_insertion_point(module_scope)

797
XiguaMessage_pb2.py Normal file
View File

@ -0,0 +1,797 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: XiguaMessage.proto
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
import XiguaUser_pb2 as XiguaUser__pb2
import XiguaGift_pb2 as XiguaGift__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='XiguaMessage.proto',
package='',
syntax='proto2',
serialized_options=None,
serialized_pb=b'\n\x12XiguaMessage.proto\x1a\x0fXiguaUser.proto\x1a\x0fXiguaGift.proto\"*\n\x07Message\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\"f\n\x0f\x46\x61nsClubMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x0c\n\x04type\x18\x02 \x02(\x05\x12\x0f\n\x07\x63ontent\x18\x03 \x02(\t\x12\x13\n\x04user\x18\x04 \x02(\x0b\x32\x05.User\"U\n\x14\x46\x61nsClubStatsMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\r\n\x05title\x18\x02 \x02(\t\x12\r\n\x05\x63ount\x18\x03 \x02(\x05\"]\n\x0eUserSeqMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x16\n\x0epopularityText\x18\x04 \x02(\t\x12\x12\n\npopularity\x18\x06 \x02(\x05\"D\n\x10\x44\x61ilyRankMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x0f\n\x07ranking\x18\n \x02(\x05\"T\n\x0b\x43hatMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x13\n\x04user\x18\x02 \x02(\x0b\x32\x05.User\x12\x0f\n\x07\x63ontent\x18\x03 \x02(\t\"]\n\rMemberMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x13\n\x04user\x18\x02 \x02(\x0b\x32\x05.User\x12\x16\n\x0epopularityText\x18\x0e \x02(\t\"\xa1\x01\n\x0bGiftMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x0e\n\x06giftId\x18\x02 \x02(\x05\x12\x10\n\x08\x63ontent4\x18\x04 \x02(\x05\x12\x10\n\x08repeated\x18\x05 \x02(\x05\x12\r\n\x05\x63ombo\x18\x06 \x02(\x05\x12\x13\n\x04user\x18\x07 \x01(\x0b\x32\x05.User\x12\x19\n\nisFinished\x18\t \x01(\x08:\x05\x66\x61lse\"f\n\rSocialMessage\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x13\n\x04user\x18\x02 \x02(\x0b\x32\x05.User\x12\x0c\n\x04int4\x18\x04 \x02(\x05\x12\x11\n\tfansCount\x18\x06 \x02(\x05\"*\n\x05Style\x12\r\n\x05\x63olor\x18\x01 \x01(\t\x12\x12\n\nfontWeight\x18\x04 \x01(\x05\"q\n\x06Params\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12\x15\n\x05style\x18\x02 \x01(\x0b\x32\x06.Style\x12\x0e\n\x06string\x18\x0b \x01(\t\x12\x18\n\x05users\x18\x15 \x01(\x0b\x32\t.UserPack\x12\x18\n\x05gifts\x18\x16 \x01(\x0b\x32\t.GiftPack\"_\n\x0b\x44isplayText\x12\x0e\n\x06method\x18\x01 \x02(\t\x12\x0e\n\x06\x66ormat\x18\x02 \x02(\t\x12\x17\n\x07\x62gStyle\x18\x03 \x01(\x0b\x32\x06.Style\x12\x17\n\x06params\x18\x04 \x02(\x0b\x32\x07.Params\"\x87\x01\n\nCommonInfo\x12\x0e\n\x06method\x18\x01 \x02(\t\x12\x0e\n\x06msg_id\x18\x02 \x02(\x05\x12\x0f\n\x07room_id\x18\x03 \x02(\x05\x12\x13\n\x0b\x63reate_time\x18\x04 \x02(\x05\x12\x10\n\x08someEnum\x18\x06 \x01(\x05\x12!\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x0c.DisplayText'
,
dependencies=[XiguaUser__pb2.DESCRIPTOR,XiguaGift__pb2.DESCRIPTOR,])
_MESSAGE = _descriptor.Descriptor(
name='Message',
full_name='Message',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='Message.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=56,
serialized_end=98,
)
_FANSCLUBMESSAGE = _descriptor.Descriptor(
name='FansClubMessage',
full_name='FansClubMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='FansClubMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='type', full_name='FansClubMessage.type', index=1,
number=2, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='content', full_name='FansClubMessage.content', index=2,
number=3, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='user', full_name='FansClubMessage.user', index=3,
number=4, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=100,
serialized_end=202,
)
_FANSCLUBSTATSMESSAGE = _descriptor.Descriptor(
name='FansClubStatsMessage',
full_name='FansClubStatsMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='FansClubStatsMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='title', full_name='FansClubStatsMessage.title', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='count', full_name='FansClubStatsMessage.count', index=2,
number=3, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=204,
serialized_end=289,
)
_USERSEQMESSAGE = _descriptor.Descriptor(
name='UserSeqMessage',
full_name='UserSeqMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='UserSeqMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='popularityText', full_name='UserSeqMessage.popularityText', index=1,
number=4, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='popularity', full_name='UserSeqMessage.popularity', index=2,
number=6, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=291,
serialized_end=384,
)
_DAILYRANKMESSAGE = _descriptor.Descriptor(
name='DailyRankMessage',
full_name='DailyRankMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='DailyRankMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='ranking', full_name='DailyRankMessage.ranking', index=1,
number=10, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=386,
serialized_end=454,
)
_CHATMESSAGE = _descriptor.Descriptor(
name='ChatMessage',
full_name='ChatMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='ChatMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='user', full_name='ChatMessage.user', index=1,
number=2, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='content', full_name='ChatMessage.content', index=2,
number=3, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=456,
serialized_end=540,
)
_MEMBERMESSAGE = _descriptor.Descriptor(
name='MemberMessage',
full_name='MemberMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='MemberMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='user', full_name='MemberMessage.user', index=1,
number=2, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='popularityText', full_name='MemberMessage.popularityText', index=2,
number=14, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=542,
serialized_end=635,
)
_GIFTMESSAGE = _descriptor.Descriptor(
name='GiftMessage',
full_name='GiftMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='GiftMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='giftId', full_name='GiftMessage.giftId', index=1,
number=2, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='content4', full_name='GiftMessage.content4', index=2,
number=4, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='repeated', full_name='GiftMessage.repeated', index=3,
number=5, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='combo', full_name='GiftMessage.combo', index=4,
number=6, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='user', full_name='GiftMessage.user', index=5,
number=7, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='isFinished', full_name='GiftMessage.isFinished', index=6,
number=9, type=8, cpp_type=7, label=1,
has_default_value=True, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=638,
serialized_end=799,
)
_SOCIALMESSAGE = _descriptor.Descriptor(
name='SocialMessage',
full_name='SocialMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='commonInfo', full_name='SocialMessage.commonInfo', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='user', full_name='SocialMessage.user', index=1,
number=2, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='int4', full_name='SocialMessage.int4', index=2,
number=4, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='fansCount', full_name='SocialMessage.fansCount', index=3,
number=6, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=801,
serialized_end=903,
)
_STYLE = _descriptor.Descriptor(
name='Style',
full_name='Style',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='color', full_name='Style.color', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='fontWeight', full_name='Style.fontWeight', index=1,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=905,
serialized_end=947,
)
_PARAMS = _descriptor.Descriptor(
name='Params',
full_name='Params',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='type', full_name='Params.type', index=0,
number=1, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='style', full_name='Params.style', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='string', full_name='Params.string', index=2,
number=11, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='users', full_name='Params.users', index=3,
number=21, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='gifts', full_name='Params.gifts', index=4,
number=22, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=949,
serialized_end=1062,
)
_DISPLAYTEXT = _descriptor.Descriptor(
name='DisplayText',
full_name='DisplayText',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='method', full_name='DisplayText.method', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='format', full_name='DisplayText.format', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='bgStyle', full_name='DisplayText.bgStyle', index=2,
number=3, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='params', full_name='DisplayText.params', index=3,
number=4, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=1064,
serialized_end=1159,
)
_COMMONINFO = _descriptor.Descriptor(
name='CommonInfo',
full_name='CommonInfo',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='method', full_name='CommonInfo.method', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='msg_id', full_name='CommonInfo.msg_id', index=1,
number=2, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='room_id', full_name='CommonInfo.room_id', index=2,
number=3, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='create_time', full_name='CommonInfo.create_time', index=3,
number=4, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='someEnum', full_name='CommonInfo.someEnum', index=4,
number=6, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='displayText', full_name='CommonInfo.displayText', index=5,
number=8, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=1162,
serialized_end=1297,
)
_MESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_FANSCLUBMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_FANSCLUBMESSAGE.fields_by_name['user'].message_type = XiguaUser__pb2._USER
_FANSCLUBSTATSMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_USERSEQMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_DAILYRANKMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_CHATMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_CHATMESSAGE.fields_by_name['user'].message_type = XiguaUser__pb2._USER
_MEMBERMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_MEMBERMESSAGE.fields_by_name['user'].message_type = XiguaUser__pb2._USER
_GIFTMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_GIFTMESSAGE.fields_by_name['user'].message_type = XiguaUser__pb2._USER
_SOCIALMESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO
_SOCIALMESSAGE.fields_by_name['user'].message_type = XiguaUser__pb2._USER
_PARAMS.fields_by_name['style'].message_type = _STYLE
_PARAMS.fields_by_name['users'].message_type = XiguaUser__pb2._USERPACK
_PARAMS.fields_by_name['gifts'].message_type = XiguaGift__pb2._GIFTPACK
_DISPLAYTEXT.fields_by_name['bgStyle'].message_type = _STYLE
_DISPLAYTEXT.fields_by_name['params'].message_type = _PARAMS
_COMMONINFO.fields_by_name['displayText'].message_type = _DISPLAYTEXT
DESCRIPTOR.message_types_by_name['Message'] = _MESSAGE
DESCRIPTOR.message_types_by_name['FansClubMessage'] = _FANSCLUBMESSAGE
DESCRIPTOR.message_types_by_name['FansClubStatsMessage'] = _FANSCLUBSTATSMESSAGE
DESCRIPTOR.message_types_by_name['UserSeqMessage'] = _USERSEQMESSAGE
DESCRIPTOR.message_types_by_name['DailyRankMessage'] = _DAILYRANKMESSAGE
DESCRIPTOR.message_types_by_name['ChatMessage'] = _CHATMESSAGE
DESCRIPTOR.message_types_by_name['MemberMessage'] = _MEMBERMESSAGE
DESCRIPTOR.message_types_by_name['GiftMessage'] = _GIFTMESSAGE
DESCRIPTOR.message_types_by_name['SocialMessage'] = _SOCIALMESSAGE
DESCRIPTOR.message_types_by_name['Style'] = _STYLE
DESCRIPTOR.message_types_by_name['Params'] = _PARAMS
DESCRIPTOR.message_types_by_name['DisplayText'] = _DISPLAYTEXT
DESCRIPTOR.message_types_by_name['CommonInfo'] = _COMMONINFO
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
Message = _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), {
'DESCRIPTOR' : _MESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:Message)
})
_sym_db.RegisterMessage(Message)
FansClubMessage = _reflection.GeneratedProtocolMessageType('FansClubMessage', (_message.Message,), {
'DESCRIPTOR' : _FANSCLUBMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:FansClubMessage)
})
_sym_db.RegisterMessage(FansClubMessage)
FansClubStatsMessage = _reflection.GeneratedProtocolMessageType('FansClubStatsMessage', (_message.Message,), {
'DESCRIPTOR' : _FANSCLUBSTATSMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:FansClubStatsMessage)
})
_sym_db.RegisterMessage(FansClubStatsMessage)
UserSeqMessage = _reflection.GeneratedProtocolMessageType('UserSeqMessage', (_message.Message,), {
'DESCRIPTOR' : _USERSEQMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:UserSeqMessage)
})
_sym_db.RegisterMessage(UserSeqMessage)
DailyRankMessage = _reflection.GeneratedProtocolMessageType('DailyRankMessage', (_message.Message,), {
'DESCRIPTOR' : _DAILYRANKMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:DailyRankMessage)
})
_sym_db.RegisterMessage(DailyRankMessage)
ChatMessage = _reflection.GeneratedProtocolMessageType('ChatMessage', (_message.Message,), {
'DESCRIPTOR' : _CHATMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:ChatMessage)
})
_sym_db.RegisterMessage(ChatMessage)
MemberMessage = _reflection.GeneratedProtocolMessageType('MemberMessage', (_message.Message,), {
'DESCRIPTOR' : _MEMBERMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:MemberMessage)
})
_sym_db.RegisterMessage(MemberMessage)
GiftMessage = _reflection.GeneratedProtocolMessageType('GiftMessage', (_message.Message,), {
'DESCRIPTOR' : _GIFTMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:GiftMessage)
})
_sym_db.RegisterMessage(GiftMessage)
SocialMessage = _reflection.GeneratedProtocolMessageType('SocialMessage', (_message.Message,), {
'DESCRIPTOR' : _SOCIALMESSAGE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:SocialMessage)
})
_sym_db.RegisterMessage(SocialMessage)
Style = _reflection.GeneratedProtocolMessageType('Style', (_message.Message,), {
'DESCRIPTOR' : _STYLE,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:Style)
})
_sym_db.RegisterMessage(Style)
Params = _reflection.GeneratedProtocolMessageType('Params', (_message.Message,), {
'DESCRIPTOR' : _PARAMS,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:Params)
})
_sym_db.RegisterMessage(Params)
DisplayText = _reflection.GeneratedProtocolMessageType('DisplayText', (_message.Message,), {
'DESCRIPTOR' : _DISPLAYTEXT,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:DisplayText)
})
_sym_db.RegisterMessage(DisplayText)
CommonInfo = _reflection.GeneratedProtocolMessageType('CommonInfo', (_message.Message,), {
'DESCRIPTOR' : _COMMONINFO,
'__module__' : 'XiguaMessage_pb2'
# @@protoc_insertion_point(class_scope:CommonInfo)
})
_sym_db.RegisterMessage(CommonInfo)
# @@protoc_insertion_point(module_scope)

727
XiguaUser_pb2.py Normal file
View File

@ -0,0 +1,727 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: XiguaUser.proto
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='XiguaUser.proto',
package='',
syntax='proto2',
serialized_options=None,
serialized_pb=b'\n\x0fXiguaUser.proto\"\x1f\n\x08UserPack\x12\x13\n\x04user\x18\x01 \x02(\x0b\x32\x05.User\"\xb6\x01\n\x05\x42\x61\x64ge\x12\x0b\n\x03url\x18\x01 \x03(\t\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\r\n\x05width\x18\x04 \x01(\x05\x12\x0c\n\x04type\x18\x06 \x01(\x05\x12\x0f\n\x07\x63lickTo\x18\x07 \x01(\t\x12\'\n\x0b\x66\x61nClubText\x18\x08 \x01(\x0b\x32\x12.Badge.FanClubText\x1a\x39\n\x0b\x46\x61nClubText\x12\x0c\n\x04text\x18\x01 \x02(\t\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\r\n\x05level\x18\x03 \x02(\x05\"y\n\x0c\x46\x61nsClubPack\x12(\n\x08\x66\x61nsClub\x18\x01 \x02(\x0b\x32\x16.FansClubPack.FansClub\x1a?\n\x08\x46\x61nsClub\x12\x0f\n\x05title\x18\x01 \x02(\t:\x00\x12\x10\n\x05level\x18\x02 \x02(\x05:\x01\x30\x12\x10\n\x08someEnum\x18\x03 \x01(\x05\"\xd8\x05\n\x04User\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x10\n\x08nickname\x18\x03 \x02(\t\x12\x0e\n\x06gender\x18\x04 \x02(\x05\x12!\n\x0b\x61vatarThumb\x18\t \x02(\x0b\x32\x0c.User.Avatar\x12\"\n\x0c\x61vatarMedium\x18\n \x01(\x0b\x32\x0c.User.Avatar\x12!\n\x0b\x61vatarLarge\x18\x0b \x01(\x0b\x32\x0c.User.Avatar\x12\x15\n\x05\x62\x61\x64ge\x18\x15 \x03(\x0b\x32\x06.Badge\x12\x1c\n\x06\x66ollow\x18\x16 \x01(\x0b\x32\x0c.User.Follow\x12 \n\x08payGrade\x18\x17 \x02(\x0b\x32\x0e.User.PayGrade\x12\x1f\n\x08\x66\x61nsClub\x18\x18 \x02(\x0b\x32\r.FansClubPack\x12\x11\n\ttotalPaid\x18\" \x02(\x05\x1a!\n\x06\x41vatar\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\n\n\x02id\x18\x02 \x01(\t\x1a\x33\n\x06\x46ollow\x12\x14\n\tfollowing\x18\x01 \x01(\x05:\x01\x30\x12\x13\n\x08\x66ollower\x18\x02 \x01(\x05:\x01\x30\x1a\x9c\x01\n\x08PayGrade\x12\x0f\n\x07\x63urrent\x18\x01 \x02(\x05\x12\r\n\x05level\x18\x06 \x02(\x05\x12\x18\n\x10\x63urrentLevelNeed\x18\n \x01(\x05\x12\x15\n\rnextLevelNeed\x18\x0b \x01(\x05\x12\x0f\n\x07\x63ontent\x18\r \x01(\t\x12\x15\n\x05\x62\x61\x64ge\x18\x13 \x02(\x0b\x32\x06.Badge\x12\x17\n\x0ftoNextLevelNeed\x18\x15 \x01(\x05\x1a#\n\nHonorLevel\x12\x15\n\x05\x62\x61\x64ge\x18\x13 \x02(\x0b\x32\x06.Badge\x1a\x90\x01\n\x05Noble\x12\x0f\n\x07\x63ontent\x18\x04 \x02(\t\x12)\n\x07\x62oarder\x18\x08 \x01(\x0b\x32\x18.User.Noble.NobleBoarder\x1aK\n\x0cNobleBoarder\x12\x0f\n\x07urlList\x18\x01 \x03(\t\x12\x0b\n\x03uri\x18\x02 \x02(\t\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\r\n\x05width\x18\x04 \x01(\x05'
)
_USERPACK = _descriptor.Descriptor(
name='UserPack',
full_name='UserPack',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='user', full_name='UserPack.user', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=19,
serialized_end=50,
)
_BADGE_FANCLUBTEXT = _descriptor.Descriptor(
name='FanClubText',
full_name='Badge.FanClubText',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='text', full_name='Badge.FanClubText.text', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='color', full_name='Badge.FanClubText.color', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='level', full_name='Badge.FanClubText.level', index=2,
number=3, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=178,
serialized_end=235,
)
_BADGE = _descriptor.Descriptor(
name='Badge',
full_name='Badge',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='url', full_name='Badge.url', index=0,
number=1, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='height', full_name='Badge.height', index=1,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='width', full_name='Badge.width', index=2,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='type', full_name='Badge.type', index=3,
number=6, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='clickTo', full_name='Badge.clickTo', index=4,
number=7, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='fanClubText', full_name='Badge.fanClubText', index=5,
number=8, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_BADGE_FANCLUBTEXT, ],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=53,
serialized_end=235,
)
_FANSCLUBPACK_FANSCLUB = _descriptor.Descriptor(
name='FansClub',
full_name='FansClubPack.FansClub',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='title', full_name='FansClubPack.FansClub.title', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=True, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='level', full_name='FansClubPack.FansClub.level', index=1,
number=2, type=5, cpp_type=1, label=2,
has_default_value=True, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='someEnum', full_name='FansClubPack.FansClub.someEnum', index=2,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=295,
serialized_end=358,
)
_FANSCLUBPACK = _descriptor.Descriptor(
name='FansClubPack',
full_name='FansClubPack',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='fansClub', full_name='FansClubPack.fansClub', index=0,
number=1, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_FANSCLUBPACK_FANSCLUB, ],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=237,
serialized_end=358,
)
_USER_AVATAR = _descriptor.Descriptor(
name='Avatar',
full_name='User.Avatar',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='url', full_name='User.Avatar.url', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='id', full_name='User.Avatar.id', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=660,
serialized_end=693,
)
_USER_FOLLOW = _descriptor.Descriptor(
name='Follow',
full_name='User.Follow',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='following', full_name='User.Follow.following', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=True, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='follower', full_name='User.Follow.follower', index=1,
number=2, type=5, cpp_type=1, label=1,
has_default_value=True, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=695,
serialized_end=746,
)
_USER_PAYGRADE = _descriptor.Descriptor(
name='PayGrade',
full_name='User.PayGrade',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='current', full_name='User.PayGrade.current', index=0,
number=1, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='level', full_name='User.PayGrade.level', index=1,
number=6, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='currentLevelNeed', full_name='User.PayGrade.currentLevelNeed', index=2,
number=10, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='nextLevelNeed', full_name='User.PayGrade.nextLevelNeed', index=3,
number=11, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='content', full_name='User.PayGrade.content', index=4,
number=13, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='badge', full_name='User.PayGrade.badge', index=5,
number=19, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='toNextLevelNeed', full_name='User.PayGrade.toNextLevelNeed', index=6,
number=21, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=749,
serialized_end=905,
)
_USER_HONORLEVEL = _descriptor.Descriptor(
name='HonorLevel',
full_name='User.HonorLevel',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='badge', full_name='User.HonorLevel.badge', index=0,
number=19, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=907,
serialized_end=942,
)
_USER_NOBLE_NOBLEBOARDER = _descriptor.Descriptor(
name='NobleBoarder',
full_name='User.Noble.NobleBoarder',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='urlList', full_name='User.Noble.NobleBoarder.urlList', index=0,
number=1, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='uri', full_name='User.Noble.NobleBoarder.uri', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='height', full_name='User.Noble.NobleBoarder.height', index=2,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='width', full_name='User.Noble.NobleBoarder.width', index=3,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=1014,
serialized_end=1089,
)
_USER_NOBLE = _descriptor.Descriptor(
name='Noble',
full_name='User.Noble',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='content', full_name='User.Noble.content', index=0,
number=4, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='boarder', full_name='User.Noble.boarder', index=1,
number=8, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_USER_NOBLE_NOBLEBOARDER, ],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=945,
serialized_end=1089,
)
_USER = _descriptor.Descriptor(
name='User',
full_name='User',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='User.id', index=0,
number=1, type=3, cpp_type=2, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='nickname', full_name='User.nickname', index=1,
number=3, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='gender', full_name='User.gender', index=2,
number=4, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='avatarThumb', full_name='User.avatarThumb', index=3,
number=9, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='avatarMedium', full_name='User.avatarMedium', index=4,
number=10, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='avatarLarge', full_name='User.avatarLarge', index=5,
number=11, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='badge', full_name='User.badge', index=6,
number=21, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='follow', full_name='User.follow', index=7,
number=22, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='payGrade', full_name='User.payGrade', index=8,
number=23, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='fansClub', full_name='User.fansClub', index=9,
number=24, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='totalPaid', full_name='User.totalPaid', index=10,
number=34, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_USER_AVATAR, _USER_FOLLOW, _USER_PAYGRADE, _USER_HONORLEVEL, _USER_NOBLE, ],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=361,
serialized_end=1089,
)
_USERPACK.fields_by_name['user'].message_type = _USER
_BADGE_FANCLUBTEXT.containing_type = _BADGE
_BADGE.fields_by_name['fanClubText'].message_type = _BADGE_FANCLUBTEXT
_FANSCLUBPACK_FANSCLUB.containing_type = _FANSCLUBPACK
_FANSCLUBPACK.fields_by_name['fansClub'].message_type = _FANSCLUBPACK_FANSCLUB
_USER_AVATAR.containing_type = _USER
_USER_FOLLOW.containing_type = _USER
_USER_PAYGRADE.fields_by_name['badge'].message_type = _BADGE
_USER_PAYGRADE.containing_type = _USER
_USER_HONORLEVEL.fields_by_name['badge'].message_type = _BADGE
_USER_HONORLEVEL.containing_type = _USER
_USER_NOBLE_NOBLEBOARDER.containing_type = _USER_NOBLE
_USER_NOBLE.fields_by_name['boarder'].message_type = _USER_NOBLE_NOBLEBOARDER
_USER_NOBLE.containing_type = _USER
_USER.fields_by_name['avatarThumb'].message_type = _USER_AVATAR
_USER.fields_by_name['avatarMedium'].message_type = _USER_AVATAR
_USER.fields_by_name['avatarLarge'].message_type = _USER_AVATAR
_USER.fields_by_name['badge'].message_type = _BADGE
_USER.fields_by_name['follow'].message_type = _USER_FOLLOW
_USER.fields_by_name['payGrade'].message_type = _USER_PAYGRADE
_USER.fields_by_name['fansClub'].message_type = _FANSCLUBPACK
DESCRIPTOR.message_types_by_name['UserPack'] = _USERPACK
DESCRIPTOR.message_types_by_name['Badge'] = _BADGE
DESCRIPTOR.message_types_by_name['FansClubPack'] = _FANSCLUBPACK
DESCRIPTOR.message_types_by_name['User'] = _USER
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
UserPack = _reflection.GeneratedProtocolMessageType('UserPack', (_message.Message,), {
'DESCRIPTOR' : _USERPACK,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:UserPack)
})
_sym_db.RegisterMessage(UserPack)
Badge = _reflection.GeneratedProtocolMessageType('Badge', (_message.Message,), {
'FanClubText' : _reflection.GeneratedProtocolMessageType('FanClubText', (_message.Message,), {
'DESCRIPTOR' : _BADGE_FANCLUBTEXT,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:Badge.FanClubText)
})
,
'DESCRIPTOR' : _BADGE,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:Badge)
})
_sym_db.RegisterMessage(Badge)
_sym_db.RegisterMessage(Badge.FanClubText)
FansClubPack = _reflection.GeneratedProtocolMessageType('FansClubPack', (_message.Message,), {
'FansClub' : _reflection.GeneratedProtocolMessageType('FansClub', (_message.Message,), {
'DESCRIPTOR' : _FANSCLUBPACK_FANSCLUB,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:FansClubPack.FansClub)
})
,
'DESCRIPTOR' : _FANSCLUBPACK,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:FansClubPack)
})
_sym_db.RegisterMessage(FansClubPack)
_sym_db.RegisterMessage(FansClubPack.FansClub)
User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), {
'Avatar' : _reflection.GeneratedProtocolMessageType('Avatar', (_message.Message,), {
'DESCRIPTOR' : _USER_AVATAR,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.Avatar)
})
,
'Follow' : _reflection.GeneratedProtocolMessageType('Follow', (_message.Message,), {
'DESCRIPTOR' : _USER_FOLLOW,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.Follow)
})
,
'PayGrade' : _reflection.GeneratedProtocolMessageType('PayGrade', (_message.Message,), {
'DESCRIPTOR' : _USER_PAYGRADE,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.PayGrade)
})
,
'HonorLevel' : _reflection.GeneratedProtocolMessageType('HonorLevel', (_message.Message,), {
'DESCRIPTOR' : _USER_HONORLEVEL,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.HonorLevel)
})
,
'Noble' : _reflection.GeneratedProtocolMessageType('Noble', (_message.Message,), {
'NobleBoarder' : _reflection.GeneratedProtocolMessageType('NobleBoarder', (_message.Message,), {
'DESCRIPTOR' : _USER_NOBLE_NOBLEBOARDER,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.Noble.NobleBoarder)
})
,
'DESCRIPTOR' : _USER_NOBLE,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User.Noble)
})
,
'DESCRIPTOR' : _USER,
'__module__' : 'XiguaUser_pb2'
# @@protoc_insertion_point(class_scope:User)
})
_sym_db.RegisterMessage(User)
_sym_db.RegisterMessage(User.Avatar)
_sym_db.RegisterMessage(User.Follow)
_sym_db.RegisterMessage(User.PayGrade)
_sym_db.RegisterMessage(User.HonorLevel)
_sym_db.RegisterMessage(User.Noble)
_sym_db.RegisterMessage(User.Noble.NobleBoarder)
# @@protoc_insertion_point(module_scope)

143
Xigua_pb2.py Normal file
View File

@ -0,0 +1,143 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: Xigua.proto
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='Xigua.proto',
package='',
syntax='proto2',
serialized_options=None,
serialized_pb=b'\n\x0bXigua.proto\"\x9a\x01\n\tXiguaLive\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.XiguaLive.Data\x12\x0e\n\x06\x63ursor\x18\x02 \x02(\t\x12\x16\n\x0e\x66\x65tch_interval\x18\x03 \x01(\x05\x12\x0b\n\x03now\x18\x04 \x01(\x05\x12\x14\n\x0cinternal_ext\x18\x05 \x02(\t\x1a#\n\x04\x44\x61ta\x12\x0e\n\x06method\x18\x01 \x02(\t\x12\x0b\n\x03raw\x18\x02 \x02(\x0c'
)
_XIGUALIVE_DATA = _descriptor.Descriptor(
name='Data',
full_name='XiguaLive.Data',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='method', full_name='XiguaLive.Data.method', index=0,
number=1, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='raw', full_name='XiguaLive.Data.raw', index=1,
number=2, type=12, cpp_type=9, label=2,
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=135,
serialized_end=170,
)
_XIGUALIVE = _descriptor.Descriptor(
name='XiguaLive',
full_name='XiguaLive',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='data', full_name='XiguaLive.data', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='cursor', full_name='XiguaLive.cursor', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='fetch_interval', full_name='XiguaLive.fetch_interval', index=2,
number=3, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='now', full_name='XiguaLive.now', index=3,
number=4, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='internal_ext', full_name='XiguaLive.internal_ext', index=4,
number=5, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
nested_types=[_XIGUALIVE_DATA, ],
enum_types=[
],
serialized_options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=16,
serialized_end=170,
)
_XIGUALIVE_DATA.containing_type = _XIGUALIVE
_XIGUALIVE.fields_by_name['data'].message_type = _XIGUALIVE_DATA
DESCRIPTOR.message_types_by_name['XiguaLive'] = _XIGUALIVE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
XiguaLive = _reflection.GeneratedProtocolMessageType('XiguaLive', (_message.Message,), {
'Data' : _reflection.GeneratedProtocolMessageType('Data', (_message.Message,), {
'DESCRIPTOR' : _XIGUALIVE_DATA,
'__module__' : 'Xigua_pb2'
# @@protoc_insertion_point(class_scope:XiguaLive.Data)
})
,
'DESCRIPTOR' : _XIGUALIVE,
'__module__' : 'Xigua_pb2'
# @@protoc_insertion_point(class_scope:XiguaLive)
})
_sym_db.RegisterMessage(XiguaLive)
_sym_db.RegisterMessage(XiguaLive.Data)
# @@protoc_insertion_point(module_scope)

687
api.py
View File

@ -1,336 +1,453 @@
# coding=utf-8
import sys import sys
from Struct.MemberMsg import MemberMsg
from Struct.User import User
from Struct.Gift import Gift
from Struct.Chat import Chat
from Struct.Lottery import Lottery
import requests import requests
import time import time
import ctypes from datetime import datetime, timedelta
import os from Xigua_pb2 import XiguaLive
from XiguaMessage_pb2 import FansClubMessage, SocialMessage
DEBUG = False
COMMON_GET_PARAM = (
"&iid=96159232732&device_id=55714661189&channel=xiaomi&aid=32&app_name=video_article&version_code=816"
"&version_name=8.1.6&device_platform=android&ab_version=941090,785218,668858,1046292,1073579,830454,956074,929436,"
"797199,1135476,1179370,994679,959010,900042,1113833,668854,1193963,901277,1043330,1038721,994822,1002058,1230687,"
"1189797,1143356,1143441,1143501,1143698,1143713,1371009,1243997,1392586,1395695,1395486,1398858,668852,668856,"
"668853,1186421,668851,668859,999124,668855,1039075&device_type=MI+8+SE&device_brand=Xiaomi&language=zh"
"&os_api=28&os_version=9&openudid=70d6668d41512c39&manifest_version_code=412&update_version_code=81606"
"&_rticket={TIMESTAMP:.0f}&cdid_ts={TIMESTAMP:.0f}&fp=a_fake_fp&tma_jssdk_version=1290000"
"&cdid=ed4295e8-5d9a-4cb9-b2a2-04009a3baa2d&oaid=a625f466e0975d42")
SEARCH_USER_API = (
"https://security.snssdk.com/video/app/search/live/?format=json&search_sug=0&forum=0&m_tab=live&is_native_req=0"
"&offset=0&from=live&en_qc=1&pd=xigua_live&ssmix=a{COMMON}&keyword={keyword}")
USER_INFO_API = "https://is.snssdk.com/video/app/user/home/v7/?to_user_id={userId}{COMMON}"
ROOM_INFO_API = ("https://webcast3.ixigua.com/webcast/room/enter/?room_id={roomId}&webcast_sdk_version=1350"
"&webcast_language=zh&webcast_locale=zh_CN&pack_level=4{COMMON}")
DANMAKU_GET_API = ("https://webcast3.ixigua.com/webcast/room/{roomId}/_fetch_message_polling/?webcast_sdk_version=1350"
"&webcast_language=zh&webcast_locale=zh_CN{COMMON}")
GIFT_DATA_API = ("https://webcast.ixigua.com/webcast/gift/list/?room_id={roomId}&fetch_giftlist_from=2"
"&webcast_sdk_version=1350&webcast_language=zh&webcast_locale=zh_CN{COMMON}")
COMMON_HEADERS = {
"sdk-version": '1',
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 9) VideoArticle/8.1.6 cronet/TTNetVersion:b97574c0 2019-09-24",
"Accept-Encoding": "gzip, deflate"
}
class UserStruct:
ID = 0
name = ""
brand= ""
level= 0
type = 0
def __init__(self, json=None):
if json:
self.parse(json)
def parse(self, json):
if "Msg" in json:
if "user" in json["Msg"]:
self.ID = json["Msg"]['user']['user_id']
self.name = json["Msg"]['user']['name']
self.type = json["Msg"]['user']['user_type']
if "discipulus_info" in json["Msg"]:
self.level = json["Msg"]["discipulus_info"]["level"]
self.brand = json["Msg"]["discipulus_info"]["discipulus_group_title"]
if self.type is None:
self.type = 0
def __str__(self):
if self.level == 0:
if self.type != 0:
return "[]{}".format(self.name)
return "{}".format(self.name)
else:
if self.type != 0:
return "[{}{}]{}".format(self.brand, self.level, self.name)
return "<{}{}>{}".format(self.brand,self.level,self.name)
def __unicode__(self):
return self.__str__()
class GiftStruct:
ID = 0
count = 0
def __init__(self, json=None):
if json:
self.parse(json)
def parse(self, json):
if "Msg" in json:
if "present_end_info" in json["Msg"]:
self.ID = json["Msg"]['present_end_info']['id']
self.count = json["Msg"]['present_end_info']['count']
elif "present_info" in json["Msg"]:
self.ID = json["Msg"]['present_info']['id']
self.count = json["Msg"]['present_info']['repeat_count']
def readInput(caption, default, timeout=5):
start_time = time.time()
print('{}({})\r\n>'.format(caption,default), end="")
input = ''
while True:
if msvcrt.kbhit():
chr = msvcrt.getche()
if ord(chr) == 13: # enter_key
break
elif ord(chr) == 27:
break
elif ord(chr) >= 32: # space_char
input += str(chr)
if len(input) == 0 and (time.time() - start_time) > timeout:
break
if len(input) > 0:
print()
return input
else:
print("使用默认值")
return default
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# 字体颜色定义 ,关键在于颜色编码由2位十六进制组成分别取0~f前一位指的是背景色后一位指的是字体色
#由于该函数的限制应该是只有这16种可以前景色与背景色组合。也可以几种颜色通过或运算组合组合后还是在这16种颜色中
# Windows CMD命令行 字体颜色定义 text colors
FOREGROUND_BLACK = 0x00 # black.
FOREGROUND_DARKBLUE = 0x01 # dark blue.
FOREGROUND_DARKGREEN = 0x02 # dark green.
FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
FOREGROUND_DARKRED = 0x04 # dark red.
FOREGROUND_DARKPINK = 0x05 # dark pink.
FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
FOREGROUND_DARKWHITE = 0x07 # dark white.
FOREGROUND_DARKGRAY = 0x08 # dark gray.
FOREGROUND_BLUE = 0x09 # blue.
FOREGROUND_GREEN = 0x0a # green.
FOREGROUND_SKYBLUE = 0x0b # skyblue.
FOREGROUND_RED = 0x0c # red.
FOREGROUND_PINK = 0x0d # pink.
FOREGROUND_YELLOW = 0x0e # yellow.
FOREGROUND_WHITE = 0x0f # white.
# Windows CMD命令行 背景颜色定义 background colors
BACKGROUND_BLUE = 0x10 # dark blue.
BACKGROUND_GREEN = 0x20 # dark green.
BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.
BACKGROUND_DARKRED = 0x40 # dark red.
BACKGROUND_DARKPINK = 0x50 # dark pink.
BACKGROUND_DARKYELLOW = 0x60 # dark yellow.
BACKGROUND_DARKWHITE = 0x70 # dark white.
BACKGROUND_DARKGRAY = 0x80 # dark gray.
BACKGROUND_BLUE = 0x90 # blue.
BACKGROUND_GREEN = 0xa0 # green.
BACKGROUND_SKYBLUE = 0xb0 # skyblue.
BACKGROUND_RED = 0xc0 # red.
BACKGROUND_PINK = 0xd0 # pink.
BACKGROUND_YELLOW = 0xe0 # yellow.
BACKGROUND_WHITE = 0xf0 # white.
s = requests.Session()
def set_cmd_text_color(color, handle=std_out_handle):
Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
return Bool
def resetColor():
set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
class XiGuaLiveApi: class XiGuaLiveApi:
isLive = False
roomInfo = {}
roomID = 0
cursor = ""
giftList = {10001:"西瓜"}
def __init__(self, room: int): def __init__(self, name=None):
self.room = room """
Api类
Init Function
:param name: class:str|User: 主播名
"""
if name is None:
name = "永恒de草薙"
self.broadcaster = None
self.isValidUser = False
if type(name) == User:
self.broadcaster = name
self.name = name.name
elif str(name).isdigit():
self.broadcaster = User()
self.isValidUser = True
self.broadcaster.ID = int(name)
else:
self.name = str(name)
self.isLive = False
self._rawRoomInfo = {}
self.roomID = 0
self.roomPopularity = 0
self.lottery = None
self.s = requests.session()
self.s.headers.update(COMMON_HEADERS)
self._updRoomAt = datetime.fromtimestamp(0)
self.updRoomInfo() self.updRoomInfo()
self.updGiftList() self._ext = ""
self._cursor = "0"
def notLiveError(self): def _updateRoomPopularity(self, _data):
print("主播未开播") """
更新房间人气的方法
Update Room Popularity
:param _data: Received Message
"""
if "extra" in _data:
if "member_count" in _data["extra"] and _data["extra"]["member_count"] > 0:
self.roomPopularity = _data["extra"]["member_count"]
if "data" in _data:
if "popularity" in _data["data"]:
self.roomPopularity = _data["data"]["popularity"]
def apiChangedError(self, msg:str): def getJson(self, url, **kwargs):
try:
p = self.s.get(url, **kwargs)
except Exception as e:
print("网络请求失败")
if DEBUG:
print("GET")
print("URL", url)
print("ERR ", e.__str__())
return None
try:
return p.json()
except Exception as e:
print("解析请求失败")
if DEBUG:
print("GET JSON")
print("URL", url)
print("CNT", p.text)
print("ERR ", e.__str__())
return None
def postJson(self, url, data, **kwargs):
try:
p = self.s.post(url, data=data, **kwargs)
except Exception as e:
print("网络请求失败")
if DEBUG:
print("POST")
print("URL", url)
print("ERR ", e.__str__())
return None
try:
return p.json()
except Exception as e:
print("解析请求失败")
if DEBUG:
print("GET JSON")
print("URL", url)
print("CNT", p.text)
print("ERR ", e.__str__())
return None
@staticmethod
def apiChangedError(msg: str, *args):
"""
API发生更改时的提示
Warning while Detected Api has Changed
:param msg: 提示信息
:param args: DEBUG模式下显示更多信息
"""
print(msg) print(msg)
if DEBUG:
print(*args)
def onPresent(self, user:UserStruct, gift:GiftStruct): def onPresent(self, gift: Gift):
if gift.ID not in self.giftList: """
giftN = "未知礼物:{}".format(gift.ID) 礼物连击中的消息
else: Message On Sending Presents
giftN = self.giftList[gift.ID] :param gift: Struct of Gift Message
return """
print("礼物连击", user, giftN, "x", gift.count) print("礼物连击 :", gift)
def onPresentEnd(self, user:UserStruct, gift:GiftStruct): def onPresentEnd(self, gift: Gift):
if gift.ID not in self.giftList: """
self.updGiftList() 礼物送完了的提示信息
giftN = "未知礼物:{}".format(gift.ID) Message On Finished Send Present
else: :param gift: Struct of Gift Message
giftN = self.giftList[gift.ID] """
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK) print("感谢", gift)
print("感谢", user, "送出的", giftN, "x", gift.count)
resetColor()
def onAd(self, i): def onAd(self, i):
"""
全局广播
All Channel Broadcasting Message( Just An Ad )
:param i: JSON DATA if you wanna using it
"""
# print(i) # print(i)
pass pass
def onChat(self, user:UserStruct, content:str): def onChat(self, chat: Chat):
print(user, "", content) """
# pass 聊天信息
On Chatting
:param chat: Struct of Chat Message
"""
if not chat.isFiltered:
print(chat)
def onEnter(self, user:UserStruct, content:str == ""): def onEnter(self, msg: MemberMsg):
if content == "": """
if user.name == "三国空白" or user.name == "四维v": 进入房间消息
set_cmd_text_color(FOREGROUND_DARKGRAY) On Entering Room
print("消息:", user, "进入直播间") :param msg: Struct of Member Message
resetColor() """
else: print("提示 :", msg)
set_cmd_text_color(FOREGROUND_DARKGRAY)
print("消息:", content.format(user))
resetColor()
def onSubscribe(self, user:UserStruct): def onSubscribe(self, user: User):
if user.level >= 6 and user.brand == "永恒": """
set_cmd_text_color(FOREGROUND_DARKGRAY) 关注主播时的消息
print("消息:", user, "关注了主播") On Subscribe
resetColor() :param user: Struct of User Message
"""
print("消息 :", user, "关注了主播")
def onJoin(self, user:UserStruct): def onJoin(self, user: User):
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK) """
print("感谢", user, "加入粉丝团") 加入粉丝团消息
resetColor() :param user:
"""
print("欢迎", user, "加入了粉丝团")
def onMessage(self, msg: str): def onMessage(self, msg: str):
set_cmd_text_color(FOREGROUND_DARKGRAY) """
print("消息", msg) 系统消息
resetColor() :param msg:
"""
print("消息 :", msg)
def onLike(self, user:UserStruct): def onLike(self, user: User):
return """
# set_cmd_text_color(FOREGROUND_DARKGRAY) 点击喜欢的消息
# print("用户", user, "点了喜欢") On Like
# resetColor() :param user:
"""
print("用户", user, "点了喜欢")
def onLeave(self, json: any): def onLeave(self, json: any):
print("消息:", "主播离开一小会") """
self.debug(json) 下播消息
return On Liver Leave
:param json:
"""
print("消息 :", "主播离开了")
self.updRoomInfo()
def updGiftList(self): def onLottery(self, i: Lottery):
p = s.get("https://live.ixigua.com/api/gifts/{roomID}".format(roomID=self.roomID)) """
d = p.json() 中奖的内容
self.debug(d) :param i:
if "data" not in d: """
self.warning("Warning: Api Has Changed") print("中奖消息 :", i)
return
def _checkUsernameIsMatched(self, compare=None):
"""
验证主播名字是自己想要的那个
Check name matched
:return: bool: 是否匹配
"""
if compare is None:
compare = self.broadcaster
if self.name is None or compare is None:
return False
return self.name == compare.__str__() or compare.__str__() in self.name or self.name in compare.__str__()
def _forceSearchUser(self):
"""
搜索主播名
:return:
"""
_formatData = {"COMMON": COMMON_GET_PARAM, "TIMESTAMP": time.time() * 1000, "keyword": self.name}
_url = SEARCH_USER_API.format_map(_formatData).format_map(_formatData)
d = self.getJson(_url)
if d is None:
print("搜索接口请求失败")
return False
self.broadcaster = None
self.isValidUser = False
if "data" in d and d["data"] is not None:
for i in d["data"]: for i in d["data"]:
self.debug(i["ID"], i["Name"]) if self.broadcaster is not None:
self.giftList[i["ID"]] = i["Name"] break
if i["block_type"] != 0:
continue
if "cells" not in i or len(i["cells"]) == 0:
break
for _j in i["cells"]:
_user = User(_j)
if self._checkUsernameIsMatched(_user):
self.isValidUser = True
self.broadcaster = _user
break
self._updRoomAt = datetime.now()
return self._updateUserInfo()
def warning(self, *args): def _updateUserInfo(self):
print(args) """
获取用户信息
def debug(self, *args): :return:
# print(args) """
pass if self.broadcaster is None:
self.isValidUser = False
def enterRoom(self): return False
p = s.post("https://live.ixigua.com/api/room/enter/{roomID}".format(roomID=self.roomID)) _formatData = {"COMMON": COMMON_GET_PARAM, "TIMESTAMP": time.time() * 1000, "userId": self.broadcaster.ID}
self.debug(p.json()) _url = USER_INFO_API.format_map(_formatData).format_map(_formatData)
d = self.getJson(_url)
def updRoomInfo(self): if d is None:
p = s.get("https://live.ixigua.com/api/room/{room}".format(room=self.room)) print("获取用户信息失败")
d = p.json() return False
self.debug(d) self.isValidUser = d["status"] == 0
if "data" not in d: if "user_info" not in d and d["user_info"] is None:
self.apiChangedError("数据结构改变,请与我联系") self.apiChangedError("Api发生改变,请及时联系", d)
self.debug(d) return False
return self.broadcaster = User(d)
self.roomInfo = d["data"] if not self._checkUsernameIsMatched():
print("进入", self.roomInfo["anchorInfo"]["name"], "的直播间")
if "Id" in d["data"]:
self.roomID = d["data"]["Id"]
else:
self.warning("无法获取RoomID请与我联系")
if "FinishTime" in d["data"]:
self.isLive = False self.isLive = False
self.notLiveError() return False
self.isLive = d["user_info"]["is_living"]
self._updRoomAt = datetime.now()
self._rawRoomInfo = d["user_info"]['live_info']
if self.isLive:
self.roomID = d["user_info"]['live_info']['room_id']
# 处理抽奖事件
l = Lottery(self._rawRoomInfo)
if l.isActive:
# 因为现在每个房间只能同时开启一个抽奖,所以放一个就行了
self.lottery = l
return True
def _getRoomInfo(self, force=False):
if self.roomID == 0:
self.isLive = False
return False
if not force and (self._updRoomAt + timedelta(minutes=10) > datetime.now()):
return self.isLive
_formatData = {"COMMON": COMMON_GET_PARAM, "TIMESTAMP": time.time() * 1000, "roomId": self.roomID}
_url = ROOM_INFO_API.format_map(_formatData).format_map(_formatData)
d = self.getJson(_url)
if d is None:
print("获取房间信息接口请求失败")
return False
if d["status_code"] != 0:
print("接口提示:【{}".format(d["data"]["message"]))
return False
self._rawRoomInfo = d["data"]
self.isLive = d["data"]["status"] == 2
self._updRoomAt = datetime.now()
self._updateRoomPopularity(d)
Gift.roomID = self.roomID
return self.isLive
def updRoomInfo(self, force=False):
"""
更新房间信息
:return:
"""
if not force and (self._updRoomAt + timedelta(minutes=2) > datetime.now()):
return self.isLive
if not self.isValidUser:
return self._forceSearchUser()
elif not self.isLive:
return self._updateUserInfo()
else: else:
self.isLive = True return self._getRoomInfo(force)
def updGiftInfo(self):
self.updRoomInfo()
_formatData = {"COMMON": COMMON_GET_PARAM, "TIMESTAMP": time.time() * 1000, "roomId": self.roomID}
_url = GIFT_DATA_API.format_map(_formatData).format_map(_formatData)
d = self.getJson(_url)
Gift.roomID = self.roomID
if d is None or d["status_code"] != 0:
Gift.update()
elif 'pages' not in d["data"]:
Gift.update()
else:
for _page in d["data"]['pages']:
if 'gifts' in _page:
for _gift in _page['gifts']:
Gift.addGift(_gift)
return len(Gift.giftList)
def getDanmaku(self): def getDanmaku(self):
p = s.get("https://live.ixigua.com/api/msg/list/{roomID}?AnchorID={room}&Cursor={cursor}".format( """
roomID=self.roomID, 获取弹幕
room=self.room, """
cursor=self.cursor self.updRoomInfo()
)) _formatData = {"COMMON": COMMON_GET_PARAM, "TIMESTAMP": time.time() * 1000, "roomId": self.roomID}
d = p.json() _url = DANMAKU_GET_API.format_map(_formatData).format_map(_formatData)
self.debug(d) p = self.s.post(_url, data="cursor={cursor}&resp_content_type=protobuf&live_id=3&user_id=0&identity=audience"
if "data" not in d: "&internal_ext={ext}".format_map({"cursor": self._cursor, "ext": self._ext}),
self.apiChangedError("数据结构改变,请与我联系") headers={"Content-Type": "application/x-www-form-urlencoded"})
self.debug(d) if p.status_code != 200:
return
if "Extra" not in d["data"]:
self.apiChangedError("数据结构改变,请与我联系")
self.debug(d["data"])
return
if "Cursor" not in d["data"]["Extra"]:
self.apiChangedError("数据结构改变,请与我联系")
self.debug(d["data"])
return return
data = XiguaLive()
data.ParseFromString(p.content)
self._cursor = data.cursor
self._ext = data.internal_ext
for _each in data.data:
if _each.method == "WebcastGiftMessage":
_gift = Gift(_each.raw)
if _gift.isAnimate() or _gift.isFinished:
self.onPresentEnd(_gift)
else: else:
self.cursor = d["data"]["Extra"]["Cursor"] self.onPresent(_gift)
if "LiveMsgs" not in d["data"]: elif _each.method == "WebcastChatMessage":
return _chat = Chat(_each.raw)
for i in d['data']['LiveMsgs']: self.onChat(_chat)
if i['Method'] == "VideoLivePresentMessage": elif _each.method == "WebcastSocialMessage":
self.onPresent(UserStruct(i), GiftStruct(i)) _socialMessage = SocialMessage()
elif i['Method'] == "VideoLivePresentEndTipMessage": _socialMessage.ParseFromString(_each.raw)
self.onPresentEnd(UserStruct(i), GiftStruct(i)) _user = User(_socialMessage.user)
elif i['Method'] == "VideoLiveRoomAdMessage": self.onSubscribe(_user)
self.onAd(i) elif _each.method == "WebcastFansclubMessage":
elif i['Method'] == "VideoLiveChatMessage": _fansClubMessage = FansClubMessage()
self.onChat(UserStruct(i), i["Msg"]['content']) _fansClubMessage.ParseFromString(_each.raw)
elif i['Method'] == "VideoLiveMemberMessage": # 升级是1加入是2
self.onEnter(UserStruct(i), i["Msg"]["content"]) if _fansClubMessage.type == 2:
elif i['Method'] == "VideoLiveSocialMessage": _user = User(_fansClubMessage.user)
self.onSubscribe(UserStruct(i)) self.onJoin(_user)
elif i['Method'] == "VideoLiveJoinDiscipulusMessage":
self.onJoin(UserStruct(i))
elif i['Method'] == "VideoLiveControlMessage":
print("消息:", "主播离开一小会")
elif i['Method'] == "VideoLiveDiggMessage":
self.onLike(UserStruct(i))
else: else:
self.debug(i) self.onMessage(_fansClubMessage.content)
else:
pass
# 更新抽奖信息
if self.lottery is not None and self.lottery.ID != 0:
self.lottery.update()
if self.lottery.isFinished:
self.onLottery(self.lottery)
self.lottery = None
@property
def updateAt(self):
return self._updRoomAt
if __name__ == "__main__": if __name__ == "__main__":
room = 97621754276 #永恒 name = "永恒de草薙"
# room = 75366565294 if len(sys.argv) > 2:
# room = 83940182312 #Dae if sys.argv[-1] == "d":
if len(sys.argv)>1: DEBUG = True
room = int(sys.argv[1]) name = sys.argv[1]
resetColor()
print("西瓜直播弹幕助手 by JerryYan") print("西瓜直播弹幕助手 by JerryYan")
print("正在进入房间", room) print("接口版本8.1.6")
api = XiGuaLiveApi(room) print("搜索【", name, "", end="\t", flush=True)
os.system("title {} {}".format(api.roomInfo["anchorInfo"]["name"],"的直播间 --西瓜直播弹幕助手 by JerryYan")) api = XiGuaLiveApi(name)
api.enterRoom() if not api.isValidUser:
input("用户不存在")
sys.exit()
print("OK")
print(api.broadcaster.__repr__())
print("更新房间信息,请稍后", end="\t", flush=True)
if api.updRoomInfo(True):
print("OK")
else:
print("FAIL")
print("更新房间礼物信息", end="\t", flush=True)
__res = api.updGiftInfo()
if __res < 0:
print("FAIL")
else:
print('OK\n礼物种数:', __res)
print("=" * 30) print("=" * 30)
while True: while True:
if api.isLive: if api.isLive:
try: try:
api.getDanmaku() api.getDanmaku()
except Exception as e:
api.warning(e)
time.sleep(1) time.sleep(1)
except requests.exceptions.BaseHTTPError:
print("网络错误,请确认网络")
time.sleep(5)
# except Exception as e:
# print(e)
else: else:
print("主播未开播等待1分钟后重试") print("主播未开播等待1分钟后重试")
time.sleep(60) time.sleep(60)
api.updRoomInfo() api.updRoomInfo(True)

BIN
ico.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB