签到检测程序,解析github提供的api内的json,解决了服务器和本地时间不同步的问题(时差+8H),实现按日期更新当前签到表。下一步是从api获取organization的信息,求出未签到的成员ID。(女朋友在写啦~)

 #coding=utf-8
import urllib
import re
import json
import time # 记录签到情况的set
check = set() # 日期
class Date:
year = 0
month = 0
day = 0
hour = 0
minute = 0
second = 0
def __init__(self, year, month, day, hour, minute, second, cflag):
# 处理本地与服务器所在地的时差问题 +8h
if cflag == 1:
common = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
leap = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
hour += 8
if hour > 24:
hour -= 24
day += 1
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
if day > leap[month]:
day -= leap[month]
month += 1
else:
if day > common[month]:
day -= common[month]
month += 1
if month > 12:
year += 1
month -= 12
self.year = year
self.month = month
self.day = day
self.hour = hour
self.minute = minute
self.second = second # 存储用户信息
class User:
name = ''
date = Date(0, 0, 0, 0, 0, 0, 0)
def __init__(self, name, date):
self.name = name
self.date = date # GitHub Api URL
gitHubCommitsApi = 'https://api.github.com/repos/aplusb/Let-the-bass-kick/commits' # 获取json
def getJson(url):
page = urllib.urlopen(url)
html = page.read()
return html # 保存json, commits.json
def saveJSON(html, fileNeme):
fileWrite = open(fileNeme, 'w')
fileWrite.write(html)
fileWrite.close() # 处理json
def processJSON(commits):
users = []
pr = json.loads(commits)
for each in pr:
name = each["commit"]["author"]["name"]
date = each["commit"]["author"]["date"]
yy = int(date[:4])
mm = int(date[5:7])
dd = int(date[8:10])
hh = int(date[11:13])
mi = int(date[14:16])
ss = int(date[17:19])
users.append(User(name, Date(yy, mm, dd, hh, mi, ss, 1)))
return users # 获取当天信息
def getToday():
ISOTIMEFORMAT = '%Y-%m-%dT%XZ'
curDate = time.strftime(ISOTIMEFORMAT, time.localtime())
yy = int(curDate[:4])
mm = int(curDate[5:7])
dd = int(curDate[8:10])
hh = int(curDate[11:13])
mi = int(curDate[14:16])
ss = int(curDate[17:19])
return Date(yy, mm, dd, hh, mi, ss, 0) # 统计当天的commit情况
def checkTimes(users):
today = getToday()
for each in users:
if today.year == each.date.year and today.month == each.date.month and today.day == each.date.day:
check.add(each.name) # 展示当天签到情况
def show(users, check):
for each in users:
print '%-20s %s-%s-%s %s:%s:%s' % (each.name, str(each.date.year).zfill(4),
str(each.date.month).zfill(2), str(each.date.day).zfill(2),
str(each.date.hour).zfill(2), str(each.date.minute).zfill(2),
str(each.date.second).zfill(2))
print '----------------------Today checked----------------------'
for each in check:
print '%s' % each # 读取之前的签到情况
def readStatus():
fileRead = open('checked.txt', 'r')
ISOTIMEFORMAT = '%Y-%m-%dT%XZ'
today = time.strftime(ISOTIMEFORMAT, time.localtime())
curDate = fileRead.readline()
done = 0
# 初始化新文件
if curDate == '':
return
# 判断是不是today保存过的签到情况,如果是则读取信息
if int(curDate[:4]) == int(today[:4]) and int(curDate[5:7]) == int(today[5:7]) and int(curDate[8:10]) == int(today[8:10]):
while not done:
entry = fileRead.readline()
# 去空行
entry = entry.strip('\n')
if entry != '':
check.add(entry)
else:
done = 1
fileRead.close() # 保存统计结果
def saveStatus():
fileWrite = open('checked.txt', 'w')
# 打时间戳
ISOTIMEFORMAT = '%Y-%m-%dT%XZ'
today = time.strftime(ISOTIMEFORMAT, time.localtime())
fileWrite.write(today)
fileWrite.write('\n')
# 保存信息
for each in check:
fileWrite.write(each)
fileWrite.write('\n')
fileWrite.close() # 保存当前仍未签到的ID def __main__():
commits = getJson(gitHubCommitsApi)
fileName = 'commits.json'
readStatus()
saveJSON(commits, fileName)
users = processJSON(commits)
checkTimes(users)
saveStatus()
show(users, check) __main__()

