- 帖子
- 16
- 精华
- 0
- 积分
- 64
- 阅读权限
- 20
- 注册时间
- 2022-9-13
- 最后登录
- 2024-1-19
|
有时候我们写一个程序可能必定要检查更新,但是没钱买服务器怎么办?
答案是利用Github提供的api实现
我们先来理清思路,首先,github提供了检查项目更新时间的api,这个api就是https://api.github.com/repos/,后面加上自己的项目名称就可以访问
例如https://api.github.com/repos/pengxiaohang/Super-Dos,这个链接就是查看指定项目的更新时间
那我们来想一下,我们是不是可以用python读取更新时间然后爬取api的时间来检查更新呢?
是不是想到了该怎么做,没错我们可以在打开的瞬间读取更新时间,代码如下:- file = open("update","a")#创建update文件
- file.close#关闭
- file = open("update")#重新打开,这样就不会报错
- upsoft = file.read()#读取文件到upsoft
- file.close#关闭
复制代码 这样时间就被读取到upsoft这个变量了
现在只需要判断就可以了
我们可以用布尔类型判断是否为空,空则填充时间
对了,我们还要安装time模块以下就是判断的代码:- if upsoft:
- pass
- else:
- #获取当前时间戳并转换生成到time_tuple列表
- time_tuple = time.localtime(time.time())
- #把列表指定的元素提取并判断是不是两位数,如果是则在左边补0
- time_tuple3 = time_tuple[3]
- time_tuple3 -= 12
- time_tuple3 = str(time_tuple3)
- if int(time_tuple3) < 10:
- time_tuple3 = time_tuple3.rjust(2,"0")
- time_tuple1 = time_tuple[1]
- time_tuple1 = str(time_tuple1)
- if int(time_tuple1) < 10:
- time_tuple1 = time_tuple1.rjust(2,"0")
- time_tuple2 = time_tuple[2]
- time_tuple2 = str(time_tuple2)
- if int(time_tuple2) < 10:
- time_tuple2 = time_tuple2.rjust(2,"0")
- time_tuple4 = time_tuple[4]
- time_tuple4 = str(time_tuple4)
- if int(time_tuple4) < 10:
- time_tuple4 = time_tuple4.rjust(2,"0")
- time_tuple5 = time_tuple[5]
- time_tuple5 = str(time_tuple5)
- if int(time_tuple5) < 10:
- time_tuple5 = time_tuple5.rjust(2,"0")
- #读取文件,没有创建
- file = open("update","a")
- file.close
- #重新以写入的模式打开并写入时间
- file = open("update","w")
- file.write(str(time_tuple[0])+time_tuple1+time_tuple2+time_tuple3+time_tuple4+time_tuple5))
- print("ok")
复制代码 虽然说这段代码有点屎,但好歹注释了
现在就到了激动人心的检查更新代码块了
但是,在这之前,我们还要安装模块,因为检测到了更新还要打开网页还有req巴拉巴拉的模块- import requests
- import re
- import webbrowser
复制代码 ok,然后我们可以开始写检查更新的代码了- try:
- print("正在获取更新...")
- api = "https://api.github.com/repos/pengxiaohang/Super-Dos"#设置api
- update = requests.get(api,headers="",verify=False)#爬取github上的更新时间
- update = update.json()#转换为json字典
- update = update.get("updated_at")#提取其中时间
- update = re.findall("\d",update)#只提取数字,也就是日期
- update = "".join(update)#合并获取的日期
- print("Github上的版本更新日期:",update)
- print("你的更新日期:",upsoft)
- if update > upsoft:#检测当前更新版本是否低于github上的日期,如果高于说明有更新
- print("检测到新版本,是否查看(y/n)?")
- yes = input()
- if yes == "y":
- webbrowser.open("https://github.com/pengxiaohang/Super-Dos/releases")
- elif yes == "n":
- pass
- else:
- print("???")
- else:
- print("暂无新版本!")
- except:
- print("获取更新时出现了未知错误!")
复制代码 可能有的人看完这段代码后就会问:
为什么requests.get(api,headers="",verify=False)这句的get后面加了一些参数啊???
我的回答:
因为根据垃圾堆csdn那里回答python爬取时需要用到证书,这些参数就是关闭证书验证,不信你去掉参数只留api试试(doge)
可能还有些人需要开启时或者一段时间后检查,这个可以用while时间,具体怎么写嘛。。。。
还有一个检查主程序是否更新,更新了则更新update文件
这些就当做是作业好了(doge)
先给你们检测更新的思路:
我们可以检测文件的大小或者修改时间,这些用os模块的stat函数做到,剩下的你们自己想
记得按时交作业! |
|