2011-09-12 6 views
7

Bir HTML5 uygulamasının nasıl çalıştığını ve webkit tarayıcıları (chrome, Safari) içindeki sayfayı kaydetme girişimlerinin bazılarını içerdiğine, ancak tüm cache.manifest kaynaklarına bakmaya çalışıyorum. Cache.manifest dosyasını ayrıştıracak ve tüm kaynakları (görüntüler, komut dosyaları, css) indirecek bir kitaplık veya kod kümesi var mı? Bir HTML5 cache.manifest dosyasında listelenen tüm artifaktları indirmenin en iyi yolu?

(orijinal kod> cevaplamak için ... çaylak hata taşındı <.)

+1

Sorunuzda "soru sorma" eksikliği var, ancak kod bazı parçaların basitleştirilmesine rağmen Python üzerinde çalışıyor. Ayrıca urlgrabber denilen kütüphaneler ve dosya kaydetme sürecini kolaylaştıracak talepler var. –

+0

Geri bildiriminiz için teşekkür ederiz. Mikko Daha fazla geliştirme için bahsettiğiniz kütüphaneleri kontrol edeceğim. Temel olarak, bir cache.manifest dosyasındaki kaynakların listesini indirmek için bir kütüphane bilmiyorsunuz. Maalesef, bu yayının en önemli anahtar kelimesi, henüz bir anahtar kelime olarak eklenmeyen "cache.manifest" dir. 1500 puanı alamıyorum. Bu soru, HTML5 "cache.manifest" ile ilgilenen kişiler yerine "python" etiketlerini izleyen kişiler tarafından görüntülenecektir. – rockhowse

+0

Önbellek manifest'in ayrıştırılması ve karşıdan yüklenmesi sadece 50 satırlık Python kodunun neden olduğunu anlamıyorum Neden herkes bu amaçla bir niş kütüphanesi oluşturmalıdır :) –

cevap

0

Başlangıçta (hayır Newbie stackoverflow afiş HİÇ bunu yapar;) ... sorunun bir parçası olarak bu yayınlanmıştır

beri yankılanan cevaplar yoktu. Al bakalım: (Bu piton koduna benim ilk bıçak

bunu yapmak için aşağıdaki piton komut ile gelip başardı, ama herhangi bir giriş = mutluluk duyacağız), daha iyi bir yolu olabilir böylece)

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) 
İlgili konular