[每天一道A+B]签到检测程序的更多相关文章

  1. 利用SHELL脚本实现文件完整性检测程序(1.2版更新)

    一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...

  2. delphi 一个自动控制机的硅控板检测程序,用多线程和API,没有用控件,少做改动就能用 用485开发

    一个自动控制机的硅控板检测程序,用多线程和API,没有用控件,少做改动就能用Unit CommThread; Interface Uses  Windows, Classes, SysUtils, G ...

  3. inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效

    inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效 inno setup 安装卸载时检测程序是佛正在运行卸载完成后自动打开网页-代码无效 --------------------- ...

  4. INNO:检测程序是否已经安装,是则弹出卸载提示。

    INNO:检测程序是否已经安装,是则弹出卸载提示. 作者:少轻狂 | 发布:2010-08-05 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:2816 ℃ 实 ...

  5. Valgrind 检测程序内存使用

    Valgrind是用于构建动态分析工具的探测框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所以可以容易地创建新的工具而又不 ...

  6. STM32f103按键检测程序实现长按短按

    背景 只要使用单片机,按键检测基本上是一定要实现的功能.按键检测要好用,最重要的是实时和去抖.初学者往往会在主循环调用按键检测程序(实时)并利用延时去抖(准确).这种在主循环内延时的做法对整个程序非常 ...

  7. Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”

    小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...

  8. 最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境

    #include "cv.h" #include "highgui.h" #include "stdio.h" void main() { ...

  9. 分布式监控系统开发【day38】:主机存活检测程序解析(七)

    一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...

随机推荐

  1. 【BZOJ】【1027】【JSOI2007】合金

    计算几何/凸包/Floyd Orz rausen大爷太强辣 计算几何题目果然不会做>_> 这个题……虽然他给了3个坐标,但实际上是个二维的计算几何题= =因为第三维坐标可以直接用前两维坐标 ...

  2. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  3. PHP命令行模式基本介绍

      首先要保证php在cli模式下可用,php –v会返回PHP的版本号. [gaojian3@log001 ~]$ php -v PHP (cli) (built: Aug ::) Copyrigh ...

  4. sql server 批量删除数据表

    SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Auth ...

  5. logback日志文件需要注意点

    1.支持的jar包 logback-access-1.1.1.jarlogback-classic-1.1.1.jarlogback-core-1.1.1.jar 2.logback.xml文件,we ...

  6. 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

    [编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便 ...

  7. HDU5002 Tree(LCT)

    今天做了一道LCT模板题之后忽然间好像记起来LCT的模板怎么用了,于是就把上次网络赛的一道LCT补一下.典型的删边,加边操作,还有路径加和路径set为一个数.维护的是路径第二大以及它有多少个,后来想想 ...

  8. HDU4718 The LCIS on the Tree(LCT)

    又是一枚LCT,写一发加深一下对LCT的理解.本题的坑爹之处就在于,它实在是太坑爹了.询问的是树路径上的最长连续上升的子串,考验的是怎么样去维护.一开始的想法是维护三个变量 ls,rs,mxl,分别表 ...

  9. ios网站,博客

    中文 网站系列 objcio.cncocoachina.comcode4app.com泰然网 博客系列唐巧地球人都知道哈.http://blog.devtang.com/巧哥新出书了,速度入手吧. 虾 ...

  10. hdu 4259 Double Dealing

    思路: 找每一个数的循环节,注意优化!! 每次找一个数的循环节时,记录其路径,下次对应的数就不用再找了…… 代码如下: #include<iostream> #include<cst ...