ck_kgqq   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 209
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 117
dl 0
loc 209
rs 10
c 0
b 0
f 0
wmc 19

5 Methods

Rating   Name   Duplication   Size   Complexity  
A KGQQ.__init__() 0 2 1
C KGQQ.sign() 0 127 10
A KGQQ.sign_vip() 0 35 3
A KGQQ.main() 0 12 2
A KGQQ.get_t_uuid() 0 8 3
1
# -*- coding: utf-8 -*-
2
"""
3
cron: 55 14 * * *
4
new Env('全民K歌');
5
"""
6
7
import requests
8
9
from notify_mtr import send
10
from utils import get_data
11
12
13
class KGQQ:
14
    def __init__(self, check_items):
15
        self.check_items = check_items
16
17
    @staticmethod
18
    def get_t_uuid(cookie):
19
        uid = cookie.split("; ")
20
        t_uuid = ""
21
        for i in uid:
22
            if i.find("uid=") >= 0:
23
                t_uuid = i.split("=")[1]
24
        return t_uuid
25
26
    @staticmethod
27
    def sign(headers, t_uuid):
28
        url_list = (
29
            [
30
                "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&ns_inbuf=&"
31
                "mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNBJTIyTG"
32
                "90dGVyeVJlcSUyMiUyQyUyMnduc0NvbmZpZyUyMiUzQSU3QiUyMmFwcGlkJTIyJTNBMTAwMDU1NyU"
33
                "3RCUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjIlM0E1MDM5MzclMkMlMjJjbWQlMjIlM0E1"
34
                "ODk4MjQlN0QlN0Q%3D&"
35
                f"t_uid={t_uuid}&t_iShowEntry=1&t_type={one}"
36
                for one in ["1", "2"]
37
            ]
38
            + [
39
                "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.signinGetAward&"
40
                "mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIyJTNB"
41
                "JTIyR2V0U2lnbkluQXdhcmRSZXElMjIlMkMlMjJ3bnNDb25maWclMjIlM0ElN0IlMjJhcHB"
42
                "pZCUyMiUzQTEwMDA2MjYlN0QlMkMlMjJsNWFwaSUyMiUzQSU3QiUyMm1vZGlkJTIyJTNBNT"
43
                "AzOTM3JTJDJTIyY21kJTIyJTNBNTg5ODI0JTdEJTdE&"
44
                f"t_uid={t_uuid}&t_iShowEntry={one}"
45
                for one in ["1", "2", "4", "16", "128", "512"]
46
            ]
47
            + [
48
                "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&"
49
                "mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIy"
50
                "JTNBJTIyTG90dGVyeVJlcSUyMiUyQyUyMnduc0NvbmZpZyUyMiUzQSU3QiUyMmFwcGl"
51
                "kJTIyJTNBMTAwMDU1NyU3RCUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjIlM0"
52
                "E1MDM5MzclMkMlMjJjbWQlMjIlM0E1ODk4MjQlN0QlN0Q&"
53
                f"t_uid={t_uuid}&t_iShowEntry=4&t_type=104",
54
                "https://node.kg.qq.com/webapp/proxy?ns=KG_TASK&cmd=task.getLottery&"
55
                "mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnRhc2tKY2UlMjIlMkMlMjJjbWROYW1lJTIy"
56
                "JTNBJTIyTG90dGVyeVJlcSUyMiUyQyUyMmw1YXBpJTIyJTNBJTdCJTIybW9kaWQlMjI"
57
                "lM0E1MDM5MzclMkMlMjJjbWQlMjIlM0E1ODk4MjQlN0QlMkMlMjJsNWFwaV9leHAxJT"
58
                "IyJTNBJTdCJTIybW9kaWQlMjIlM0E4MTcwODklMkMlMjJjbWQlMjIlM0EzODAxMDg4JTdEJTdE&"
59
                f"t_uid={t_uuid}&t_type=103",
60
            ]
61
        )
