本程序仅适用于身体健康且活动范围稳定人员使用,请如实填写相关信息。发现身体不适请停止使用并尽早上报!
前因后果什么的这次就不讲了,天天被要求打卡,人都疲倦了,偶尔忘了就会被点名。。。
本文在http://blog.jboss.xyz/archives/179基础上改进,新增多人**,结果数据置于服务器展示。
建议有条件的同学在服务器上部署使用。
在部署之前先获取易统计的ncov-access-token
登录 —> https://www.ioteams.com/ncov
一定要保管好这个token,注意屏幕周围有没有眼睛盯着,小心被其他人看到,不然别人就帮你把卡给打了。
复制以下代码保存为ncov.py
。
import requests, json, time
class Ncov:
def __init__(self, token):
self.headers = {
"Content-Type": "application/json;charset=utf-8",
"ncov-access-token": token
}
self.data = self.__get_data()
self.code_id = self.data["address"].pop("_id", None)
self.__clock_in()
# https://www.ioteams.com/ncov/api/companies/default/question 参数
# https://www.ioteams.com/ncov/api/users/companies/switch 个人信息
# https://www.ioteams.com/ncov/api/users/last-report 历史情况
def __get_data(self):
last_report = 'https://www.ioteams.com/ncov/api/users/last-report'
response = requests.get(last_report, headers=self.headers)
req = response.json()["data"]["data"]
useless = ["_id", "user", "company", "created_at", "updated_at", "__v"]
for i in useless:
req.pop(i, None)
return req
def __clock_in(self):
id = self.__get_daily_code()
url = 'https://www.ioteams.com/ncov/api/users/dailyReports/{}'
requests.put(url.format(id), headers=self.headers, data=json.dumps(self.data))
def __get_daily_code(self):
link = 'https://www.ioteams.com/ncov/api/users/dailyReport'
response = requests.post(link, headers=self.headers, data=json.dumps(self.data))
req = response.json()
try:
self.code_id = req['data']['data']['_id']
except KeyError:
print(req['msg'], end=",")
except Exception as E:
print(E, "其他错误,请登录后检查是否成功打卡 https://www.ioteams.com/ncov/ ", end=",")
else:
print(req['msg'], end=",")
finally:
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
return self.code_id
if __name__ == '__main__':
user = {
"ea******************f5e5": {"name": "**豪"},
"7a******************e5e5": {"name": "**琨"}}
for key in user:
print(user[key]["name"], end=",")
Ncov(key)
使用者只需修改user
变量即可,通过测试得到的输出信息为
**豪,您今天已经创建过日报,无法再次创建,2020-05-30 13:55:33
**琨,您今天已经创建过日报,无法再次创建,2020-05-30 13:55:34
这个日报的API貌似一天只能创建一次,再次创建就会返回403
了,所以如果当前已经签到过了,接口返回的信息会是
{'code': 403, 'msg': '您今天已经创建过日报,无法再次创建', 'errors': '您今天已经创建过日报,无法再次创建'}
否则msg
则应该是Success
。
测试没问题之后可以把py文件放到服务器中去,设置定时任务,自动执行。
crontab -e
# 新增定时任务,每天凌晨两点半打卡
30 2 * * * python3 ncov.py >> ncov.csv
以上定时任务含义为在服务器时间的每天凌晨两点半运行程序,并把print
的信息输出到ncov.csv
文件。
如果你的服务器上有web服务器和PHP的话,可以在工作目录建立一个名为ncov
的子目录,并且把之前的ncov.csv
链接到该目录下。
ln ~/ncov.csv /var/www/html/ncov/ncov.csv
然后其中新建一个index.php
,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>易统计-打卡记录</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:type" content="website">
<meta name="title" content="易统计-打卡记录">
<style type="text/css">
table
{
border-collapse: collapse;
width: 80%;
margin: 0 auto;
font-size: 15px;
text-align: center;
}
</style>
</head>
<body>
<?php
function jj_readcsv($filename, $header=false) {
$handle = fopen($filename, "r");
echo '<table>';
if ($header) {
$csvcontents = fgetcsv($handle);
echo '<tr>';
foreach ($csvcontents as $headercolumn) {
echo "<th>$headercolumn</th>";
}
echo '</tr>';
}
while ($csvcontents = fgetcsv($handle)) {
echo '<tr>';
foreach ($csvcontents as $column) {
echo "<td>$column</td>";
}
echo '</tr>';
}
echo '</table>';
fclose($handle);
}
jj_readcsv('ncov.csv',true);
?>
</body>
</html>
本教程至此结束,如果其他诸如apache和PHP的配置没有问题,那么当你访问https://[Your Domain]/ncov的时候就能看见PY程序每天打卡的信息了。
附上我的截图,就不放链接地址了,机子太小以防被打。
参考链接
http://blog.jboss.xyz/archives/179
Dynamically display a CSV file as an HTML table on a web page