[每天一道A+B]签到检测程序
签到检测程序,解析github提供的api内的json,解决了服务器和本地时间不同步的问题(时差+8H),实现按日期更新当前签到表。下一步是从api获取organization的信息,求出未签到的成员ID。(女朋友在写啦~)
1 #coding=utf-8 2 import urllib 3 import re 4 import json 5 import time 6 7 # 记录签到情况的set 8 check = set() 9 10 # 日期 11 class Date: 12 year = 0 13 month = 0 14 day = 0 15 hour = 0 16 minute = 0 17 second = 0 18 def __init__(self, year, month, day, hour, minute, second, cflag): 19 # 处理本地与服务器所在地的时差问题 +8h 20 if cflag == 1: 21 common = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 22 leap = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 23 hour += 8 24 if hour > 24: 25 hour -= 24 26 day += 1 27 if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0): 28 if day > leap[month]: 29 day -= leap[month] 30 month += 1 31 else: 32 if day > common[month]: 33 day -= common[month] 34 month += 1 35 if month > 12: 36 year += 1 37 month -= 12 38 self.year = year 39 self.month = month 40 self.day = day 41 self.hour = hour 42 self.minute = minute 43 self.second = second 44 45 46 # 存储用户信息 47 class User: 48 name = '' 49 date = Date(0, 0, 0, 0, 0, 0, 0) 50 def __init__(self, name, date): 51 self.name = name 52 self.date = date 53 54 # GitHub Api URL 55 gitHubCommitsApi = 'https://api.github.com/repos/aplusb/Let-the-bass-kick/commits' 56 57 # 获取json 58 def getJson(url): 59 page = urllib.urlopen(url) 60 html = page.read() 61 return html 62 63 # 保存json, commits.json 64 def saveJSON(html, fileNeme): 65 fileWrite = open(fileNeme, 'w') 66 fileWrite.write(html) 67 fileWrite.close() 68 69 # 处理json 70 def processJSON(commits): 71 users = [] 72 pr = json.loads(commits) 73 for each in pr: 74 name = each["commit"]["author"]["name"] 75 date = each["commit"]["author"]["date"] 76 yy = int(date[:4]) 77 mm = int(date[5:7]) 78 dd = int(date[8:10]) 79 hh = int(date[11:13]) 80 mi = int(date[14:16]) 81 ss = int(date[17:19]) 82 users.append(User(name, Date(yy, mm, dd, hh, mi, ss, 1))) 83 return users 84 85 # 获取当天信息 86 def getToday(): 87 ISOTIMEFORMAT = '%Y-%m-%dT%XZ' 88 curDate = time.strftime(ISOTIMEFORMAT, time.localtime()) 89 yy = int(curDate[:4]) 90 mm = int(curDate[5:7]) 91 dd = int(curDate[8:10]) 92 hh = int(curDate[11:13]) 93 mi = int(curDate[14:16]) 94 ss = int(curDate[17:19]) 95 return Date(yy, mm, dd, hh, mi, ss, 0) 96 97 # 统计当天的commit情况 98 def checkTimes(users): 99 today = getToday() 100 for each in users: 101 if today.year == each.date.year and today.month == each.date.month and today.day == each.date.day: 102 check.add(each.name) 103 104 # 展示当天签到情况 105 def show(users, check): 106 for each in users: 107 print '%-20s %s-%s-%s %s:%s:%s' % (each.name, str(each.date.year).zfill(4), 108 str(each.date.month).zfill(2), str(each.date.day).zfill(2), 109 str(each.date.hour).zfill(2), str(each.date.minute).zfill(2), 110 str(each.date.second).zfill(2)) 111 print '----------------------Today checked----------------------' 112 for each in check: 113 print '%s' % each 114 115 # 读取之前的签到情况 116 def readStatus(): 117 fileRead = open('checked.txt', 'r') 118 ISOTIMEFORMAT = '%Y-%m-%dT%XZ' 119 today = time.strftime(ISOTIMEFORMAT, time.localtime()) 120 curDate = fileRead.readline() 121 done = 0 122 # 初始化新文件 123 if curDate == '': 124 return 125 # 判断是不是today保存过的签到情况,如果是则读取信息 126 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]): 127 while not done: 128 entry = fileRead.readline() 129 # 去空行 130 entry = entry.strip('\n') 131 if entry != '': 132 check.add(entry) 133 else: 134 done = 1 135 fileRead.close() 136 137 # 保存统计结果 138 def saveStatus(): 139 fileWrite = open('checked.txt', 'w') 140 # 打时间戳 141 ISOTIMEFORMAT = '%Y-%m-%dT%XZ' 142 today = time.strftime(ISOTIMEFORMAT, time.localtime()) 143 fileWrite.write(today) 144 fileWrite.write('\n') 145 # 保存信息 146 for each in check: 147 fileWrite.write(each) 148 fileWrite.write('\n') 149 fileWrite.close() 150 151 152 # 保存当前仍未签到的ID 153 154 def __main__(): 155 commits = getJson(gitHubCommitsApi) 156 fileName = 'commits.json' 157 readStatus() 158 saveJSON(commits, fileName) 159 users = processJSON(commits) 160 checkTimes(users) 161 saveStatus() 162 show(users, check) 163 164 165 __main__()
转载于:https://www.cnblogs.com/kirai/p/5469055.html
[每天一道A+B]签到检测程序相关推荐
- 只需6步,教你从零开发一个签到小程序
摘要:针对于具备瞬时流量.业务场景比较简单的小程序,开发者借助FunctionGraph,可以方便快捷的搭建一个健壮的小程序后台. 本文分享自华为云社区<智慧校园想搞好,FunctionGrap ...
- 基于微软DEVCON的[一键禁用前面板插孔检测]程序
一.问题概述 许多带有还原卡的计算机(比如学校机房的电脑),没有音响设备,需要佩戴耳机才能听到声音.但是由于初始配置问题,有些机房的电脑插入耳机仍然听不到声音. 电脑右下角任务栏音量调节图标状态如下图 ...
- Python与OpenCV(二)——基于背景差分法的运动目标检测程序分析
背景差分法是传统运动目标检测算法中最常用的方法.其基本原理如图所示. 从图中可知,背景差分法是通过建立背景模型,比较当前帧与背景模型对应像素的差异点来检测运动目标的方法. 背景模型的建立主要通过两种方 ...
- 如何制作人脸微笑检测程序
这里介绍一个深度学习的简单应用,制作一个微笑检测程序.用深度学习技术做分类,然后再用OpenCV的级联分类器做人脸识别,基本可以做到实时检测. 下面介绍微笑脸分类模型的构建: 数据介绍 数据地址:ht ...
- MFC检测程序未响应
MFC检测程序未响应 | 火苗999℃的博客 UpdateData();CWnd* hwnd = FindWindow(NULL, m_szName);// m_szName 程序名称if (NULL ...
- 【计算机原理与接口技术(UNIX)⑲ 完结篇】——可编程计数器 8254 [ 流光发生器、8254工作方式检测程序的设计]
✅ 通过对 [计算机与UNIX汇编原理 ① ~ ⑫]的学习,我们已经大致掌握了汇编程序设计的相关知识 接下来,我将其分栏名改为 [计算机原理与接口技术(UNIX) ],重点将放在 "计算机原 ...
- node.js毕业设计微信签到小程序(源码+程序+LW+部署)
该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...
- 硬盘检测程序HDTunePro V4.6
硬盘检测程序HDTunePro V4.6 转载于:https://blog.51cto.com/162810/571068
- android内存检测方法,Android_Android系统检测程序内存占用各种方法,1.检查系统总内存
复制代码 - phpStudy...
Android系统检测程序内存占用各种方法 1.检查系统总内存 liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal: 840868 kB ...
最新文章
- Express4.x API (四):Router (译)
- JQUERY 阻止a 标签链接
- photoshop ps 拉长裙子 方法
- Django(part3)--制作我的第一个网页
- 简述python爬虫_python爬虫入门篇了解
- MyBatis映射文件1(增删改、insert获取自增主键值)
- GPS围栏两个多边形相交问题的奇葩解法
- C++学到什么程度才算是精通?
- 自然语言处理能够把全网内容组织到什么程度?
- css 3 制作水波状进度条
- libvpx enabled but no supported decoders found
- liunx Swap 分区的作用
- 2021 CSDN查看自己关注的人
- 企业级即时通讯通信平台的实现
- 一键批量修改文件夹名称
- 【电脑讲解】电脑知识入门大全,超详细电脑基础知识讲解
- ecshop 添加php标签,ECSHOP模板标签【ecshop标签大全】ecshop标签手册
- 阿里云IOT设备数据接入 (从阿里云IOT云平台获取设备数据)
- HTTP状态码--1XX
- dns服务器配置(本地dns,自己当服务器,自己测试自己)
热门文章
- android6.0源码分析之Camera API2.0简介
- clickhouse数据手动迁移
- JZOJ 5234. 【NOIP2017模拟8.7A组】外星人的路径
- JZOJ 100043. 【NOIP2017提高A组模拟7.13】第K小数
- 世界地图20亿像素_高通骁龙690 5G平台发布,支持1.92亿像素性能提升20%
- linux查看fifo内容,linux 有名管道(FIFO)
- VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
- python网络爬虫(14)使用Scrapy搭建爬虫框架
- HailStone序列
- 程序员的数学--排列组合(2)