腾讯云函数实现机场每日自动签到领流量

项目地址

icrons/ssp-sign

腾讯云函数机场签到、sspanel自动签到脚本,支持各种推送通知。

使用方法

  1. 登录腾讯云函数,选择函数服务

    函数服务
  2. 选择区域中国香港,点击新建

    区域
  3. 选择自定义创建,函数类型选择事件函数,函数名称自定义编辑,地域选择中国香港,避免机场网站被墙,运行环境选择Python3.6

    自定义创建
  4. 编辑器内粘贴main.py内的代码,修改相关代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class SspanelQd(object):
def __init__(self):
# 机场地址
self.base_url = 'http://****'
# 登录信息
self.email = '*******@qq.com'
self.password = 'x******'
# 酷推qq推送
self.ktkey = ''
# ServerTurbo推送
self.SendKey = ''
# Qmsg私聊推送
self.QmsgKey = ''
粘贴代码
  1. 高级配置中,执行超时时间输入900

    执行超时时间
  2. 触发器配置中,创建触发器选择自定义创建,触发周期选择自定义触发周期,Cron表达式输入0 0 10 * * * *,表示在每天上午10点触发

    创建触发器
  3. 最后选择完成

    选择完成

Python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# -*- coding: utf-8 -*-
"""
@Time : 2021/3/21 12:01
@Auth : Icrons
@IDE :PyCharm

"""
import requests
import re

requests.packages.urllib3.disable_warnings()


class SspanelQd(object):
def __init__(self):
# 机场地址
self.base_url = 'http://****'
# 登录信息
self.email = '*******@qq.com'
self.password = 'x******'
# 酷推qq推送
self.ktkey = ''
# ServerTurbo推送
self.SendKey = ''
# Qmsg私聊推送
self.QmsgKey = ''

def checkin(self):
email = self.email.split('@')
email = email[0] + '%40' + email[1]
password = self.password
try:
session = requests.session()
session.get(self.base_url, verify=False)

login_url = self.base_url + '/auth/login'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}

post_data = 'email=' + email + '&passwd=' + password + '&code='
post_data = post_data.encode()
session.post(login_url, post_data, headers=headers, verify=False)

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Referer': self.base_url + '/user'
}

response = session.post(self.base_url + '/user/checkin', headers=headers, verify=False)
# print(response.text)
msg = (response.json()).get('msg')
print(msg)
except:
return False

info_url = self.base_url + '/user'
response = session.get(info_url, verify=False)
"""
以下只适配了editXY主题
"""
try:
level = re.findall(r'\["Class", "(.*?)"],', response.text)[0]
day = re.findall(r'\["Class_Expire", "(.*)"],', response.text)[0]
rest = re.findall(r'\["Unused_Traffic", "(.*?)"]', response.text)[0]
msg = "- 今日签到信息:" + str(msg) + "\n- 用户等级:" + str(level) + "\n- 到期时间:" + str(day) + "\n- 剩余流量:" + str(rest)
print(msg)
return msg
except:
return msg

# Qmsg私聊推送
def Qmsg_send(self, msg):
if self.QmsgKey == '':
return
qmsg_url = 'https://qmsg.zendee.cn/send/' + str(self.QmsgKey)
data = {
'msg': msg,
}
requests.post(qmsg_url, data=data)

# Server酱推送
def server_send(self, msg):
if self.SendKey == '':
return
server_url = "https://sctapi.ftqq.com/" + str(self.SendKey) + ".send"
data = {
'text': "今日的流量白嫖到啦!",
'desp': msg
}
requests.post(server_url, data=data)

# 酷推QQ推送
def kt_send(self, msg):
if self.ktkey == '':
return
kt_url = 'https://push.xuthus.cc/send/' + str(self.ktkey)
data = ('签到完成,点击查看详细信息~\n' + str(msg)).encode("utf-8")
requests.post(kt_url, data=data)

def main(self):
msg = self.checkin()
if msg == False:
print("网址不正确或网站禁止访问。")
else:
self.server_send(msg)
self.kt_send(msg)
self.serverTurbo_send(msg)
self.Qmsg_send(msg)


# 云函数入口
def main_handler(event, context):
run = SspanelQd()
run.main()


if __name__ == '__main__':
run = SspanelQd()
run.main()

Cron 表达式

创建定时触发器时,用户能够使用标准的 Cron 表达式的形式自定义何时触发。定时触发器现已推出秒级触发功能,为了兼容老的定时触发器,因此 Cron 表达式有两种写法。

Cron 表达式语法一(推荐)

Cron 表达式有七个必需字段,按空格分隔。

第一位 第二位 第三位 第四位 第五位 第六位 第七位
分钟 小时 星期

其中,每个字段都有相应的取值范围:

字段 通配符
0 - 59的整数 , - * /
分钟 0 - 59的整数 , - * /
小时 0 - 23的整数 , - * /
1 - 31的整数(需要考虑月的天数) , - * /
1 - 12的整数或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC , - * /
星期 0 - 6的整数或 SUN,MON,TUE,WED,THU,FRI,SAT。其中0指星期日,1指星期一,以此类推 , - * /
1970 - 2099的整数 , - * /

Cron 表达式语法二(不推荐)

Cron 表达式有五个必需字段,按空格分隔。

第一位 第二位 第三位 第四位 第五位
分钟 小时 星期

其中,每个字段都有相应的取值范围:

字段 通配符
分钟 0 - 59的整数 , - * /
小时 0 - 23的整数 , - * /
1 - 31的整数(需要考虑月的天数) , - * /
1 - 12的整数或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC , - * /
星期 0 - 6的整数或 SUN,MON,TUE,WED,THU,FRI,SAT。其中0指星期日,1指星期一,以此类推 , - * /

通配符

通配符 含义
,(逗号) 代表取用逗号隔开的字符的并集。例如:在“小时”字段中 1,2,3 表示1点、2点和3点
-(破折号) 包含指定范围的所有值。例如:在“日”字段中,1 - 15包含指定月份的1号到15号
* (星号) 表示所有值。在“小时”字段中,* 表示每个小时
/ (正斜杠) 指定增量。在“分钟”字段中,输入1/10以指定从第一分钟开始的每隔十分钟重复。例如,第11分钟、第21分钟和第31分钟,以此类推

注意事项

在 Cron 表达式中的“日”和“星期”字段同时指定值时,两者为“或”关系,即两者的条件分别均生效。

示例

下面展示了一些 Cron 表达式和相关含义的示例:

表达式 相关含义
*/5 * * * * * * 表示每5秒触发一次
0 15 10 1 * * * 表示在每月的1日的上午10:15触发
0 15 10 * * MON-FRI * 表示在周一到周五每天上午10:15触发
0 0 10,14,16 * * * * 表示在每天上午10点,下午2点,4点触发
0 */30 9-17 * * * * 表示在每天上午9点到下午5点每半小时触发
0 0 12 * * WED * 表示在每个星期三中午12点触发