62
63
        proto_music_station_url = (
64
            "https://node.kg.qq.com/webapp/proxy?"
65
            "ns=proto_music_station&cmd=message.batch_get_music_cards&"
66
            "mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldEJhdGNoTXVzaWNDYX"
67
            "Jkc1JlcSUyMiUyQyUyMmZpbGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF"
68
            "0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF0Y2hlciUyMiUzQXRydWUlN0Q&"
69
            f"t_uUid={t_uuid}&g_tk_openkey="
70
        )
71
72
        url_10 = (
73
            "https://node.kg.qq.com/webapp/proxy?"
74
            "t_stReward%3Aobject=%7B%22uInteractiveType%22%3A1%2C%22uRewardType%22%3A0%2C%22u"
75
            "FlowerNum%22%3A15%7D&ns=proto_music_station&cmd=message.get_reward&"
76
            "mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFJld2FyZFJlcSUyMiUyQyUyMmZp"
77
            "bGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF"
78
            "0Y2hlciUyMiUzQXRydWUlN0Q&"
79
            f"t_uUid={t_uuid}&t_strUgcId="
80
        )
81
82
        url_15 = (
83
            "https://node.kg.qq.com/webapp/proxy?"
84
            "t_stReward%3Aobject=%7B%22uInteractiveType%22%3A0%2C%22uRewardType%22%3A0%2C%22u"
85
            "FlowerNum%22%3A10%7D&ns=proto_music_station&cmd=message.get_reward&"
86
            "mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFJld2FyZFJlcSUyMiUyQyUyMmZp"
87
            "bGUlMjIlM0ElMjJwcm90b19tdXNpY19zdGF0aW9uSmNlJTIyJTJDJTIyd25zRGlzcGF"
88
            "0Y2hlciUyMiUzQXRydWUlN0Q&"
89
            f"t_uUid={t_uuid}&t_strUgcId="
90
        )
91
92
        proto_profile_url = (
93
            "https://node.kg.qq.com/webapp/proxy?"
94
            "ns=proto_profile&cmd=profile.getProfile&"
95
            "mapExt=JTdCJTIyZmlsZSUyMiUzQSUyMnByb2ZpbGVfd2ViYXBwSmNlJTIyJTJDJTIyY21kTmFtZSUyM"
96
            "iUzQSUyMlByb2ZpbGVHZXQlMjIlMkMlMjJhcHBpZCUyMiUzQTEwMDA2MjYlMkMlMjJkY2FwaSUyMiUzQ"
97
            "SU3QiUyMmludGVyZmFjZUlkJTIyJTNBMjA1MzU5NTk3JTdEJTJDJTIybDVhcGklMjIlM0ElN0IlMjJtb"
98
            "2RpZCUyMiUzQTI5NDAxNyUyQyUyMmNtZCUyMiUzQTI2MjE0NCU3RCUyQyUyMmlwJTIyJTNBJTIyMTAwL"
99
            "jExMy4xNjIuMTc4JTIyJTJDJTIycG9ydCUyMiUzQSUyMjEyNDA2JTIyJTdE&"
100
            f"t_uUid={t_uuid}"
101
        )
102
103
        try:
104
            old_proto_profile = requests.get(proto_profile_url, headers=headers).json()[
105
                "data"
106
            ]["profile.getProfile"]
107
            old_num = old_proto_profile["uFlowerNum"]
108
            nickname = old_proto_profile["stPersonInfo"]["sKgNick"]
109
110
            for url in url_list:
111
                try:
112
                    requests.get(url, headers=headers)
113
                except Exception as e:
114
                    print(e)
115
116
            for g_tk_openkey in range(16):
117
                try:
118
                    proto_music_station_res = requests.get(
119
                        f"{proto_music_station_url}{g_tk_openkey}", headers=headers
120
                    ).json()
121
                    if proto_music_station_res.get("code") == 1000:
122
                        return proto_music_station_res.get("msg")
