Universal Feed Parserを使用してRSSフィード内の拡張要素のコレクションを読み取る

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

  •  04-07-2019
  •  | 
  •  

質問

ユニバーサルフィードパーサーで拡張要素のコレクションを読み取る方法はありますか?

これはKuler RSSフィードからの短い断片です:

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

次のことを試しました:

>>> 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 は、最後の kuler:swatchHexColor のみを返します。 feedparser ですべての要素を取得する方法はありますか?

minidomを使用してこの問題を既に回避していますが、可能であれば(非常に単純なAPIのため)ユニバーサルフィードパーサーを使用したいと思います。拡張できますか?私はドキュメントでそれについて何も見つけていないので、誰かがライブラリの経験があれば、教えてください。

役に立ちましたか?

解決

ユニバーサルフィードパーサーは、ほとんどのフィードに本当に適していますが、拡張フィードには、 BeautifulSoup 。これはもともとスクリーンスクレイピング用に設計されたXML / HTML / XHTML解析ライブラリです。この種のものにとっても素晴らしいことです。ドキュメントは非常に優れており、自明のAPIが用意されているため、他の何かを使用することを考えているなら、それがお勧めです。

おそらく次のように使用します:

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

だから、おそらくこれは非常にクールなライブラリであるという考えを得ることができます。古いRSSフィードを解析していたとしても、あまり良いことではありませんが、データはAdobe Kulerからのものであるため、アプリを壊すほど変化しないことを確信できます(つまり、信頼できる十分なソースです)。

さらに悪いことに、Adobeのひどい.ASE形式を解析しようとしています。私はそれのためにパーサーを書いてみましたが、本当に恐ろしく、本当に速くなりました。例えばそのため、おそらく、RSSフィードはKulerとのインターフェースとして最も簡単な方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top