La restricción de los elementos RSS por día con feedparser. [Pitón]
-
18-09-2019 - |
Pregunta
iterar un canal RSS al igual que en _FILE es la alimentación
d = feedparser.parse(_file)
for element in d.entries:
print repr(element.date)
La salida fecha sale como así
u'Thu, 16 Jul 2009 15:18:22 EDT'
Parece que no puedo entender cómo cuantificar realmente la salida fecha arriba para que pueda utilizarlo para limitar elementos de alimentación. Así que lo que estoy preguntando es ¿cómo puedo obtener un tiempo real de esto, por lo que puedo decir si es mayor que 7 días de edad, omita este elemento.
Solución
Se supone feedparser para darle un objeto struct_time desde el módulo de tiempo de Python. Supongo que no reconoce que el formato de la fecha y por lo que está dando la cuerda en bruto.
Vea aquí sobre cómo añadir soporte para analizar las marcas de tiempo con formato incorrecto:
http://pythonhosted.org/feedparser/date-parsing.html
Si logras conseguir que le dan la struct_time, puede leer más sobre esto aquí:
http://docs.python.org/library/time.html # time.struct_time
Los objetos struct_time tienen todo lo necesario. Tienen estos miembros:
time.struct_time(tm_year=2010, tm_mon=2, tm_mday=4, tm_hour=23, tm_min=44, tm_sec=19, tm_wday=3, tm_yday=35, tm_isdst=0)
Yo generalmente convertir las estructuras de segundo, así:
import time
import calendar
struct = time.localtime()
seconds = calendar.timegm(struct)
A continuación, puede simplemente hacer matemáticas regular para ver cuántos segundos han transcurrido, o utilizar el módulo de fecha y hora de hacer timedeltas.
Otros consejos
Una forma
>>> import time
>>> t=time.strptime("Thu, 16 Jul 2009 15:18:22 EDT","%a, %d %b %Y %H:%M:%S %Z")
>>> sevendays=86400*7
>>> current=time.strftime ("%s",time.localtime())
>>> if int(current) - time.mktime(t) > sevendays:
print "more than 7 days"
también se puede ver el módulo de fecha y hora y hacer uso de timedelta () para cálculos de fechas.
Si instala el dateutil módulo:
import dateutil.parser as dp
import dateutil.tz as dtz
import datetime
date_string=u'Thu, 16 Jul 2009 15:18:22 EDT'
adatetime=dp.parse(date_string)
print(adatetime)
# 2009-07-16 15:18:22-04:00
now=datetime.datetime.now(dtz.tzlocal())
print(now)
# 2010-02-04 23:35:52.428766-05:00
aweekago=now-datetime.timedelta(days=7)
print(aweekago)
# 2010-01-28 23:35:52.428766-05:00
if adatetime<aweekago:
print('old news')
Si está utilizando Ubuntu, dateutil
es proporcionado por el paquete python-dateutil
.