Lesen Sammlungen von erweiterten Elemente in einem RSS-Feed mit der Universal-Feed Parser

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

  •  04-07-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit, eine Sammlung von Erweiterungselementen zu lesen mit Universal-Feed-Parser ?

Dies ist nur ein kurzer Ausschnitt aus Kuler RSS-Feed:

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

Ich habe versucht, die folgenden:

>>> 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 kehrt erst im letzten kuler:swatchHexColor. Gibt es eine Möglichkeit, alle Elemente mit feedparser zurückzuholen?

Ich habe bereits rund um das Thema arbeitet von minidom, aber ich möchte Universal-Feed-Parser verwenden, wenn möglich (aufgrund sehr einfacher API). Kann es verlängert werden? Ich habe nichts darüber in der Dokumentation, so dass, wenn jemand mehr Erfahrung mit der Bibliothek hat, bitte, mich raten.

War es hilfreich?

Lösung

Universal-Feed Parser ist wirklich schön für die meisten Feeds, aber für längere Feeds, könnten Sie wollen versuchen, etwas namens BeautifulSoup . Es ist eine XML / HTML / XHTML Parsing-Bibliothek, die ursprünglich für Screenscraping ausgelegt ist; für diese Art der Sache auch brillant dreht es heraus. Die Dokumentation ist ziemlich gut, und es ist eine selbsterklärende API bekommt, wenn Sie also die Verwendung von irgendetwas anderen denken, das ist, was ich empfehlen würde.

Ich würde wahrscheinlich es wie folgt verwendet werden:

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

So werden Sie wahrscheinlich auf die Idee kommen können, dass dies eine sehr kühle Bibliothek ist. Es wäre nicht so gut sein, wenn Sie all alten RSS-Feeds wurden Parsen, sondern weil die Daten von Adobe Kuler sind, können Sie ziemlich sicher sein, dass es wird nicht variieren genug, um Ihre App zu brechen (dh es ist eine vertrauenswürdige genug Quelle).

Noch schlimmer versucht Adobe goddamn .ase Format zu analysieren. Ich habe versucht, einen Parser für sie zu schreiben und es wurde wirklich schrecklich, wirklich schnell. Ug. Also, ja, ist der RSS-Feeds wahrscheinlich der einfachste Weg, mit Kuler als Schnittstelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top