تقييد عناصر RSS حسب التاريخ مع FeedParser. [بيثون

StackOverflow https://stackoverflow.com/questions/2204858

  •  18-09-2019
  •  | 
  •  

سؤال

أهدأ بتغذية RSS مثل أين _file هو الأعلاف

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

مخرج التاريخ يخرج مثل

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

لا أستطيع أن أفهم كيفية تقدير بالفعل إخراج التاريخ أعلاه حتى أتمكن من استخدامه للحد من عناصر التغذية. أنا كذلك ما أسأل عنه هو كيف يمكنني الخروج من الوقت الفعلي من هذا، حتى أتمكن من القول إذا كان أكبر ثم 7 أيام، تخطي هذا العنصر.

هل كانت مفيدة؟

المحلول

من المفترض أن يعطيك FeedParser كائنا بتنظما من الوحدة النمطية الزمنية لبثون. أنا أظن أنه لا يتعرف على هذا التنسيق التاريخ، وبالتالي فإنه يمنحك السلسلة الخام.

انظر هنا حول كيفية إضافة دعم لتحليل الطوابع الزمنية المشوهة:

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

إذا تمكنت من الحصول عليها لإعطائك Bystem_Time، فيمكنك قراءة المزيد حول ذلك هنا:

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

الكائنات الهيكلية لديها كل ما تحتاجه. لديهم هؤلاء الأعضاء:

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)

أنا عموما تحويل الهياكل إلى ثوان، مثل هذا:

import time
import calendar

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

ثم يمكنك فقط القيام بالرياضيات العادية لمعرفة عدد الثواني التي انقضت، أو استخدم وحدة DateTime للقيام TimeDeltas.

نصائح أخرى

اتجاه واحد

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

يمكنك أيضا رؤية DateTime. الوحدة والاستفادة من TimeDelta () لحسابات التاريخ.

إذا قمت بتثبيت dateutil. وحدة:

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')

إذا كنت تستخدم Ubuntu، dateutil يتم توفيرها من قبل python-dateutil صفقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top