2011-09-12 11 views
7

Sto cercando di capire come funziona un'app HTML5 e qualsiasi tentativo di salvare la pagina nei browser Webkit (chrome, Safari) include alcune, ma non tutte le risorse cache.manifest. Esiste una libreria o un set di codice che analizzerà il file cache.manifest e scaricherà tutte le risorse (immagini, script, css)?Il modo migliore per scaricare tutte le risorse elencate in un file cache.manifest HTML5?

(codice originale si trasferisce a rispondere ... niubbo errore> <.)

+1

C'è una mancanza di "questionario" nella tua domanda, ma il codice sembra funzionare in Python, anche se alcune parti potrebbero essere semplificate. Inoltre ci sono librerie chiamate urlgrabber e richieste che potrebbero facilitare il processo di salvataggio del file. –

+0

Grazie per il feedback Mikko controllerò le librerie che hai menzionato per ulteriori sviluppi. Quindi, in pratica, non si conosce una libreria per scaricare l'elenco di risorse all'interno di un file cache.manifest. Sfortunatamente, la parola chiave che più conta in questo post è "cache.manifest" che evidentemente non è stata ancora aggiunta come parola chiave. Non avendo un punteggio di 1500 non riesco ad aggiungerlo. >. rockhowse

+0

Poiché l'analisi e il download del manifest della cache sono solo 50 righe di codice Python, non vedo perché qualcuno dovrebbe creare una libreria di nicchia solo per questo scopo :) –

risposta

0

ho originariamente pubblicato questo come parte della questione ... (poster senza newbie StackOverflow fa mai questo;)

dal c'era una clamorosa mancanza di risposte. Qui si va:

sono stato in grado di venire con il seguente script python di farlo, ma ogni input sarebbe apprezzato =) (Questo è il mio primo tentativo di codice Python quindi ci potrebbe essere un modo migliore)

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) 
Problemi correlati