Lectura de colecciones de elementos extendidos en una fuente RSS con Universal Feed Parser

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

  •  04-07-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma de leer una colección de elementos de extensión con Universal Feed Parser ?

Esto es solo un breve fragmento de la fuente 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>

He intentado lo siguiente:

>>> 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 solo devuelve el último kuler: swatchHexColor . ¿Hay alguna forma de recuperar todos los elementos con feedparser ?

Ya he solucionado el problema utilizando minidom, pero me gustaría usar Universal Feed Parser si es posible (debido a una API muy simple). ¿Se puede ampliar? No he encontrado nada sobre eso en la documentación, así que si alguien tiene más experiencia con la biblioteca, por favor, avíseme.

¿Fue útil?

Solución

Universal Feed Parser es realmente bueno para la mayoría de las fuentes, pero para las fuentes extendidas, es posible que quieras probar algo llamado BeautifulSoup . Es una biblioteca de análisis XML / HTML / XHTML que está diseñada originalmente para captura de pantalla; Resulta que también es genial para este tipo de cosas. La documentación es bastante buena, y tiene una API que se explica por sí misma, así que si estás pensando en usar otra cosa, eso es lo que recomendaría.

Probablemente lo usaría así:

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

Así que probablemente puedas tener la idea de que esta es una biblioteca muy buena. No sería demasiado bueno si estuviera analizando cualquier fuente RSS anterior, pero como los datos son de Adobe Kuler, puede estar bastante seguro de que no variará lo suficiente como para interrumpir su aplicación (es decir, es una fuente lo suficientemente confiable).

Peor aún es tratar de analizar el maldito formato .ASE de Adobe. Intenté escribir un analizador para eso y se puso realmente horrible, muy rápido. Ug. Entonces, sí, las fuentes RSS son probablemente la forma más fácil de interactuar con Kuler.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top