[每天一道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 ...
随机推荐
- 事务并发处理: DB+ORM+逻辑代码
在学习了马士兵有关事务并发处理的视频后, 感觉对事务并发处理的概念,问题以及解决方式有了一定的了解,赶紧记录下来以备后用. 1. 事务:一系列操作要么都完成,要么一个都不完成 2. 事务并发:多个事务 ...
- Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service
准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并 ...
- SWF Web播放器
<HTML> <HEAD> <!-- saved from url=(0013)about:internet --> <TITLE> Untitled. ...
- GRID用法(取行、列值;定位选中某行等等)
Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...
- POJ 2226
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7557 Accepted: 2791 Desc ...
- laravel笔记
向视图中传递变量 使用with()方法 return view('articles.lists')->with('title',$title); 直接给view()传参数 return view ...
- 【mysql5.6】下载安装
每次学新技术最烦的就是安软件了..... 下载的mysql5.6 http://dev.mysql.com/downloads/windows/ 一路默认安装.安装后 1.以管理员身份打开C:\WIN ...
- iOS正则匹配手机号
#pragma 正则匹配手机号 + (BOOL)validateMobile:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8 ...
- Android activity属性
android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务. android:alwaysRetainTaskState 是否 ...
- DBCP参数介绍
参数分步介绍1)数据库连接相关 username="v10" password="v10" driverClassName="ora ...