设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4724|回复: 2
打印 上一主题 下一主题

[实用性教程]利用github的api和requests检查更新

[复制链接]

7

主题

1

好友

64

积分

注册会员

Rank: 2

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

使用道具 举报

7

主题

1

好友

64

积分

注册会员

Rank: 2

沙发
发表于 2022-9-15 09:28:53 |只看该作者
b站账号名滑稽到滑稽的滑稽,有问题私信
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2022-9-16 01:06:04 |只看该作者
Danieldepython 发表于 2022-9-15 09:28
b站账号名滑稽到滑稽的滑稽,有问题私信

欢迎欢迎
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 00:56 , Processed in 0.023180 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部