У меня есть приложение python, которое полагается на файл, который загружается клиентом с веб-сайта.
Веб-сайт не находится под моим контролем и не имеет API для проверки "последней версии" файла.
Есть ли простой способ получить доступ к файлу (на python) через URL-адрес и проверить его дату (или размер) без необходимости загружать его на клиентскую машину каждый раз?
update: Спасибо тем, кто упомянул дату последнего изменения. Это правильный параметр для просмотра.
Думаю, я не сформулировал вопрос достаточно хорошо. Как это сделать с помощью python script? Я хочу, чтобы приложение проверяло файл, а затем загружало его, если (дата последнего изменения и текущая дата файла).
Проверьте заголовок Last-Modified.
EDIT: попробуйте urllib2.
EDIT 2: Этот короткий учебник должен дать вам довольно хорошее представление о достижении вашей цели.
Нет надежного способа сделать это. Насколько вам известно, файл может быть создан "на лету" веб-сервером, и вопрос "сколько лет этот файл" не имеет смысла. Веб-сервер может выбрать, чтобы предоставить Last-Modified заголовок, но он может сказать вам, что он хочет.
Учтите, что "последний-измененный" может отсутствовать:
>>> from urllib import urlopen >>> f=urlopen('http://google.com/') >>> i=f.info() >>> i.keys() ['set-cookie', 'expires', 'server', 'connection', 'cache-control', 'date', 'content-type'] >>> i.getdate('date') (2009, 1, 10, 16, 17, 8, 0, 1, 0) >>> i.getheader('date') 'Sat, 10 Jan 2009 16:17:08 GMT' >>> i.getdate('last-modified') >>>
Теперь вы можете сравнить:
if (i.getdate('last-modified') or i.getheader('date')) > current_file_date: open('file', 'w').write(f.read())
В HTTP 1.1 раздел Content-Disposition предназначен для хранения такого рода информации в параметре creation-date
(см. RFC 2183).
Я построил инструмент, который делает это на основе etags. Звучит очень похоже на то, что вы описываете:
pfetch - это скрученный инструмент, который делает это по расписанию и может работать со многими, многими URL-адресами и событиями запуска при изменении ( после загрузки). Это довольно просто, но все же может быть сложнее, чем вы хотите.
Этот код - это именно то, о чем вы просите.
Итак, возьмите свой выбор.:)