Webサーバー上の同じファイルに対してローカルファイルをチェックするPythonコードがあります。そこにない場合はダウンロードし、ダウンロードした場合は、サーバー上の同じファイルのHTTPヘッダーに対して、最後に変更したファイルos.stat
をチェックします。ダウンロードしたファイルの最終変更がHTTPヘッダーと一致しません
問題は、この2つの数値が同じでなくても同じではないようです。ここではコードです:
from urllib import urlretrieve
from urllib2 import Request, urlopen
from time import strftime, localtime, mktime, strptime
from os import stat, path
destFile = "logo3w.png"
srvFile = "http://www.google.com/images/srpr/logo3w.png"
if path.exists(destFile):
localLastModified = stat(destFile).st_mtime
req = Request(srvFile)
url_handle = urlopen(req)
headers = url_handle.info()
srvLastModified = headers.getheader("Last-Modified")
srvLastModified = mktime(strptime(srvLastModified,
"%a, %d %b %Y %H:%M:%S GMT"))
print localLastModified, srvLastModified
else:
urlretrieve(srvFile, destFile)
print
文のリターンは、(あなたが二回のコードを実行した場合)1334527395.26 1333350817.0
です。
私には、それらの2つは同じであるはずですが、それらは大きく違っています。ローカルでダウンロードされたファイルの修正日は、実際にはサーバー上の最終更新日ではなく、ローカルマシンにダウンロードされた日付です。
私がやろうとしているのは、ファイルのローカルキャッシュを保持することです(実際のアプリケーションには多くのファイルが必要です)。必要に応じてダウンロードしてください。私は、Webプロキシがデフォルトでこれを行うべきであることを半分知っており、これらのファイルが保存されている基本的なWAMPサーバーを実行していますが、これを私のPyQtアプリケーションにどのように適用するかはわかりません。ダウンロードしてキャッシュする必要があるファイルは数十件あり、そのうち半数はほとんど変更されないため、これらのファイルを確認して取得する最速の方法を決定しようとしています。
これは正しい方法ではないかもしれないので、これを行う方法がはるかに優れている場合は、私はすべて耳にします。
ファイルの速度が実際には問題ではないため、何かが十分速くなります。あなたが変更を確実にしたければ、あなたはその内容をハッシュすることもできます。 – katrielalex