修正hdsky,新增手动签到

This commit is contained in:
sftang
2022-03-10 09:02:41 +08:00
parent f5dcab4126
commit 5bb701e5a2
8 changed files with 154 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
# pull official base image
FROM a76yyyy/ddddocr:latest
FROM python:3.9-alpine
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
@@ -10,13 +10,20 @@ ENV APP_HOME=/home/data/www
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk update
RUN apk add --update-cache nginx tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && apk del tzdata && \
rm -rf /var/cache/apk/*
COPY requirements_alpine.txt requirements.txt
COPY requirements.txt .
#将需要的包体全部打包成直接安装的包whl
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/vhost.conf /etc/nginx/conf.d/vhost.conf
COPY conf/supervisord.conf /etc/supervisord.conf
COPY start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

43
Dockerfile.alpine.old Normal file
View File

@@ -0,0 +1,43 @@
# pull official base image
FROM a76yyyy/ddddocr:latest
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# create the appropriate directories
ENV APP_HOME=/home/data/www
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY requirements_alpine.txt requirements.txt
#将需要的包体全部打包成直接安装的包whl
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
COPY start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
# copy project
COPY . $APP_HOME
RUN ln -s /home/data/www/db /db && \
ln -s /home/data/www/logs /logs && \
ln -s /home/data/www/backups /backups && \
rm -rf conf && \
rm -rf docker-compose.yml && \
rm -rf Dockerfile && \
rm -rf README.md && \
rm -rf requirements.txt && \
rm -rf db/* logs/* backups/* \
rm -rf .git*
EXPOSE 80
#apt-get安装路径
#CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
#pip安装路径
#CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"]
CMD ["/usr/local/bin/start.sh"]

View File

@@ -50,7 +50,10 @@ def signIngress(site_name, site_name_cn, site_url, site_cookie):
elif site_name == 'open':
flag, data = opencd(site_name, site_name_cn, site_url, site_cookie)
elif site_name == 'hdsky':
flag, data = hdsky(site_name, site_name_cn, site_url, site_cookie)
try:
flag, data = hdsky(site_name, site_name_cn, site_url, site_cookie)
except:
return False,'数据异常'
elif site_name == 'haidan':
flag, data = haidan(site_name, site_name_cn, site_url, site_cookie)
elif site_name == 'ptsbao':
@@ -963,14 +966,13 @@ def opencd(site_name, site_name_cn, site_url, site_cookie):
logger.info('--------------%s开始签到----------------' % site_name)
status = False
ocr = ddddocr.DdddOcr(show_ad=False,old=True)
try:
#验证码签到执行3次验证
for i in range(3):
#验证成功退出
if status or i > 2:
break
if i > 2:
return False, "%s(%s) 错误:连续3次验证码失败" % (site_name,site_name_cn)
response = requests.get("https://open.cd/plugin_sign-in.php", headers=headers, timeout=10)
if response.status_code == 200:
@@ -1009,11 +1011,10 @@ def opencd(site_name, site_name_cn, site_url, site_cookie):
signindays = result['signindays']
integral = result['integral']
msg = "%s(%s) 连续签到%s,本次获得%s" % (site_name,site_name_cn, signindays,integral)
status = True
return True, msg
else:
msg = "%s(%s) 签到失败:%s" % (site_name,site_name_cn, result['msg'])
if status or i > 2:
if i > 2:
return False, msg
else:
@@ -1054,16 +1055,18 @@ def hdsky(site_name, site_name_cn, site_url, site_cookie):
image_code_name = os.path.join(settings.TMP_LOG_DIR,'hdsky_code.png')
logger.info('--------------%s开始签到----------------' % site_name)
status = False
ocr = ddddocr.DdddOcr(show_ad=False,old=True)
try:
#验证码签到执行3次验证
for i in range(3):
#验证成功退出
if status or i > 2:
break
if i > 2:
print('i--------->',i)
return False, "%s(%s) 错误:连续3次验证码失败" % (site_name,site_name_cn)
response = requests.post(sign_url, headers=headers, data=data, timeout=10)
logger.info(response.text)
if response.status_code == 200:
result = json.loads(response.text)
if result['success']:
@@ -1085,22 +1088,31 @@ def hdsky(site_name, site_name_cn, site_url, site_cookie):
'imagestring': data_ocr
}
response = requests.post("https://hdsky.me/showup.php", headers=headers, data=data, timeout=10)
logger.info(response.text)
try:
result = json.loads(response.text)
if result['success']:
msg = "%s(%s) 连续签到%s" % (site_name,site_name_cn, result['message'])
status = True
return True, msg
else:
if 'date_unmatch' == result['message']:
msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn)
status = True
return True, msg
#false的情况存在无message
if 'message' in result:
if 'date_unmatch' == result['message']:
msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn)
return True, msg
else:
#invalid_imagehash说明数据验证码错误
msg = "%s(%s) 错误:%s" % (site_name,site_name_cn, result['message'])
#超过2次退出
if i > 2:
return False,msg
else:
#invalid_imagehash说明数据验证码错误
msg = "%s(%s) 错误:%s" % (site_name,site_name_cn, result['message'])
if status or i > 2:
return False,msg
#无消息目前确认为已经签到,其它后续在确认
msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn)
return True, msg
except:
msg = "%s(%s) 登录网站失败,cookie已经失效" % (site_name,site_name_cn)
return False, msg

View File

@@ -14,6 +14,7 @@ urlpatterns = [
path('backup', views_request.backup),
#补签
path('signagain', views_request.signAgain),
path('signcheck', views_request.signCheck),
]

View File

@@ -110,3 +110,39 @@ def signAgain(request):
response_data={"code":0,"msg":data }
return JsonResponse(response_data)
#==================
@login_required
def signCheck(request):
"""
校验
"""
if request.method == "POST":
action = request.POST.get('action')
_id = request.POST.get('id','')
if action != 'check' or _id == "":
response_data={"code":0,"msg":"未知操作" }
return JsonResponse(response_data)
#获取配置的站点信息
site_info = SiteInfo.objects.get(id=_id)
site_name = site_info.siteconfig_name
site_cookie = site_info.cookie
#获取站点配置信息
site_config = SiteConfig.objects.get(name=site_name)
site_url = site_config.index_url
site_name_cn = site_config.name_cn
#统一签到入口
flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie)
#print(site_name,data)
if flag:
response_data={"code":1,"msg":data }
else:
response_data={"code":0,"msg":data }
return JsonResponse(response_data)

View File

@@ -46,13 +46,14 @@ def sign(crontab_id):
#'cookie': site_cookie
#}
#统一签到入口
flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie)
flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie)
#print(site_name,data)
try:
Log.objects.create(name = '签到',type_id = 1000, crontab_id = crontab_id, site_name=site_name, message = data, status = flag)
except:
logger.error("%s(%s)数据返回出错" % (site_name, site_name_cn))
#防止返回数据错误导致异常退出
continue
send_data.append(data)

View File

@@ -36,6 +36,7 @@
<script type="text/html" id="siteinfoTableBar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="checkSign">验证和签到</a>
</script>
@@ -112,7 +113,35 @@
}
});
});
}
}else if(layEvent === 'checkSign'){
//var csrftoken = getCookie('csrftoken');
layer.confirm('确定校验此配置 ' + data.siteconfig_name + '?',{icon: 0, title: '提示', shadeClose: true},
function (i) {
layer.close(i);
layer.load(2);
$.ajax({
url : "common/signcheck",
type: 'POST',
dataType : "json",
data: {'id':data.id, 'action':'check',csrfmiddlewaretoken: '{{ csrf_token }}' },
// beforeSend: function(request) {
// //django需要csrf验证,Forbidden (CSRF cookie not set.):
// request.setRequestHeader("X-CSRFToken", csrftoken);
// },
success : function(d) {
layer.closeAll('loading');
if (d.code == 1) {
table.reload('siteinfoTable', {});
layer.msg(d.msg, {icon: 1});
} else {
layer.msg(d.msg, {icon: 2});
}
}
});
});
}
});
//显示表单弹窗

View File

@@ -1,3 +1,3 @@
#!/bin/bash
docker build -t pthelper:v1.0 .
docker build -f Dockerfile.alpine -t pthelper:v1.0.3 .