更新粉丝团

This commit is contained in:
Jerry Yan 2020-01-01 21:39:20 +08:00
parent ff53afffb5
commit cae988e0fe
4 changed files with 55 additions and 38 deletions

View File

@ -3,7 +3,8 @@ import "XiguaUser.proto";
import "XiguaGift.proto"; import "XiguaGift.proto";
message Message { message Message {
required CommonInfo commonInfo = 1; required CommonInfo commonInfo = 1;
optional string content = 3; required bytes contents = 2;
optional bool isFinished = 9 [ default = false ];
} }
// //
message Style { message Style {

View File

@ -11,6 +11,7 @@ class Gift:
self.count = 0 self.count = 0
self.amount = 0 self.amount = 0
self.user = None self.user = None
self.backupName = None
if json: if json:
self.parse(json) self.parse(json)
@ -32,30 +33,34 @@ class Gift:
else: else:
self.update() self.update()
def update(self): @staticmethod
def update():
p = requests.get("https://i.snssdk.com/videolive/gift/get_gift_list?room_id={roomID}" p = requests.get("https://i.snssdk.com/videolive/gift/get_gift_list?room_id={roomID}"
"&version_code=800&device_platform=android".format(roomID=self.roomID)) "&version_code=800&device_platform=android".format(roomID=Gift.roomID))
d = p.json() d = p.json()
if "gift_info" not in d: if "gift_info" not in d:
print("错误:礼物更新失败") print("错误:礼物更新失败")
else: else:
for i in d["gift_info"]: for i in d["gift_info"]:
_id = int(i["id"]) _id = int(i["id"])
Gift.giftList[_id] = {"Name": i["name"], "Price": i["diamond_count"]} Gift.giftList[_id] = {"Name": i["name"], "Price": i["diamond_count"], "Type": i["type"]}
def isAnimate(self):
return self.ID != 0 and self.ID in self.giftList and self.giftList[self.ID]["Type"] == 2
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): def __str__(self):
if self.ID in self.giftList: return "{user} 送出的 {count}{name}".format(user=self.user, count=self.count, name=self._getGiftName())
giftN = self.giftList[self.ID]["Name"]
else:
giftN = "未知礼物[{}]".format(self.ID)
return "{user} 送出的 {count}{name}".format(user=self.user, count=self.count, name=giftN)
def __unicode__(self): def __unicode__(self):
return self.__str__() return self.__str__()
def __repr__(self): def __repr__(self):
if self.ID in self.giftList: return "西瓜礼物【{}(ID:{})】".format(self._getGiftName(), self.ID)
giftN = self.giftList[self.ID]["Name"]
else:
giftN = "未知礼物"
return "西瓜礼物【{}(ID:{})】".format(giftN, self.ID)

View File

@ -20,7 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
package='', package='',
syntax='proto2', syntax='proto2',
serialized_options=None, serialized_options=None,
serialized_pb=b'\n\x11XiguaCommon.proto\x1a\x0fXiguaUser.proto\x1a\x0fXiguaGift.proto\";\n\x07Message\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\t\"*\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\"u\n\nCommonInfo\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0e\n\x06msg_id\x18\x02 \x01(\x05\x12\x0f\n\x07room_id\x18\x03 \x01(\x05\x12\x13\n\x0b\x63reate_time\x18\x04 \x01(\x05\x12!\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x0c.DisplayText' serialized_pb=b'\n\x11XiguaCommon.proto\x1a\x0fXiguaUser.proto\x1a\x0fXiguaGift.proto\"W\n\x07Message\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x10\n\x08\x63ontents\x18\x02 \x02(\x0c\x12\x19\n\nisFinished\x18\t \x01(\x08:\x05\x66\x61lse\"*\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\"u\n\nCommonInfo\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0e\n\x06msg_id\x18\x02 \x01(\x05\x12\x0f\n\x07room_id\x18\x03 \x01(\x05\x12\x13\n\x0b\x63reate_time\x18\x04 \x01(\x05\x12!\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x0c.DisplayText'
, ,
dependencies=[XiguaUser__pb2.DESCRIPTOR,XiguaGift__pb2.DESCRIPTOR,]) dependencies=[XiguaUser__pb2.DESCRIPTOR,XiguaGift__pb2.DESCRIPTOR,])
@ -42,9 +42,16 @@ _MESSAGE = _descriptor.Descriptor(
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR), serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='content', full_name='Message.content', index=1, name='contents', full_name='Message.contents', index=1,
number=3, type=9, cpp_type=9, label=1, number=2, type=12, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'), 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),
_descriptor.FieldDescriptor(
name='isFinished', full_name='Message.isFinished', index=2,
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, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR), serialized_options=None, file=DESCRIPTOR),
@ -61,7 +68,7 @@ _MESSAGE = _descriptor.Descriptor(
oneofs=[ oneofs=[
], ],
serialized_start=55, serialized_start=55,
serialized_end=114, serialized_end=142,
) )
@ -98,8 +105,8 @@ _STYLE = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=116, serialized_start=144,
serialized_end=158, serialized_end=186,
) )
@ -157,8 +164,8 @@ _PARAMS = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=160, serialized_start=188,
serialized_end=273, serialized_end=301,
) )
@ -209,8 +216,8 @@ _DISPLAYTEXT = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=275, serialized_start=303,
serialized_end=370, serialized_end=398,
) )
@ -268,8 +275,8 @@ _COMMONINFO = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=372, serialized_start=400,
serialized_end=489, serialized_end=517,
) )
_MESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO _MESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO

26
api.py
View File

@ -69,7 +69,7 @@ class XiGuaLiveApi:
self._updRoomAt = datetime.fromtimestamp(0) self._updRoomAt = datetime.fromtimestamp(0)
self.updRoomInfo() self.updRoomInfo()
self._ext = "" self._ext = ""
self._cursor = "" self._cursor = "0"
def _updateRoomPopularity(self, _data): def _updateRoomPopularity(self, _data):
""" """
@ -107,7 +107,7 @@ class XiGuaLiveApi:
def postJson(self, url, data, **kwargs): def postJson(self, url, data, **kwargs):
try: try:
p = self.s.post(url, data, **kwargs) p = self.s.post(url, data=data, **kwargs)
except Exception as e: except Exception as e:
print("网络请求失败") print("网络请求失败")
if DEBUG: if DEBUG:
@ -317,6 +317,8 @@ class XiGuaLiveApi:
self.isLive = d["data"]["status"] == 2 self.isLive = d["data"]["status"] == 2
self._updRoomAt = datetime.now() self._updRoomAt = datetime.now()
self._updateRoomPopularity(d) self._updateRoomPopularity(d)
Gift.roomID = self.roomID
Gift.update()
return self.isLive return self.isLive
def updRoomInfo(self, force=False): def updRoomInfo(self, force=False):
@ -343,26 +345,28 @@ class XiGuaLiveApi:
headers={"Content-Type": "application/x-www-form-urlencoded"}) headers={"Content-Type": "application/x-www-form-urlencoded"})
data = XiguaLive() data = XiguaLive()
data.ParseFromString(p.content) data.ParseFromString(p.content)
f = open("Demo/a.txt", 'wb')
f.write(p.content)
f.close()
self._cursor = data.cursor self._cursor = data.cursor
self._ext = data.internal_ext self._ext = data.internal_ext
for _each in data.data: for _each in data.data:
if _each.method == "WebcastGiftMessage": if _each.method == "WebcastGiftMessage":
print("Gift\t", _each.message.commonInfo.displayText.params.gifts.id, "\t", _gift = Gift()
_each.message.commonInfo.displayText.params.users.user.nickname, _gift.ID = _each.message.commonInfo.displayText.params.gifts.id
_each.message.commonInfo.displayText.params.gifts.gift.name, _gift.count = _each.message.commonInfo.displayText.params.string
_each.message.commonInfo.displayText.params.string) if _gift.isAnimate() or _each.message.isFinished:
_user = User()
_user.ID = _each.message.commonInfo.displayText.params.users.user.id
_user.name = _each.message.commonInfo.displayText.params.users.user.nickname
_gift.user = _user
_gift.backupName = _each.message.commonInfo.displayText.params.gifts.gift.name
self.onPresentEnd(_gift)
else: else:
pass print(_each.message.contents)
# 更新抽奖信息 # 更新抽奖信息
if self.lottery is not None and self.lottery.ID != 0: if self.lottery is not None and self.lottery.ID != 0:
self.lottery.update() self.lottery.update()
if self.lottery.isFinished: if self.lottery.isFinished:
self.onLottery(self.lottery) self.onLottery(self.lottery)
self.lottery = None self.lottery = None
time.sleep(1)
if __name__ == "__main__": if __name__ == "__main__":
name = "永恒de草薙" name = "永恒de草薙"