├── .gitignore
├── README.md
├── action.py
├── img
├── 2021-09-25-01.png
├── 2021-09-25.png
├── 2021-7-15 1-0.png
├── 2021-7-15 1-1.png
├── 2021-7-15 1.png
├── 2021-7-15 2.png
├── 2021-7-15 3.png
├── 2021-7-15 token.png
├── 2021-7-20 1-1.png
├── 2021-7-20 1-2.png
├── 2021-8-4 1-1.png
└── 2021-8-4 1-2.png
├── index.py
├── local_action.py
├── requirements.txt
└── 腾讯云部署.md
/.gitignore:
--------------------------------------------------------------------------------
1 | tempCodeRunnerFile.py
2 | *pycache*/
3 | cookies.txt
4 | date
5 | target
6 | github部署.md
7 | encryption.txt
8 | action2-0.py
9 | *.go
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **Aiqiyi-Sign**
2 |
3 | > 爱奇艺会员签到打卡
4 | >
5 | > 爱奇艺会员签到打卡,增加经验值,增加爱奇艺会员天数(连续打卡一个月,可以增加5天会员),**前提是爱奇艺会员**
6 | >每日三次抽奖,非会员也可参与
7 | > 项目地址:[Aiqiyi_Sign](https://github.com/ioutime/Aiqiyi_Sign)
8 |
9 |
10 | ## 脚本功能:
11 |
12 | 1. 登录爱奇艺,cookie(需要手动获取)
13 | 2. 支持爱奇艺会员**签到**打卡,每日三次**抽奖**,并显示今日成长值,vip到期时间等
14 | 3. 支持本地命令行执行
15 | 4. 支持pushplus 微信公众号推送
16 | 5. 支持腾讯云函数部署(建议,推荐)
17 | 6. 支持多个账户签到(P00001),只支持签到,无其他功能
18 |
19 |
20 | ## 注意事项:
21 |
22 | - **需要是爱奇艺会员**,否则脚本执行会不成功
23 |
24 |
25 |
26 | 使用方法:
27 | ---
28 |
29 | ### 安装依赖
30 |
31 | ```shell
32 | pip install -r requirements.txt
33 | ```
34 |
35 | ### 本地执行脚本----local_action.py
36 |
37 | **必须**:**替换local_action.py的第十九行为自己的cookie值(下面有获取cookie的方法)**,否则运行不成功
38 |
39 | eg:
40 |
41 | ```shell
42 | python local_action.py
43 | ```
44 |
45 | 结果
46 |
47 | ```
48 | ========================================
49 | *****: 签到成功:获得积分4 成长值4 累计签到 2 天
50 | 网页端签到成功: 获得积分6 累计签到2天
51 | VIP等级:5
52 | 升级需成长值:4267
53 | VIP到期时间:2022-02-24
54 | 今日抽奖次数:3
55 | 第1次抽奖:《我们的父辈1》
56 | 第3次抽奖:《我们的父辈1》
57 | 第2次抽奖:《我们的父辈1》
58 | 执行时间:7.906020096000248
59 | ========================================
60 | ```
61 |
62 |
63 |
64 | ### 部署参数介绍
65 |
66 | ```
67 | COOKIE (必填)
68 | TOKEN (选填,pushplus的token值)
69 | P00001(选填,多账号签到使用,注意是四个零; 多个以英文逗号【','】隔开,必须是英文的逗号)
70 | ```
71 |
72 |
73 |
74 | ### COOKIE值获取
75 |
76 | 1、打开[爱奇艺](https://www.iqiyi.com/)官网,并***登录***,一定要登录
77 |
78 | 2、按下**F12**,选择**network**(或者是网络), 按下 **F5** 刷新页面,如下图所示
79 |
80 |
81 |
82 | 3、点击第一个**www. iqiyi .com**,右边的**Headers**,找到 **Request Headers**,中的cookie值(从冒号开始)
83 |
84 |
85 |
86 | ### pushplus 微信公众号推送
87 |
88 | 使用[pushplus](http://www.pushplus.plus/)平台进行推送。
89 |
90 | 使用方法:
91 |
92 | 1. 访问[pushplus](http://www.pushplus.plus/)官网,登录
93 | 2. 找到**一对一推送**,并复制你的**token**
94 | 3. 执行脚本时替换token值
95 |
96 |
97 |
98 |
99 |
100 | 结果:
101 |
102 | ```
103 | 签到成功
104 | 成长值+2
105 | 连续签到:3天
106 | 签到周期:3天/7天
107 | VIP等级:4
108 | 升级需成长值:315
109 | VIP到期时间:2021-10-04
110 | ```
111 |
112 |
113 |
114 | 腾讯云函数部署:
115 | ---
116 |
117 | 详细过程请看[腾讯云部署.md](https://github.com/ioutime/Aiqiyi_Sign/blob/master/腾讯云部署.md)文件
118 |
119 |
120 |
121 |
122 | ## 多个爱奇艺账号部署:
123 |
124 | 多个账号部署,和上**面的部署流程一样**,只是**需要参数不同**不一样。
125 |
126 | ### 腾讯云函数部署:
127 |
128 | 填写必要参数 **P00001** 【注意是四个零; 多个以英文逗号【','】隔开,必须是英文的逗号】
129 |
130 |
131 | P00001的获取与如何填入数据
132 | ---
133 |
134 | 1、打开[爱奇艺](https://www.iqiyi.com/)官网,并***登录***,一定要登录
135 |
136 | 2、按下**F12**,选择**Application**(或者是应用程序), 并选择左侧栏的Cookies ,如下图所示
137 |
138 |
139 |
140 | 3、在搜索栏中输入P00001,回车,如下图所示,复制P00001
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 | ## 建议:
149 |
150 | 1. 建议关注爱奇艺的公众号,能接收到会员天数的增加消息
151 | 2. 建议添加微信公众号推送,以便接收是否打卡成功
152 | 3. 如果使用cookie签到,网页端登录后别退出一直保持登录,建议一个月更新一次cookie值,**不更新也没事,可以正常签到**,但是不能获取个人详细信息(如vip到期时间等)
153 |
154 |
--------------------------------------------------------------------------------
/action.py:
--------------------------------------------------------------------------------
1 | '''
2 | @FILE : action.py
3 | @DSEC : 爱奇艺签到
4 | @AUTHOR : ioutime
5 | @DATE : 2022/02/08 18:30:52
6 | @VERSION : 3.0
7 | '''
8 |
9 | import random
10 | import requests
11 | import argparse
12 | from urllib.parse import unquote
13 | import json
14 | import time
15 | import hashlib
16 | import string
17 | from json import dumps
18 |
19 | def main(infos):
20 | '''爱奇艺签到、每日三次抽奖,cookie签到'''
21 | start = time.perf_counter()
22 | cookie = infos["cookie"]
23 | p00001 = infos["p00001"]
24 | # Run tasks
25 | if not cookie:
26 | if not p00001:
27 | print("缺少必要参数")
28 | end = time.perf_counter()
29 | runTime = "\n执行时间:"+ str(end - start)
30 | push_info(infos,"缺少必要参数"+runTime)
31 | else:
32 | p00001s = p00001.split(',')
33 | more_accounts(infos,p00001s)
34 | elif cookie and p00001:
35 | p00001s = p00001.split(',')
36 | more_accounts(infos,p00001s)
37 | else:
38 | #转换cookie
39 | dct = transform(infos,cookie)
40 | if dct == None:
41 | return
42 | #获取nickname
43 | nickname = ''
44 | try:
45 | text = dct.get('P00002')
46 | text = unquote(text, 'utf-8').encode('utf-8').decode('unicode_escape')
47 | text = json.loads(text)
48 | nickname = text.get('nickname') + ': '
49 | #判断是否是会员
50 | text2 = dct.get('QC179')
51 | text2 = unquote(text2, 'utf-8').encode('utf-8').decode('unicode_escape')
52 | text2 = json.loads(text2)
53 | vipTypes = text2.get('vipTypes')
54 | #可能判断不准确(我到现在只遇到'' 和 '1'这种情况,不知道是否有其他情况)
55 | if vipTypes == '' or vipTypes == ' ':
56 | nickname = nickname +'非会员\n'
57 | else:
58 | nickname = nickname +'会员\n'
59 | except Exception as e:
60 | print(e)
61 | nickname = ''
62 | #查询抽奖次数
63 | chance = draw(dct,0).get('chance')
64 | #抽奖
65 | msg_draw = '\n今日抽奖次数:'+ str(chance)
66 | res_msg = ''
67 | while(chance > 0):
68 | res_msg = res_msg + '\n第'+ str(chance % 3 + 1) +'次抽奖:'+ draw(dct,1).get('msg')
69 | chance-=1
70 | time.sleep(2)
71 | #签到
72 | msg0 = nickname + member_sign(dct) + "\n"
73 | #网页签到
74 | msg0 = msg0 + websign(dct) + "\n"
75 | #用户信息
76 | msg = msg0 + get_info(dct) + msg_draw + res_msg
77 | end = time.perf_counter()
78 | runTime = "\n执行时间:"+ str(end - start)
79 | msg = msg + runTime
80 | print(msg)
81 | push_info(infos,msg)
82 |
83 |
84 | def more_accounts(infos,p00001):
85 | '''
86 | 多账号签到
87 | '''
88 | ans = ''
89 | for i in p00001:
90 | ans = ans + "第%s账号:" % (p00001.index(i) + 1)
91 | print ("第%s账号:" % (p00001.index(i) + 1))
92 | if len(i) >= 20:
93 | dct = {}
94 | dct['P00001']=i
95 | #签到
96 | msg = member_sign(dct)
97 | if msg!='失败\n':
98 | ans = ans + ' 签到成功\n'
99 | else:
100 | ans = ans + ' 签到失败!\n'
101 | print(msg)
102 | else:
103 | msg = ' p00001不完整'
104 | ans = ans + ' p00001不完整\n'
105 | print(msg)
106 | print('='*40)
107 | if len(ans) <= 300:
108 | push_info(infos,ans)
109 | else:
110 | push_info(infos,ans[0:200]+'......')
111 |
112 | def push_info(infos,msg):
113 | '''
114 | 推送信息
115 | '''
116 | token = infos["token"]
117 | if not token:
118 | return
119 | else:
120 | try:
121 | url = "http://www.pushplus.plus/send?token="+token+"&title=爱奇艺签到&content="+msg+"&template=html"
122 | requests.get(url=url)
123 | except Exception as e:
124 | print('推送失败')
125 | print(e)
126 |
127 | def get_args():
128 | '''
129 | 参数获取
130 | '''
131 | parser = argparse.ArgumentParser()
132 | parser.add_argument("-t", dest="token", help="pushplus的token值")
133 | parser.add_argument("-c", dest="cookie", help="cookie值")
134 | parser.add_argument("-s", dest="p00001", help="P00001值")
135 | args = parser.parse_args()
136 |
137 | return {
138 | "token" : args.token,
139 | "cookie" : args.cookie,
140 | "p00001" : args.p00001
141 | }
142 |
143 |
144 |
145 |
146 | def member_sign(cookies_dict):
147 | '''
148 | 签到
149 | '''
150 | P00001 = cookies_dict.get('P00001')
151 | P00003 = cookies_dict.get('P00003')
152 | dfp = cookies_dict.get('__dfp').split('@')[0]
153 | sign_date = {
154 | "agentType": "1",
155 | "agentversion": "1.0",
156 | "appKey": "basic_pcw",
157 | "authCookie": P00001,
158 | "qyid": md5(strRandom(16)),
159 | "task_code": "natural_month_sign",
160 | "timestamp": time_13(),
161 | "typeCode": "point",
162 | "userId": P00003
163 | }
164 | post_date = {
165 | "natural_month_sign": {
166 | "agentType": "1",
167 | "agentversion": "1",
168 | "authCookie": P00001,
169 | "qyid": md5(strRandom(16)),
170 | "taskCode": "iQIYI_mofhr",
171 | "verticalCode": "iQIYI"
172 | }
173 | }
174 | sign = k('|', sign_date, "UKobMjDMsDoScuWOfp6F")
175 | url = f"https://community.iqiyi.com/openApi/task/execute?{k('&', sign_date)}&sign={sign}"
176 | header = {
177 | 'Content-Type': 'application/json'
178 | }
179 | res = requests.post(url, headers=header, data=dumps(post_date)).json()
180 | if res['code'] == 'A00000':
181 | if res['data']['code'] == 'A0000':
182 | quantity = res['data']['data']['rewards'][0]['rewardCount'] # 积分
183 | addgrowthvalue = res['data']['data']['rewards'][0]['rewardCount'] # 新增成长值
184 | continued = res['data']['data']['signDays'] # 签到天数
185 | msg = (f"签到成功:获得积分{quantity} 成长值{addgrowthvalue} 累计签到 {continued} 天")
186 | else:
187 | msg = (f"签到失败:{res['data']['msg']}")
188 | else:
189 | msg = (f"签到失败:{res['message']}")
190 | return msg
191 |
192 |
193 | def websign(cookies_dict):
194 | '''
195 | 网页签到
196 | '''
197 | P00001 = cookies_dict.get('P00001')
198 | P00003 = cookies_dict.get('P00003')
199 | dfp = cookies_dict.get('__dfp').split('@')[0]
200 | web_sign_date = {
201 | "agenttype": "1",
202 | "agentversion": "0",
203 | "appKey": "basic_pca",
204 | "appver": "0",
205 | "authCookie": P00001,
206 | "channelCode": "sign_pcw",
207 | "dfp": dfp,
208 | "scoreType": "1",
209 | "srcplatform": "1",
210 | "typeCode": "point",
211 | "userId": P00003,
212 | "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
213 | "verticalCode": "iQIYI"
214 | }
215 | sign = k('|', web_sign_date, "DO58SzN6ip9nbJ4QkM8H")
216 | url = f"https://community.iqiyi.com/openApi/score/add?{k('&', web_sign_date)}&sign={sign}"
217 | res = requests.get(url).json()
218 | if res['code'] == 'A00000':
219 | if res['data'][0]['code'] == 'A0000':
220 | quantity = res['data'][0]['score'] # 积分
221 | continued = res['data'][0]['continuousValue'] # 累计签到天数
222 | msg = (f"网页端签到成功: 获得积分{quantity} 累计签到{continued}天")
223 | else:
224 | msg = (f"网页端签到失败:{res['data'][0]['message']}")
225 | else:
226 | msg = (f"网页端签到失败:{res['message']}")
227 | # print(msg)
228 | return msg
229 |
230 |
231 |
232 | def get_info(cookies_dict):
233 | '''
234 | 获取用户信息
235 | '''
236 | P00001 = cookies_dict.get('P00001')
237 | url = 'http://serv.vip.iqiyi.com/vipgrowth/query.action'
238 | params = {
239 | "P00001": P00001,
240 | }
241 | res = requests.get(url, params=params)
242 | if res.json()["code"] == "A00000":
243 | try:
244 | res_data = res.json()["data"]
245 | #VIP等级
246 | level = res_data["level"]
247 | #升级需要成长值
248 | distance = res_data["distance"]
249 | #VIP到期时间
250 | deadline = res_data["deadline"]
251 | msg = f"VIP等级:{level}\n升级需成长值:{distance}\nVIP到期时间:{deadline}"
252 | except:
253 | print("获取具体信息失败")
254 | msg = ""
255 | else:
256 | print("获取个人信息失败")
257 | msg = ""
258 | return msg
259 |
260 | def draw(cookies_dict,type):
261 | '''
262 | 查询抽奖次数,抽奖
263 | type: 0 查询次数;1 抽奖
264 | '''
265 | P00001 = cookies_dict.get('P00001')
266 | P00003 = cookies_dict.get('P00003')
267 | url = "https://iface2.iqiyi.com/aggregate/3.0/lottery_activity"
268 | params = {
269 | "lottery_chance": 1,
270 | "app_k": "0",
271 | "app_v": "0",
272 | "platform_id": 10,
273 | "dev_os": "2.0.0",
274 | "dev_ua": "COL-AL10",
275 | "net_sts": 1,
276 | "qyid": "2655b332a116d2247fac3dd66a5285011102",
277 | "psp_uid": P00003,
278 | "psp_cki": P00001,
279 | "psp_status": 3,
280 | "secure_v": 1,
281 | "secure_p": "0",
282 | "req_sn": round(time.time()*1000)
283 | }
284 | # 抽奖删除 lottery_chance 参数
285 | if type == 1:
286 | del params["lottery_chance"]
287 | res = requests.get(url, params=params)
288 |
289 | if not res.json().get('code'):
290 | chance = int(res.json().get('daysurpluschance'))
291 | msg = res.json().get("awardName")
292 | return {"status": "成功", "msg": msg, "chance": chance}
293 | else:
294 | try:
295 | msg = res.json().get("kv", {}).get("msg")
296 | except:
297 | msg = res.json()["errorReason"]
298 | return {"status": "失败", "msg": msg, "chance": 0}
299 |
300 | def transform(infos,cookie):
301 | '''
302 | 转换完整的COOKIE,并执行签到等功能
303 | '''
304 | try:
305 | cookies = cookie.replace(' ','')
306 | dct = {}
307 | lst = cookies.split(';')
308 | for i in lst:
309 | name = i.split('=')[0]
310 | value = i.split('=')[1]
311 | dct[name] = value
312 | except:
313 | msg0 = "输入的cookie有问题,请重新获取"
314 | print(msg0)
315 | push_info(infos,msg0)
316 | return
317 | #判断是否有要的值
318 | P00001 = dct.get('P00001')
319 | P00003 = dct.get('P00003')
320 | if P00001 == None:
321 | msg0 = "输入的cookie有问题(P00001),请重新获取"
322 | print(msg0)
323 | push_info(infos,msg0)
324 | return
325 | if P00003 == None:
326 | msg0 = "输入的cookie有问题(P00003),请重新获取"
327 | print(msg0)
328 | push_info(infos,msg0)
329 | return
330 | return dct
331 |
332 | # 随机字符串 a-z A-Z 0-9
333 | def strRandom(num):
334 | return ''.join(random.sample(string.ascii_letters + string.digits, num))
335 |
336 |
337 | # md5加密
338 | def md5(data):
339 | return hashlib.md5(bytes(data, encoding='utf-8')).hexdigest()
340 |
341 |
342 | # 13位时间戳
343 | def time_13():
344 | return round(time.time() * 1000)
345 |
346 |
347 | # 拼接 连接符 数据 特殊符号(可不填)
348 | def k(c, t, e=None):
349 | buf = []
350 | for key, value in t.items():
351 | buf.append('='.join([key, str(value)]))
352 | if e != None:
353 | buf.append(e)
354 | return (md5(c.join(buf)))
355 | return (c.join(buf))
356 |
357 | if __name__=="__main__":
358 | print('='*40)
359 | main(get_args())
360 | print('='*40)
361 |
--------------------------------------------------------------------------------
/img/2021-09-25-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-09-25-01.png
--------------------------------------------------------------------------------
/img/2021-09-25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-09-25.png
--------------------------------------------------------------------------------
/img/2021-7-15 1-0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 1-0.png
--------------------------------------------------------------------------------
/img/2021-7-15 1-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 1-1.png
--------------------------------------------------------------------------------
/img/2021-7-15 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 1.png
--------------------------------------------------------------------------------
/img/2021-7-15 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 2.png
--------------------------------------------------------------------------------
/img/2021-7-15 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 3.png
--------------------------------------------------------------------------------
/img/2021-7-15 token.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-15 token.png
--------------------------------------------------------------------------------
/img/2021-7-20 1-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-20 1-1.png
--------------------------------------------------------------------------------
/img/2021-7-20 1-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-7-20 1-2.png
--------------------------------------------------------------------------------
/img/2021-8-4 1-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-8-4 1-1.png
--------------------------------------------------------------------------------
/img/2021-8-4 1-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ioutime/Aiqiyi_Sign/8c2009852a01c07e5f63e30a3c9b77b3b550b306/img/2021-8-4 1-2.png
--------------------------------------------------------------------------------
/index.py:
--------------------------------------------------------------------------------
1 | # -*- encoding: utf-8 -*-
2 | import action
3 |
4 | infos = {
5 | "cookie": '''cookie值''',
6 | "token" : "",#推送token
7 | "p00001" : ""#多账号
8 | }
9 |
10 |
11 | def main_handler(event, context):
12 | action.main(infos)
13 |
14 |
15 | if __name__ == "__main__":
16 | main_handler("", "")
--------------------------------------------------------------------------------
/local_action.py:
--------------------------------------------------------------------------------
1 | '''
2 | @FILE : action.py
3 | @DSEC : 爱奇艺签到
4 | @AUTHOR : ioutime
5 | @DATE : 2022/02/08 18:30:52
6 | @VERSION : 3.0
7 | '''
8 |
9 | import random
10 | import requests
11 | from urllib.parse import unquote
12 | import json
13 | import time
14 | import hashlib
15 | import string
16 | from json import dumps
17 |
18 | infos = {
19 | "cookie": '''cookie值''',
20 | "token" : ""#推送token
21 | }
22 |
23 |
24 | def main(infos):
25 | '''爱奇艺签到、每日三次抽奖,cookie签到'''
26 | start = time.perf_counter()
27 | cookie = infos["cookie"]
28 | # Run tasks
29 | if not cookie:
30 | print("缺少必要参数")
31 | end = time.perf_counter()
32 | runTime = "\n执行时间:"+ str(end - start)
33 | print(runTime)
34 | push_info(infos,"缺少必要参数"+runTime)
35 | else:
36 | #转换cookie
37 | dct = transform(infos,cookie)
38 | if dct == None:
39 | return
40 | #获取nickname
41 | nickname = ''
42 | try:
43 | text = dct.get('P00002')
44 | text = unquote(text, 'utf-8').encode('utf-8').decode('unicode_escape')
45 | text = json.loads(text)
46 | nickname = text.get('nickname') + ': '
47 | #判断是否是会员
48 | text2 = dct.get('QC179')
49 | text2 = unquote(text2, 'utf-8').encode('utf-8').decode('unicode_escape')
50 | text2 = json.loads(text2)
51 | vipTypes = text2.get('vipTypes')
52 | #可能判断不准确(我到现在只遇到'' 和 '1'这种情况,不知道是否有其他情况)
53 | if vipTypes == '' or vipTypes == ' ':
54 | nickname = nickname +'非会员\n'
55 | else:
56 | nickname = nickname +'会员\n'
57 | except Exception as e:
58 | print(e)
59 | nickname = ''
60 | #查询抽奖次数
61 | chance = draw(dct,0).get('chance')
62 | #抽奖
63 | msg_draw = '\n今日抽奖次数:'+ str(chance)
64 | res_msg = ''
65 | while(chance > 0):
66 | res_msg = res_msg + '\n第'+ str(chance % 3 + 1) +'次抽奖:'+ draw(dct,1).get('msg')
67 | chance-=1
68 | time.sleep(2)
69 | #签到
70 | msg0 = nickname + member_sign(dct) + "\n"
71 | #网页签到
72 | msg0 = msg0 + websign(dct) + "\n"
73 | #用户信息
74 | msg = msg0 + get_info(dct) + msg_draw + res_msg
75 | end = time.perf_counter()
76 | runTime = "\n执行时间:"+ str(end - start)
77 | msg = msg + runTime
78 | print(msg)
79 | push_info(infos,msg)
80 |
81 |
82 |
83 |
84 | def push_info(infos,msg):
85 | '''
86 | 推送信息
87 | '''
88 | token = infos["token"]
89 | if not token:
90 | return
91 | else:
92 | try:
93 | url = "http://www.pushplus.plus/send?token="+token+"&title=爱奇艺签到&content="+msg+"&template=html"
94 | requests.get(url=url)
95 | except Exception as e:
96 | print('推送失败')
97 | print(e)
98 |
99 | def member_sign(cookies_dict):
100 | '''
101 | 签到
102 | '''
103 | P00001 = cookies_dict.get('P00001')
104 | P00003 = cookies_dict.get('P00003')
105 | dfp = cookies_dict.get('__dfp').split('@')[0]
106 | sign_date = {
107 | "agentType": "1",
108 | "agentversion": "1.0",
109 | "appKey": "basic_pcw",
110 | "authCookie": P00001,
111 | "qyid": md5(strRandom(16)),
112 | "task_code": "natural_month_sign",
113 | "timestamp": time_13(),
114 | "typeCode": "point",
115 | "userId": P00003
116 | }
117 | post_date = {
118 | "natural_month_sign": {
119 | "agentType": "1",
120 | "agentversion": "1",
121 | "authCookie": P00001,
122 | "qyid": md5(strRandom(16)),
123 | "taskCode": "iQIYI_mofhr",
124 | "verticalCode": "iQIYI"
125 | }
126 | }
127 | sign = k('|', sign_date, "UKobMjDMsDoScuWOfp6F")
128 | url = f"https://community.iqiyi.com/openApi/task/execute?{k('&', sign_date)}&sign={sign}"
129 | header = {
130 | 'Content-Type': 'application/json'
131 | }
132 | res = requests.post(url, headers=header, data=dumps(post_date)).json()
133 | if res['code'] == 'A00000':
134 | if res['data']['code'] == 'A0000':
135 | quantity = res['data']['data']['rewards'][0]['rewardCount'] # 积分
136 | addgrowthvalue = res['data']['data']['rewards'][0]['rewardCount'] # 新增成长值
137 | continued = res['data']['data']['signDays'] # 签到天数
138 | msg = (f"签到成功:获得积分{quantity} 成长值{addgrowthvalue} 累计签到 {continued} 天")
139 | else:
140 | msg = (f"签到失败:{res['data']['msg']}")
141 | else:
142 | msg = (f"签到失败:{res['message']}")
143 | return msg
144 |
145 |
146 | def websign(cookies_dict):
147 | '''
148 | 网页签到
149 | '''
150 | P00001 = cookies_dict.get('P00001')
151 | P00003 = cookies_dict.get('P00003')
152 | dfp = cookies_dict.get('__dfp').split('@')[0]
153 | web_sign_date = {
154 | "agenttype": "1",
155 | "agentversion": "0",
156 | "appKey": "basic_pca",
157 | "appver": "0",
158 | "authCookie": P00001,
159 | "channelCode": "sign_pcw",
160 | "dfp": dfp,
161 | "scoreType": "1",
162 | "srcplatform": "1",
163 | "typeCode": "point",
164 | "userId": P00003,
165 | "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
166 | "verticalCode": "iQIYI"
167 | }
168 | sign = k('|', web_sign_date, "DO58SzN6ip9nbJ4QkM8H")
169 | url = f"https://community.iqiyi.com/openApi/score/add?{k('&', web_sign_date)}&sign={sign}"
170 | res = requests.get(url).json()
171 | if res['code'] == 'A00000':
172 | if res['data'][0]['code'] == 'A0000':
173 | quantity = res['data'][0]['score'] # 积分
174 | continued = res['data'][0]['continuousValue'] # 累计签到天数
175 | msg = (f"网页端签到成功: 获得积分{quantity} 累计签到{continued}天")
176 | else:
177 | msg = (f"网页端签到失败:{res['data'][0]['message']}")
178 | else:
179 | msg = (f"网页端签到失败:{res['message']}")
180 | # print(msg)
181 | return msg
182 |
183 |
184 |
185 | def get_info(cookies_dict):
186 | '''
187 | 获取用户信息
188 | '''
189 | P00001 = cookies_dict.get('P00001')
190 | url = 'http://serv.vip.iqiyi.com/vipgrowth/query.action'
191 | params = {
192 | "P00001": P00001,
193 | }
194 | res = requests.get(url, params=params)
195 | if res.json()["code"] == "A00000":
196 | try:
197 | res_data = res.json()["data"]
198 | #VIP等级
199 | level = res_data["level"]
200 | #升级需要成长值
201 | distance = res_data["distance"]
202 | #VIP到期时间
203 | deadline = res_data["deadline"]
204 | msg = f"VIP等级:{level}\n升级需成长值:{distance}\nVIP到期时间:{deadline}"
205 | except:
206 | print("获取具体信息失败")
207 | msg = ""
208 | else:
209 | print("获取个人信息失败")
210 | msg = ""
211 | return msg
212 |
213 | def draw(cookies_dict,type):
214 | '''
215 | 查询抽奖次数,抽奖
216 | type: 0 查询次数;1 抽奖
217 | '''
218 | P00001 = cookies_dict.get('P00001')
219 | P00003 = cookies_dict.get('P00003')
220 | url = "https://iface2.iqiyi.com/aggregate/3.0/lottery_activity"
221 | params = {
222 | "lottery_chance": 1,
223 | "app_k": "0",
224 | "app_v": "0",
225 | "platform_id": 10,
226 | "dev_os": "2.0.0",
227 | "dev_ua": "COL-AL10",
228 | "net_sts": 1,
229 | "qyid": "2655b332a116d2247fac3dd66a5285011102",
230 | "psp_uid": P00003,
231 | "psp_cki": P00001,
232 | "psp_status": 3,
233 | "secure_v": 1,
234 | "secure_p": "0",
235 | "req_sn": round(time.time()*1000)
236 | }
237 | # 抽奖删除 lottery_chance 参数
238 | if type == 1:
239 | del params["lottery_chance"]
240 | res = requests.get(url, params=params)
241 |
242 | if not res.json().get('code'):
243 | chance = int(res.json().get('daysurpluschance'))
244 | msg = res.json().get("awardName")
245 | return {"status": "成功", "msg": msg, "chance": chance}
246 | else:
247 | try:
248 | msg = res.json().get("kv", {}).get("msg")
249 | except:
250 | msg = res.json()["errorReason"]
251 | return {"status": "失败", "msg": msg, "chance": 0}
252 |
253 | def transform(infos,cookie):
254 | '''
255 | 转换完整的COOKIE,并执行签到等功能
256 | '''
257 | try:
258 | cookies = cookie.replace(' ','')
259 | dct = {}
260 | lst = cookies.split(';')
261 | for i in lst:
262 | name = i.split('=')[0]
263 | value = i.split('=')[1]
264 | dct[name] = value
265 | except:
266 | msg0 = "输入的cookie有问题,请重新获取"
267 | print(msg0)
268 | push_info(infos,msg0)
269 | return
270 | #判断是否有要的值
271 | P00001 = dct.get('P00001')
272 | P00003 = dct.get('P00003')
273 | if P00001 == None:
274 | msg0 = "输入的cookie有问题(P00001),请重新获取"
275 | print(msg0)
276 | push_info(infos,msg0)
277 | return
278 | if P00003 == None:
279 | msg0 = "输入的cookie有问题(P00003),请重新获取"
280 | print(msg0)
281 | push_info(infos,msg0)
282 | return
283 | return dct
284 |
285 | # 随机字符串 a-z A-Z 0-9
286 | def strRandom(num):
287 | return ''.join(random.sample(string.ascii_letters + string.digits, num))
288 |
289 |
290 | # md5加密
291 | def md5(data):
292 | return hashlib.md5(bytes(data, encoding='utf-8')).hexdigest()
293 |
294 |
295 | # 13位时间戳
296 | def time_13():
297 | return round(time.time() * 1000)
298 |
299 |
300 | # 拼接 连接符 数据 特殊符号(可不填)
301 | def k(c, t, e=None):
302 | buf = []
303 | for key, value in t.items():
304 | buf.append('='.join([key, str(value)]))
305 | if e != None:
306 | buf.append(e)
307 | return (md5(c.join(buf)))
308 | return (c.join(buf))
309 |
310 | if __name__=="__main__":
311 | print('='*40)
312 | main(infos)
313 | print('='*40)
314 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | requests == 2.24.0
2 | PyExecJS == 1.5.1
3 |
--------------------------------------------------------------------------------
/腾讯云部署.md:
--------------------------------------------------------------------------------
1 | 部署
2 | ---
3 |
4 | ### 下载仓库
5 |
6 | ```
7 | git clone https://github.com/ioutime/Aiqiyi_Sign.git
8 | ```
9 |
10 | ### 创建云函数
11 |
12 | 1. 打开[腾讯云官网](https://cloud.tencent.com/),登录,在产品中找到云函数入口
13 |
14 | 2. 进入**云函数**管理控制台,在函数服务中新建云函数,基础设置:
15 |
16 | 创建方式: 选择自定义
17 |
18 | 基础配置默认
19 |
20 | 函数代码:
21 |
22 | 提交方式选择:本地文件夹上传
23 |
24 | 上传:选择你刚刚下载下来的代码(Aiqiyi_Sign文件夹)
25 |
26 |
27 |
28 | 3. 将高级配置中的环境配置-内存改为 64MB,执行超时时间改为 900,其他默认不改动,点击创建
29 |
30 | 注:执行时间一定要改,默认的可能会超时
31 |
32 | ### 配置云函数
33 |
34 | 1. 创建完成后进入函数管理页面,在在线 IDE 中打开一个终端:
35 |
36 | 
37 |
38 | 2. 在终端中执行如下指令安装依赖:
39 |
40 | ```
41 | cd src/ && pip3 install -r requirements.txt -t .
42 | ```
43 |
44 | 3. 依赖安装完毕之后可以看到左侧目录项多出了很多文件夹,说明依赖安装成功
45 |
46 | 4. 修改*index.py*文件,将其中的`infos`变量各值修改为脚本所需参数(参数说明见 README),除**cookie**外其余参数可选填,**不需要的参数请不要取消注释!**
47 |
48 |
49 |
50 | 5. 所有项目修改完成后,点击部署:
51 |
52 |
53 |
54 | ### 测试
55 |
56 | 部署成功即可测试,测试时间可能有些长(几分钟),如结果没有问题,可以进行下一步,否则进行错误排查
57 |
58 |
59 |
60 | ### 配置触发器
61 |
62 | 在触发管理-创建触发器中按下图填写(定时任务名称使用默认即可):
63 |
64 | 
65 |
66 | 其中触发周期可以自定义,选择自定义出发周期可以使用 Cron 表达式创建,最后点击提交即可。
67 |
68 |
--------------------------------------------------------------------------------