本程序仅适用于身体健康且活动范围稳定人员使用,请如实填写相关信息。发现身体不适请停止使用并尽早上报!

前因后果什么的这次就不讲了,天天被要求打卡,人都疲倦了,偶尔忘了就会被点名。。。

本文在http://blog.jboss.xyz/archives/179基础上改进,新增多人**,结果数据置于服务器展示。

建议有条件的同学在服务器上部署使用。

在部署之前先获取易统计的ncov-access-token

登录 —> https://www.ioteams.com/ncov

一定要保管好这个token,注意屏幕周围有没有眼睛盯着,小心被其他人看到,不然别人就帮你把卡给打了。

ncov-access-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程序每天打卡的信息了。

附上我的截图,就不放链接地址了,机子太小以防被打。

image

参考链接

http://blog.jboss.xyz/archives/179
Dynamically display a CSV file as an HTML table on a web page