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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top