2011-09-12 13 views
7

Tôi đang cố gắng xem ứng dụng HTML5 hoạt động như thế nào và mọi nỗ lực để lưu trang bên trong trình duyệt webkit (chrome, Safari) bao gồm một số, nhưng không phải tất cả các tài nguyên cache.manifest. Có một thư viện hoặc một bộ mã sẽ phân tích cú pháp tệp cache.manifest và tải xuống tất cả các tài nguyên (hình ảnh, tập lệnh, css) không?Cách tốt nhất để tải xuống tất cả các tạo phẩm được liệt kê trong tệp bộ nhớ cache HTML5.manifest?

(mã gốc chuyển sang trả lời ... Noob sai lầm> <.)

+1

Có thiếu "câu hỏi" trong câu hỏi của bạn, nhưng mã có vẻ hoạt động Python, mặc dù một số phần có thể được đơn giản hóa. Ngoài ra còn có các thư viện gọi là urlgrabber và các yêu cầu có thể làm cho quá trình lưu tệp dễ dàng hơn. –

+0

Cảm ơn bạn đã phản hồi Mikko Tôi sẽ kiểm tra các thư viện bạn đã đề cập để phát triển hơn nữa. Về cơ bản, bạn không biết thư viện nào để tải xuống danh sách tài nguyên bên trong tệp cache.manifest. Rất tiếc, từ khóa quan trọng nhất trong bài đăng này là "cache.manifest" rõ ràng chưa được thêm làm từ khóa. Không có số điểm 1500 tôi không thể thêm nó. > rockhowse

+0

Bởi vì phân tích cú pháp và tải xuống tệp kê khai bộ nhớ cache chỉ có 50 dòng mã Python tôi không thấy lý do tại sao mọi người nên xây dựng thư viện thích hợp cho mục đích đó :) –

Trả lời

0

tôi lên đâu này như là một phần của câu hỏi ... (không người mới stackoverflow tấm áp phích BAO GIỜ thực hiện điều này;)

từ có một câu trả lời thiếu vang dội. Ở đây bạn đi:

tôi đã có thể đưa ra các kịch bản python sau đây để làm như vậy, nhưng bất kỳ đầu vào sẽ được đánh giá =) (Đây là đâm đầu tiên của tôi vào mã python do đó có thể là một cách tốt hơn)

import os 
import urllib2 
import urllib 

cmServerURL = 'http://<serverURL>:<port>/<path-to-cache.manifest>' 

# download file code taken from stackoverflow 
# http://stackoverflow.com/questions/22676/how-do-i-download-a-file-over-http-using-python 
def loadURL(url, dirToSave): 
     file_name = url.split('/')[-1] 
     u = urllib2.urlopen(url) 
     f = open(dirToSave, 'wb') 
     meta = u.info() 
     file_size = int(meta.getheaders("Content-Length")[0]) 
     print "Downloading: %s Bytes: %s" % (file_name, file_size) 

     file_size_dl = 0 
     block_sz = 8192 
     while True: 
       buffer = u.read(block_sz) 
       if not buffer: 
         break 

       file_size_dl += len(buffer) 
       f.write(buffer) 
       status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100./file_size) 
       status = status + chr(8)*(len(status)+1) 
       print status, 

     f.close() 

# download the cache.manifest file 
# since this request doesn't include the Conent-Length header we will use a different api =P 
urllib.urlretrieve (cmServerURL+ 'cache.manifest', './cache.manifest') 

# open the cache.manifest and go through line-by-line checking for the existance of files 
f = open('cache.manifest', 'r') 
for line in f: 
     filepath = line.split('/') 
     if len(filepath) > 1: 
       fileName = line.strip() 
       # if the file doesn't exist, lets download it 
       if not os.path.exists(fileName): 
           print 'NOT FOUND: ' + line 
           dirName = os.path.dirname(fileName) 
           print 'checking dirctory: ' + dirName 
           if not os.path.exists(dirName): 
             os.makedirs(dirName) 
           else: 
             print 'directory exists' 
           print 'downloading file: ' + cmServerURL + line, 
           loadURL (cmServerURL+fileName, fileName) 
Các vấn đề liên quan