2009-06-20 4 views
1

Il semblerait que http://portland.beerandblog.com/feed/atom/ soit foiré (comme le sont les fils RSS 0.92 et 2.0).Problème lors de l'obtention de la date avec Universal Feed Parser

Universal Feed Parser (dernière version de http://code.google.com/p/feedparser/source/browse/trunk/feedparser/feedparser.py?spec=svn295&r=295) ne voit aucune date.

<title>Beer and Blog Portland</title> 
    <atom:link href="http://portland.beerandblog.com/feed/" rel="self" type="application/rss+xml" /> 
    <link>http://portland.beerandblog.com</link> 
    <description>Bloggers helping bloggers over beers in Portland, Oregon</description> 
    <pubDate>Fri, 19 Jun 2009 22:54:57 +0000</pubDate> 
    <generator>http://wordpress.org/?v=2.7.1</generator> 
    <language>en</language> 
    <sy:updatePeriod>hourly</sy:updatePeriod> 
    <sy:updateFrequency>1</sy:updateFrequency> 
        <item> 
      <title>Widmer is sponsoring our beer for the After Party!!</title> 
      <link>http://portland.beerandblog.com/2009/06/19/widmer-is-sponsoring-our-beer-for-the-after-party/</link> 
      <comments>http://portland.beerandblog.com/2009/06/19/widmer-is-sponsoring-our-beer-for-the-after-party/#comments</comments> 
      <pubDate>Fri, 19 Jun 2009 22:30:35 +0000</pubDate> 
      <dc:creator>Justin Kistner</dc:creator> 

      <category><![CDATA[beer]]></category> 

J'essaie

 
     try: 
      published = e.published_parsed 
     except: 
      try: 
       published = e.updated_parsed 
      except: 
       published = e.created_parsed 

et ça ne parce que je ne peux pas obtenir une date.

Avez-vous des idées sur la façon d'extraire la date de manière raisonnable?

Merci!

+0

Le lien que vous avez donné a cette balise, 2009-06-19T22: 54: 57Z, qui après analyse (updated_parsed) donne ce tuple 9 de Python: (2009, 6, 19, 22, 54, 57, 4 , 170, 0) qui semble être une manière raisonnable d'extraire une date. – bernie

+0

Merci pour la réponse. Je ne reçois rien pour d.updated_parsed. Je reçois d.modified Le problème est, c'est pour le flux entier et pas les entrées spécifiques. Avec le temps, c'est probablement moins important: je ne fais rien en temps réel et les nouveaux articles devraient être plus ou moins en même temps que le flux lui-même. – jdeibele

+0

Test, je reçois d.updated mais pas d.updated_parsed. Ce qui est bizarre, puisque http://www.feedparser.org/docs/reference-feed-updated.html dit "Cet élément est analysé comme une date et stocké dans feed.updated_parsed." – jdeibele

Répondre

1

L'utilisation d'un except nu peut masquer un problème dans votre code. En supposant que (je n'utilise parseurs d'alimentation) qui AttributeError est l'exception spécifique que vous devriez vérifier, essayez (jeu de mots accidentel) ceci:

try: 
    published = e.published_parsed 
except AttributeError: 
    try: 
     published = e.updated_parsed 
    except AttributeError: 
     published = e.created_parsed 

Dans tous les cas, au lieu de « il est défaillant », s'il vous plaît montrer le message d'erreur et le retraçage.

Modifier J'ai télécharger la dernière version (ie pas de svn) et suivi l'exemple dans la documentation avec ce résultat:

C:\feedparser>\python26\python 
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on 
win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import feedparser 
>>> d = feedparser.parse('http://portland.beerandblog.com/feed/atom/') 
>>> d.entries[0].updated 
u'2009-06-19T22:54:57Z' 
>>> d.entries[0].updated_parsed 
time.struct_time(tm_year=2009, tm_mon=6, tm_mday=19, tm_hour=22, tm_min=54, tm_sec=57, tm_wday=4, tm_yday=170, tm_isdst=0) 
>>> d.entries[0].title 
u'Widmer is sponsoring our beer for the After Party!!' 
>>> d.entries[0].published 
u'2009-06-19T22:30:35Z' 
>>> d.entries[0].published_parsed 
time.struct_time(tm_year=2009, tm_mon=6, tm_mday=19, tm_hour=22, tm_min=30, tm_sec=35, tm_wday=4, tm_yday=170, tm_isdst=0) 
>>> 

Comme je l'ai dit, je ne suis pas en RSS et Atomes et similaires, mais il semble être assez simple pour moi. Sauf que je ne comprends pas où vous obtenez l'étiquette <pubDate> et les timestamps de style arpanet; AFAICT qui ne figure pas dans la source première - il a <published> et ISO: horodatages

>>> import urllib 
>>> guff = urllib.urlopen('http://portland.beerandblog.com/feed/atom/').read() 
>>> guff.find('pubDate') 
-1 
>>> guff.find('published') 
1171 
>>> guff[1160:1200] 
'pdated>\n\t\t<published>2009-06-19T22:30:35' 
>>> 

Quelle est votre "e" dans "e.published_parsed"? Envisager de montrer l'histoire complète en accédant à feedparser, comme je l'ai fait ci-dessus.

+0

Vous avez certainement raison de spécifier l'erreur que je recherche et je suis allé de l'avant et fait maintenant. Merci. Le problème que j'ai est que tous les 3 n'existent pas. De la documentation à http://www.feedparser.org/ je m'attendrais à ce que e.published_parsed fonctionne et les autres pas tellement. Ce blog fonctionne sous WordPress 2.71 ce qui est assez actuel. Ce qui me dérange, c'est que feedparser ne voit clairement pas les différents articles "pubDate" qui sont dans le flux. http://pastebin.com/m1c614fce a le journal de ce que voit le feedparser. – jdeibele

3

Works pour moi:

>>> e = feedparser.parse('http://portland.beerandblog.com/feed/atom/') 
>>> e.feed.date 
u'2009-06-19T22:54:57Z' 
>>> e.feed.date_parsed 
(2009, 6, 19, 22, 54, 57, 4, 170, 0) 
>>> e.feed.updated_parsed 
(2009, 6, 19, 22, 54, 57, 4, 170, 0) 

Peut-être que vous cherchez e.updated_parsed où vous devriez rechercher e.feed.updated_parsed à la place?

Questions connexes