Pergunta

Eu iterar um feed RSS como assim, onde _file é o feed

d = feedparser.parse(_file)
for element in d.entries: 
    print repr(element.date)

A saída data sai como assim

u'Thu, 16 Jul 2009 15:18:22 EDT'

Eu não consigo entender como realmente quantificar a saída de data acima para que eu possa usá-lo para limitar os elementos de alimentação. I Então o que eu estou pedindo é como posso obter um tempo real fora deste, para que eu possa dizer se maior do que 7 dias de idade, ignorar este elemento.

Foi útil?

Solução

feedparser é suposto dar-lhe um objeto struct_time do módulo de tempo de Python. Eu estou supondo que não reconhece que o formato de data e por isso é dando-lhe a corda crua.

Veja aqui sobre como adicionar suporte para analisar timestamps malformados:

http://pythonhosted.org/feedparser/date-parsing.html

Se você conseguir obtê-lo para dar-lhe a struct_time, você pode ler mais sobre isso aqui:

http://docs.python.org/library/time.html # time.struct_time

objetos struct_time tem tudo que precisa. Eles têm esses membros:

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)

Eu geralmente converter as estruturas de segundos, como este:

import time
import calendar

struct = time.localtime()
seconds = calendar.timegm(struct)

Depois, é só fazer matemática regular para ver quantos segundos se passaram, ou utilizar o módulo de data e hora para fazer timedeltas.

Outras dicas

uma maneira

>>> 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"

Você também pode ver a datetime módulo e fazer uso de timedelta () para cálculos de data.

Se você instalar o 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')

Se você estiver usando Ubuntu, dateutil é fornecido pelo pacote python-dateutil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top