[每天一道A+B]签到检测程序
签到检测程序,解析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]签到检测程序的更多相关文章
- 利用SHELL脚本实现文件完整性检测程序(1.2版更新)
一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...
- delphi 一个自动控制机的硅控板检测程序,用多线程和API,没有用控件,少做改动就能用 用485开发
一个自动控制机的硅控板检测程序,用多线程和API,没有用控件,少做改动就能用Unit CommThread; Interface Uses Windows, Classes, SysUtils, G ...
- inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效
inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效 inno setup 安装卸载时检测程序是佛正在运行卸载完成后自动打开网页-代码无效 --------------------- ...
- INNO:检测程序是否已经安装,是则弹出卸载提示。
INNO:检测程序是否已经安装,是则弹出卸载提示. 作者:少轻狂 | 发布:2010-08-05 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:2816 ℃ 实 ...
- Valgrind 检测程序内存使用
Valgrind是用于构建动态分析工具的探测框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所以可以容易地创建新的工具而又不 ...
- STM32f103按键检测程序实现长按短按
背景 只要使用单片机,按键检测基本上是一定要实现的功能.按键检测要好用,最重要的是实时和去抖.初学者往往会在主循环调用按键检测程序(实时)并利用延时去抖(准确).这种在主循环内延时的做法对整个程序非常 ...
- Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”
小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...
- 最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境
#include "cv.h" #include "highgui.h" #include "stdio.h" void main() { ...
- 分布式监控系统开发【day38】:主机存活检测程序解析(七)
一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...
随机推荐
- Leetcode#76 Minimum Window Substring
原题地址 用两个指针分别记录窗口的左右边界,移动指针时忽略那些出现在S种但是没有出现在T中的字符 1. 扩展窗口.向右移动右指针,当窗口内的字符即将多于T内的字符时,停止右移 2. 收缩窗口.向右调整 ...
- Sqli-labs less 65
Less-65 $id = '"'.$id.'"'; // Querry DB to get the correct output $sql="SELECT * FROM ...
- linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
一.多会话工具screen.tmux 两个都是多窗口工具.1.使用后wim出现配色问题:http://ibartman.com/2014/04/16/vim%20%E9%85%8D%E8%89%B2/ ...
- iOS导航栏-导航栏透明
设置一张透明图片:nav_bargound.png //导航栏背景 [self.navigationController.navigationBar setBackgroundImage:[ ...
- MetInfo安装
安装MetInfo企业网站管理系统需要经历三个步骤:安装准备.上传文件.安装系统. 第一步:安装前的准备 环境要求:需要支持PHP并提供Mysql数据库的空间(虚拟主机),详细要求: 下载MetInf ...
- 神器——Chrome开发者工具(一)
这里我假设你用的是Chrome浏览器,如果恰好你做web开发,或者是比较好奇网页中的一些渲染效果并且喜欢折腾,那么你一定知道Chrome的开发者工具了.其实其他浏览器也有类似工具,比如Firefox下 ...
- VS2012简单的使用感受+插件推荐
VS2012简单的使用感受+插件推荐http://www.cnblogs.com/tangge/archive/2013/03/12/2955367.html
- springMVC视频教程
http://edu.51cto.com/index.php?do=lession&id=42165
- linux下tigervnc-servere服务的安装与使用
关于tigervnc-servere的安装,可以直接使用本地yum源进行安装. [root@ ~]# yum install tigervnc-server -y 其中tigervnc的主要配置文件位 ...
- cojs QAQ的序列 解题报告
QAQ 这是从论文上搬的一道题目 但是由于并没有找到题目地址,所以就自己造数据咯 发现数据无比难造 (本题数据极弱,暴力或可AC?) 我们考虑离线的话其实只需要莫队就可以了 那么在线怎么做呢 二进制分 ...