Chromium Nightly Updater (Python 簡單版)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/python
# -*- coding: utf-8 -*-
#========================
__version__ = "0.1.0 Beta"
__author__ = "Zeuxis Lo"
__appname__ = "Chromium Nightly Updater (Python)"

import urllib2, urllib, os, sys

def dlProgress(blocks_read, block_size, total_size, url = None):
if not blocks_read:
return

if total_size < 0:
print ('Read %d blocks' % blocks_read)
else:
percent = int(blocks_read*block_size*100/total_size)
sys.stdout.write("\rDownloading File ..... %2d%%" % percent)

class Updater():
latestNumberFile = ""

def __init__(self):
self.latestNumberFileUrl = "http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/LATEST"
self.latestFileUrl = "http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/"
self.latestFileName = "chrome-win32.zip"
self.saveFilePath = "chrome-win32-#number#.zip"

def run(self):
self.appInfo()
self.downloadFile(self.getLatestNumber())

def appInfo(self):
print("Application Info\n")
self.printInfo("AppName", __appname__)
self.printInfo("Author", __author__)
self.printInfo("version", __version__)

def downloadFile(self, latestNumber):
if latestNumber == None:
print(">> Exception >> Can not found out latest number")
return
else:
savePath = os.path.dirname(os.path.abspath(__file__))
fileName = self.saveFilePath.replace("#number#", latestNumber)
fileUrl = self.getLatestFileUrl(latestNumber, self.latestFileName)

self.printMessage("Latest Number", latestNumber)
self.printMessage("Save to Path", savePath)
self.printMessage("Save Filename", fileName)

print("\nTarget File Information\n")

urlObject = urllib2.urlopen(fileUrl)
meta = urlObject.info()
urlObject.close()

self.printMessage("Url Protocol", self.latestFileUrl[0:self.latestFileUrl.find(":")])
self.printMessage("Read Form Url", self.latestFileUrl.replace("http://", ""))
self.printMessage("Read File Name", self.latestFileName)
self.printMessage("Got File Size", meta.getheaders("Content-Length")[0])

print

urlStream = urllib.urlretrieve(fileUrl, savePath + "/" + fileName, reporthook=dlProgress)

print("\n\nDownload Completed")

def printMessage(self, subject, content):
print(">> %-14s >> %s") % (subject, content)

def printInfo(self, subject, content):
print("%-10s : %s") % (subject, content)

def getLatestFileUrl(self, latestNumber, latestFileName):
return self.latestFileUrl + latestNumber + "/" + latestFileName

def getLatestNumber(self):
print("\nSearching latest number\n")
page = urllib2.urlopen(self.latestNumberFileUrl)
number = page.read()

if number:
return number
else:
return None

if __name__ == '__main__':
Updater().run()