httplib.HTTPMessage(filehandle).getdate(headername)
httplib.HTTPMessage(filehandle).getdate_tz(headername)
mimetools.Message(filehandle).getdate()
rfc822.parsedate(datestr)
rfc822.parsedate_tz(datestr)
- jeśli masz surowy strumień danych, można zbudować HttpMessage lub mimetools. Wiadomość od niego. może zaoferować dodatkową pomoc podczas odpytywania obiekt odpowiedzi na informacje o
- jeśli używasz urllib2, masz już przedmiot HttpMessage ukryty w filehandler zwróconej przez urlopen
- może prawdopodobnie analizować wiele formatów daty
- httplib jest w rdzeń
UWAGA:
- miał spojrzeć na życie, HttpMessage dziedziczy mimetools.Message która dziedziczy z rfc822.Message. dwie zmienne defs są waszym zainteresowaniem może, parseate i parseate_tz (w tym ostatnim)
- parsowana (_tz) z email.utils ma inną implementację, chociaż wygląda trochę tak samo.
można to zrobić, jeśli masz tylko ten kawałek sznurka i chcesz go zanalizować:
>>> from rfc822 import parsedate, parsedate_tz
>>> parsedate('Wed, 23 Sep 2009 22:15:29 GMT')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
>>>
ale pozwól mi przykładem pośrednictwem wiadomości MIME:
import mimetools
import StringIO
message = mimetools.Message(
StringIO.StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> m
<mimetools.Message instance at 0x7fc259146710>
>>> m.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
lub za pośrednictwem Wiadomości http (odpowiedzi)
>>> from httplib import HTTPMessage
>>> from StringIO import StringIO
>>> http_response = HTTPMessage(StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> #http_response can be grabbed via urllib2.urlopen(url).info(), right?
>>> http_response.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
prawda?
>>> import urllib2
>>> urllib2.urlopen('https://fw.io/').info().getdate('Date')
(2014, 2, 19, 18, 53, 26, 0, 1, 0)
tam, teraz już więcej na temat formatów daty, wiadomości MIME narzędzi MIME i ich pythonic realizacji ;-)
każdym razie, wygląda lepiej niż przy użyciu email.utils do analizowania nagłówków HTTP.
Tak, to prawdopodobnie najlepszy kompromis, ale jego "tolerancyjne analizowanie RFC 2822" nie jest w 100% kompatybilne z RFC 2616'2 wymagającym "MUSI" - np. epickim niepowodzeniem w formacie RFC 850 z dwucyfrowymi latami, takimi jak 'Sunday, 06-Nov-94 08:49:37 GMT', ale 2616 mówi, że klient MUSI być w stanie przeanalizować daty RFC 850 (westchnienie). –
email.Utils.parsedate wydaje się wystarczający, dziękuję. Ale jest to mylące, że czasami nazywa się e-mail.utils, a czasem e-mailem. Domyślam się, że wersja email.Utils jest starszą wersją, która została przestarzała (?) –
'email.utils.parsedate to email.Utils.parsedate -> True' Wygląda na to, że * U * tils jest leniwym programem ładującym. – jfs