Lecture de collections d'éléments étendus dans un flux RSS avec Universal Feed Parser

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

  •  04-07-2019
  •  | 
  •  

Question

Existe-t-il un moyen de lire une collection d'éléments d'extension avec Analyseur de flux universel ?

Il ne s'agit que d'un court extrait du flux RSS de Kuler:

<channel>
  <item>
    <!-- snip: regular RSS elements -->
    <kuler:themeItem>
      <kuler:themeID>123456</kuler:themeID>
      <!-- snip -->
      <kuler:themeSwatches>
        <kuler:swatch>
          <kuler:swatchHexColor>FFFFFF</kuler:swatchHexColor>
          <!-- snip -->
        </kuler:swatch>
        <kuler:swatch>
          <kuler:swatchHexColor>000000</kuler:swatchHexColor>
          <!-- snip -->
        </kuler:swatch>
      </kuler:themeSwatches>
    </kuler:themeItem>
  </item>
</channel>

J'ai essayé les solutions suivantes:

>>> feed = feedparser.parse(url)
>>> feed.channel.title
u'kuler highest rated themes'
>>> feed.entries[0].title
u'Foobar'
>>> feed.entries[0].kuler_themeid
u'123456'
>>> feed.entries[0].kuler_swatch
u''

feed.entries [0] .kuler_swatchhexcolor ne renvoie que le dernier kuler: swatchHexColor . Est-il possible de récupérer tous les éléments avec feedparser ?

J'ai déjà résolu ce problème en utilisant minidom, mais j'aimerais si possible utiliser Universal Feed Parser (grâce à une API très simple). Peut-il être prolongé? Je n'ai rien trouvé à ce sujet dans la documentation. Si quelqu'un a plus d'expérience dans la bibliothèque, veuillez m'en informer.

Était-ce utile?

La solution

Universal Feed Parser est très utile pour la plupart des flux, mais pour les flux étendus, vous pouvez essayer quelque chose appelé BeautifulSoup . C'est une bibliothèque d'analyse XML / HTML / XHTML qui a été conçue à l'origine pour la capture d'écran. il s'avère que c'est aussi brillant pour ce genre de chose. La documentation est très bonne et son API est explicite. Si vous envisagez d'utiliser autre chose, c'est ce que je recommanderais.

Je l'utiliserais probablement comme ceci:

>>> import BeautifulSoup
>>> import urllib2

# Fetch HTML data from url
>>> connection = urllib2.urlopen('http://kuler.adobe.com/path/to/rss.xml')
>>> html_data = connection.read()
>>> connection.close()

# Create and search the soup
>>> soup = BeautifulSoup.BeautifulSoup(html_data)
>>> themes = soup.findAll('kuler:themeitem') # Note: all lower-case element names

# Get the ID of the first theme
>>> themes[0].find('kuler:themeid').contents[0]
u'123456'

# Get an ordered list of the hex colors for the first theme
>>> themeswatches = themes[0].find('kuler:themeswatches')
>>> colors = [color.contents[0] for color in
... themeswatches.findAll('kuler:swatchhexcolor')]
>>> colors
[u'FFFFFF', u'000000']

Donc, vous pouvez probablement avoir l’idée que c’est une bibliothèque très cool. Cela ne serait pas très bien si vous analysiez n'importe quel ancien flux RSS, mais comme les données proviennent d'Adobe Kuler, vous pouvez être presque certain que cela ne va pas varier suffisamment pour casser votre application (c'est-à-dire que la source est suffisamment fiable).

Le pire est d’essayer d’analyser le foutu format .ASE d’Adobe. J'ai essayé d'écrire un analyseur syntaxique pour cela et ça a été vraiment horrible, très vite. Ug. Donc, oui, les flux RSS sont probablement le moyen le plus simple de s’interfacer avec Kuler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top