目录
3.通过对版本号的对比进行自动更新检测
一.自动更新原理:
1.通过Python对蓝奏云api的获取分析检测用以下载
- 用Python的requests模块对链接进行获取并分析提取出要下载链接并下载
- 注:蓝奏云地址分api:https://api.vvhan.com/api/lz?url=蓝奏云地址(详细内容及用法请详 见:https://api.vvhan.com/lanzou.html)
2.在通过本文的内容检测达到更新检测的目的
- 选取一个合适的网站或者服务器进行更新地址寄存(例:本文中的更新检测区块部分即是地址寄存区域)
- 用Python的requests模块对链接进行获取
- 用Python的模块BeautifulSoup模块对获取到的内容进行分析并查找提取关键内容
- 将关键内容返回到蓝奏云api进行下载链接获取并下载
3.通过对版本号的对比进行自动更新检测
- 在代码段或配置文件中写入软件版本号
- 进入软件或在检测更新时与云端的软件版本号进行对比如果版本号有偏差则执行升级程序如果版本号没有偏差则正常进入程序
注:以上内容仅作者自身观点见解,如有错误欢迎各位大佬指出,我将积极接受各位大佬的意见并予以改正,也对每一位能够耐心看完这篇文章的读者表示感谢,您的支持是我进步的动力!
二.更新检测区块:
注:因为学生党没钱只能用这种方法达到自动更新的目的:
—通知|新版本为测试版,软件内容并未制作完全,可能存在大量bug,请用户见谅,并将在正式版给予修复,感谢理解。
-深渊启动器|3.1.0|iVWu5sszm9c|详细请看更新公告|13.66MB|0
-股票模拟软件|4.0.7|iMm8hfkawwj|新增了单股刷新模式|11.25MB|5.5
-计算练习器|1.9.9|i3g1pf2rykd|新增了货币系统有利于更好计算|6.5MB|0
-哔哩哔哩数据获取|1.2.0|i9ROjf6bacj|更新了提醒功能使软件更人性化|9.82MB|2.5
-RStudioPortable|2.2.0|i3utkfkawsf|能恢复电脑数据的软件(非自编)|63.3MB|6999.9
-激活工具|1.0.0|ig4jJf6bp3a|激活软件(非自编)|0.92MB|50.5
-测试|0.0.2|ic3Toebvdxc|测试软件的性能|5.5MB|10.3
-自动截图软件|1.1|i37Qtgrrs6j|1:修复了无法显示坐标的bug|24.9MB|99.9—
-测试|test|i37Qtgrrs6j|1:修复了无法显示坐标的bug|24.9MB|99.9—
自动更新代码:
from bs4 import BeautifulSoup
import requests
import time
import tkinter as tk
import tkinter.messagebox
import os
import subprocess
import time
import shutil
import sys
#更新文件
if not os.path.exists("更新目录"):
os.mkdir("更新目录")
提醒 = tk.Tk()
提醒.withdraw()
#更新检测模块
头部 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',}
字典 = {}
def 检测模块(版本号):
检测地址 = "https://blog.csdn.net/max_tebie/article/details/107435252"
获取 = requests.get(检测地址,headers = 头部) #获取检测地址
获得 = BeautifulSoup(获取.text,'html.parser') #处理检测地址
内容 = 获得.find_all(class_='htmledit_views') #提取检测地址
分割 = str(内容).split("-")[1].split("|") #分割检测信息
列表 = ["其他","名称","版本","地址","公告","大小"]
for 列表1,区域 in zip(列表,分割): #检测信息转字典
字典[列表1] = 区域
if 版本号 != 字典["版本"]: #处理
更新 = tkinter.messagebox.askokcancel("更新提示","版本:"+字典["版本"] +
"\n" + "公告:"+字典["公告"] +
"\n" + "大小:" + 字典["大小"] + "\n是否选择下载")
if 更新:
下载模块(字典["地址"],字典["名称"])
更新模块(字典["名称"])
else:
提醒.destroy()
else:
提醒.destroy()
def 下载模块(地址,名称):
下载地址 = "https://api.vvhan.com/api/lz?url=https://mtsy.lanzous.com/" + 地址
解析 = requests.get(下载地址).json()
获取 = 解析["download"] #获取下载地址
获取 = 获取.replace("\\","")
头部内容 = requests.head(获取, headers=头部)
解密地址 = 头部内容.headers['Location']
文件 = requests.get(解密地址) #下载文件
下载 = open("更新目录/" + 名称 + ".exe",'wb')
下载.write(文件.content)
下载.close()
def 更新模块(名称): #外部安装
路径 = os.getcwd()
脚本 = open("更新脚本.bat",'w')
脚本.write("@echo off\n" + #新建脚本
"taskkill /f /im " + 名称 + ".exe" +
"\nsleep 3\n" +
"del " + 名称 + ".exe\n" +
"copy /y " + 路径 + "\\更新目录\\" + 名称 + ".exe " + 路径 +
"\nstart " + 名称 + ".exe")
脚本.close()
subprocess.Popen("更新脚本.bat") #执行脚本
提醒.destroy()
有兴趣的同学也可以下载软件试一下,地址: