Domanda

Esiste un modo per leggere una raccolta di elementi di estensione con Universal Feed Parser ?

Questo è solo un breve frammento del feed RSS di 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>

Ho provato quanto segue:

>>> 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 restituisce solo l'ultimo kuler: swatchHexColor . Esiste un modo per recuperare tutti gli elementi con feedparser ?

Ho già risolto il problema usando minidom, ma vorrei usare Universal Feed Parser, se possibile (grazie ad una API molto semplice). Può essere esteso? Non ho trovato nulla al riguardo nella documentazione, quindi se qualcuno ha più esperienza con la biblioteca, per favore, avvisami.

È stato utile?

Soluzione

Universal Feed Parser è davvero utile per la maggior parte dei feed, ma per i feed estesi, potresti voler provare qualcosa chiamato BeautifulSoup . È una libreria di analisi XML / HTML / XHTML originariamente progettata per lo screenscraping; risulta anche brillante per questo genere di cose. La documentazione è abbastanza buona e ha un'API autoesplicativa, quindi se stai pensando di usare qualcos'altro, è quello che consiglierei.

Probabilmente lo userei così:

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

Quindi probabilmente puoi avere l'idea che questa è una libreria molto interessante. Non sarebbe troppo bello se stavi analizzando un vecchio feed RSS, ma poiché i dati provengono da Adobe Kuler, puoi essere abbastanza sicuro che non varierà abbastanza da interrompere la tua app (cioè è una fonte abbastanza affidabile).

Ancora peggio sta cercando di analizzare il dannato formato .ASE di Adobe. Ho provato a scrivere un parser per questo ed è diventato davvero orribile, molto velocemente. Ug. Quindi, sì, i feed RSS sono probabilmente il modo più semplice per interfacciarsi con Kuler.

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