123
                    vct_music_cards = proto_music_station_res["data"][
124
                        "message.batch_get_music_cards"
125
                    ]["vctMusicCards"]
126
                    vct_music_cards_list = sorted(
127
                        vct_music_cards,
128
                        key=lambda x: x["stReward"]["uFlowerNum"],
129
                        reverse=True,
130
                    )[0]
131
                    str_ugc_id = vct_music_cards_list["strUgcId"]
132
                    str_key = vct_music_cards_list["strKey"]
133
                    url = f"{str_ugc_id}&t_strKey={str_key}"
134
                    u_flower_num = vct_music_cards_list["stReward"]["uFlowerNum"]
135
                    if u_flower_num > 10:
136
                        requests.get(url_10 + url, headers=headers)
137
                    elif 1 < u_flower_num < 10:
138
                        requests.get(url_15 + url, headers=headers)
139
                except Exception as e:
140
                    print(e)
141
142
            new_proto_profile = requests.get(proto_profile_url, headers=headers).json()[
143
                "data"
144
            ]["profile.getProfile"]
145
            new_num = new_proto_profile["uFlowerNum"]
146
            get_num = int(new_num) - int(old_num)
147
            kg_message = (
148
                f"帐号信息: {nickname}\n" f"获取鲜花: {get_num} 朵\n" f"当前鲜花: {new_num} 朵"
149
            )
150
        except Exception as e:
151
            kg_message = str(e)
152
        return kg_message
153
154
    @staticmethod
155
    def sign_vip(headers, t_uuid):
156
        try:
157
            get_vip_info_url = (
158
                f"https://node.kg.qq.com/webapp/proxy?"
159
                f"ns=proto_vip_webapp&cmd=vip.get_vip_info&"
160
                f"t_uUid={t_uuid}&t_uWebReq=1&t_uGetDataFromC4B=1"
161
            )
162
            info_res = requests.get(get_vip_info_url, headers=headers).json()
163
            vip_status = info_res["data"]["vip.get_vip_info"]["stVipCoreInfo"][
164
                "uStatus"
165
            ]
166
167
            if vip_status == 1:
168
                vip_url = (
169
                    "https://node.kg.qq.com/webapp/proxy?"
170
                    f"t_uUid={t_uuid}&ns=proto_vip_webapp&"
171
                    "cmd=vip.get_vip_day_reward&ns_inbuf=&nocache=1613719349184&"
172
                    "mapExt=JTdCJTIyY21kTmFtZSUyMiUzQSUyMkdldFZpcERheVJld2FyZCUyMiU3RA%3D%3D&"
173
                    "g_tk_openkey=642424811"
174
                )
175
                vip_day_reward = requests.get(vip_url, headers=headers).json()["data"][
176
                    "vip.get_vip_day_reward"
177
                ]
178
                str_tips = vip_day_reward["strTips"]
179
                u_cur_reward_num = vip_day_reward["uCurRewardNum"]
180
                vip_message = f"{str_tips} 获取 VIP 福利道具:{u_cur_reward_num}个"
181
            else:
182
                vip_message = "非 VIP 用户"
183
184
        except Exception as e:
185
            print(e)
186
            vip_message = "VIP 签到失败"
187
188
        return vip_message
189
190
    def main(self):
191
        msg_all = ""
192
        for check_item in self.check_items:
193
            cookie = check_item.get("cookie")
194
            t_uuid = self.get_t_uuid(cookie)
195
            headers = {"Cookie": cookie}
196
            msg = (
197
                f"{self.sign(headers, t_uuid)}\n"
198
                f"VIP 签到: {self.sign_vip(headers, t_uuid)}"
199
            )
200
            msg_all += msg + "\n\n"
201
        return msg_all
202
203
204
if __name__ == "__main__":
205
    _data = get_data()
206
    _check_items = _data.get("KGQQ", [])
207
    result = KGQQ(check_items=_check_items).main()
208
    send("全民K歌", result)
209