Domanda

I iterare un feed RSS in questo modo dove _file è il feed

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

L'output data viene fuori in questo modo

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

I cant sembrano capire come quantificare in realtà la data di uscita di cui sopra in modo da poter usare per limitare elementi feed. Mi Quindi quello che chiedo è come posso ottenere un tempo effettivo di questo, quindi posso dire se è maggiore di 7 giorni di età, saltare questo elemento.

È stato utile?

Soluzione

feedparser si suppone per darvi un oggetto struct_time dal modulo tempi di Python. Sto indovinando che non riconosce che il formato della data e così si sta dando la stringa prima.

Vedi qui su come aggiungere il supporto per l'analisi timestamp malformati:

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

Se si riesce a farlo per darvi la struct_time, si può leggere di più su questo qui:

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

oggetti struct_time hanno tutto il necessario. Hanno questi membri:

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)

Io in genere convertire lo struct per secondi, in questo modo:

import time
import calendar

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

Poi si può solo fare matematica regolare per vedere quanti secondi sono trascorsi, o utilizzare il modulo datetime di fare timedeltas.

Altri suggerimenti

Un modo

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

è possibile vedere anche il modulo datetime e fare uso di timedelta () per calcoli di data.

Se si installa il dateutil modulo:

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 si sta utilizzando Ubuntu, dateutil è fornito dal pacchetto python-dateutil.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top