来源博客:【Harryの心阁】
使用python+GitHub实现CSDN的自动签到,并用钉钉通知
仓库地址
- 【地址】
- 下面代码为部分代码,去仓库获取完整代码
- 网易云音乐签到
python 无抽奖,只有签到
import requests
import os #加入环境变量
if __name__ == '__main__':
COOKIE = os.environ["COOKIE"] # 点击签到后在控制台从heard里面找到COOKIE
USERNAME = os.environ["USERNAME"] # 这里是’CSDN‘的用户名,链接后面的
DDSECRET = os.environ["DDSECRET"] # 钉钉通知加签
DDPOSTURL = os.environ["DDPOSTURL"] # 钉钉通知机器人的链接地址
headers = {
'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'content-length': '246',
'content-type': 'application/json;charset=UTF-8',
'cookie': COOKIE,
'origin': 'https://i.csdn.net',
'referer': 'https://i.csdn.net/',
'sec-ch-ua': '"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
data = {
'ip': '',
'platform': 'pc-my',
'product': 'pc',
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
'username': USERNAME,
'uuid': '10_10212595300-1608558661367-119405',
}
r = requests.post("https://me.csdn.net/api/LuckyDraw_v2/signIn",headers=headers,data=data).content.decode("unicode_escape")
print(r) # 输出结果
import json
timedata = json.loads(r)
# 将json转化为数组形式
print(timedata)
message = timedata['message'] # 返回签到的结果
# isSign = timedata['data']['signed']
# print(isSign) #返回签到逻辑值
t = timedata['data']['msg']
print(t) # 返回签到结果
# 钉钉通知模块
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests, json
timestamp = str(round(time.time() * 1000))
secret = DDSECRET
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 导入依赖库
headers = {'Content-Type': 'application/json'} # 定义数据类型
# 截至到×tamp之前
webhook = DDPOSTURL + timestamp + "&sign=" + sign
# 定义要发送的数据
# "at": {"atMobiles": "['"+ mobile + "']"
if message == '成功':
data = {
#定义内容
"msgtype": "markdown",
"markdown": {
"title":"CSDN签到通知",
"text": ">CSDN 签到已成功\n - 签到详情:" + t + "\n-----⭐项目地址:[https://github.com/Rr210/qiandao](https://github.com/Rr210/qiandao)"
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) #发送post请求
print(res.text)
else:
data = {
# 定义内容
"msgtype": "markdown",
"markdown": {
"title": "CSDN签到通知",
"text": ">CSDN 签到失败\n - 签到详情:"+ timedata + "\n项目地址:[https://github.com/Rr210/qiandao](https://github.com/Rr210/qiandao)"
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) # 发送post请求
print(res.text)
python 加入自动抽奖操作
import requests
import os #加入环境变量
if __name__ == '__main__':
COOKIE = os.environ["COOKIE"] # 点击签到后在控制台从heard里面找到COOKIE
USERNAME = os.environ["USERNAME"] # 这里是’CSDN‘的用户名,链接后面的
DDSECRET = os.environ["DDSECRET"] # 钉钉通知加签
DDPOSTURL = os.environ["DDPOSTURL"] # 钉钉通知机器人的链接地址
LUCKYCOOKIE = os.environ["LUCKYCOOKIE"] # 点击签到后在控制台从heard里面找到COOKIE
headers = {
'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'content-length': '246',
'content-type': 'application/json;charset=UTF-8',
'cookie': COOKIE,
'origin': 'https://i.csdn.net',
'referer': 'https://i.csdn.net/',
'sec-ch-ua': '"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
data = {
'ip': '',
'platform': 'pc-my',
'product': 'pc',
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
'username': USERNAME,
'uuid': '10_10212595300-1608558661367-119405',
}
r = requests.post("https://me.csdn.net/api/LuckyDraw_v2/signIn",headers=headers,data=data).content.decode("unicode_escape")
print(r) # 输出结果
import json
timedata = json.loads(r)
# 将json转化为数组形式
print(timedata)
message = timedata['message'] # 返回签到的结果
isSign = timedata['data']['isSigned']
# print(isSign) #返回签到逻辑值
t = timedata['data']['msg']
print(t) # 返回签到结果
# 返回签到天数,如果到了5天执行csdnlucky.py
# 钉钉通知模块
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests, json
timestamp = str(round(time.time() * 1000))
secret = DDSECRET
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 导入依赖库
headers = {'Content-Type': 'application/json'} # 定义数据类型
# 截至到×tamp之前
webhook = DDPOSTURL + timestamp + "&sign=" + sign
# 定义要发送的数据
# "at": {"atMobiles": "['"+ mobile + "']"
if message == '成功' and isSign:
data = {
#定义内容
"msgtype": "markdown",
"markdown": {
"title":"CSDN签到通知",
"text": ">您已重复签到,请不要重复操作\n - 签到详情:\n" + t
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) #发送post请求
print(res.text)
# from csdnlucky import option # 测试时使用
# print(option)
else:
# 返回签到天数,如果到了5天执行csdnlucky.py
signdays = timedata['data']['star']
# print(signdays)
# 返回抽奖次数
draws = timedata['data']['drawTimes']
# 加入抽奖判断 执行抽奖
# 加入签到总天数 condays
condays = timedata['data']['serialCount']
if signdays == 5:
import os
strs = ('python csdnlucky.py') # python命令 + csdnlucky.py
p = os.system(str)
# print(p) # 打印执行结果 0表示 success , 1表示 fail
from csdnlucky import option
data = {
# 定义内容
"msgtype": "markdown",
"markdown": {
"title": "CSDN签到通知",
"text": ">CSDN 签到已成功\n - **签到详情:**" + t + "\n" + "\n**您的签到天数为**:"+str(signdays)+"天\n" + "\n**您签到获得star目前为**: "+str(signdays)+"个⭐\n" + "\n**您的抽奖次数为**:" + str(draws) + "次\n" + "\n**抽奖详情为**:" + option + "\n**您的签到总次数为**:"+str(condays)+"天\n" + "\n-----⭐**项目地址**:[https://github.com/Rr210/qiandao](https://github.com/Rr210/qiandao)"
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) # 发送post请求
print(res.text)
else:
data = {
# 定义内容
"msgtype": "markdown",
"markdown": {
"title": "CSDN签到通知",
"text": ">CSDN 签到已成功\n - **签到详情:**" + t + "\n" + "\n**您的签到天数为**:"+str(signdays)+"天\n" + "\n**您签到获得star目前为**: "+str(signdays)+"个⭐\n" + "\n**您的抽奖次数为**:" + str(draws) + "次\n" + "\n**您的签到总次数为**:"+str(condays)+"天\n" + "\n-----⭐**项目地址**:[https://github.com/Rr210/qiandao](https://github.com/Rr210/qiandao)"
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) # 发送post请求
print(res.text)
使用方法
- 将以上代码中
headers
和data
替换成你自己的 - 点击这里【签到地址】,打开浏览器调式工具
console
,F12
或者ctrl+shift+i
,点击network
后点击签到控制台会生成新的文件,点击后获得此时的header
和data
,ctrl+c
复制下来 - 转换成字典形式,转换方法【查看方法】,当然嫌麻烦可以手动修改成字典形式
Github配置
- 将你的COOKIE和USERNAME 保存替换成以上样式,记得保存好COOKIE,将COOKIE使用环境变量放到GitHub仓库的secrets里面,如图所示
- 修改代码第15行,第31行,第56行,第65行 将自己的信息修改
- 各个参数介绍
Secrets | 参数介绍 |
---|---|
COOKIE | 这个时签到csdn所需的COOKIE,识别用户身份必须获得 |
USERNAME | 你的CSDN的用户名 |
DDPOSTURL | 钉钉群机器人的webhook地址,参考钉钉官方文档 |
DDSECRET | 设置钉钉机器人时的加签密钥 |
LUCKYCOOLKIE | 执行抽奖时所需的COOKIR,获取方法与签到的cookie相同 |
WYYCOOKIE | 获取方法相同 |
WYYCSRFTOKEN | 在控制台获取 csrf_token 的值 |
- 设置完成后可以手动执行或者点击
star
⭐ - 如图已设置成功
- 通知成功
网易云音乐签到
- 获取cookie与以上方法一致
设置定时
- 将
.github
文件下的workflows
中的csdn.yml
中的corn
的属性值修改 - 注意时差mg比我们地区快8个小时
参考
- 【参考大佬的文章】
业余大佬勿喷