0

わかりにくいかもしれませんが頑張ります。私は現在、RSS ウィジェットを備えたダッシュボード デザイナー (シナトラ ベース) であるダッシュを使用しています。問題は、各 RSS アイテムの前に小さな画像を取得できないことです。

<description>
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' /&gt;
&lt;br/&gt;&lt;br/&gt;21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</description>

コードが少し奇妙に見えることはわかっていますが、Web ページでは 21:03 までのすべてのものは無視されます。ウィジェットにプレーンテキストで統合するために、小さなロゴをページに統合するか、少なくとも行番号 (バス路線 -> ここでは D) を取得するにはどうすればよいですか? それが役立つかどうかはわかりませんが、nogokiri を使用して RSS フィードから XML を取得しています。では、この情報を取得するためにそこに何を置くことができますか?

summary = clean_html( news_item.xpath('description').text )

前もって感謝します :)

4

1 に答える 1

1

タグのコンテンツ<description>は HTML でエンコードされているため、HTML にデコードしてから再解析する必要があります。

require 'nokogiri'

doc = Nokogiri::XML::DocumentFragment.parse(<<EOT)
<description>
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' /&gt;
&lt;br/&gt;&lt;br/&gt;21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</description>
EOT

タグを見つける方法は次のとおりです。

description_text = doc.at('description')

そのコンテンツにアクセスするには、次を使用します。

description_text = doc.at('description').text 
# => "\n<img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' />\n<br/><br/>21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n"

そのコンテンツで何かをするには:

description_doc = Nokogiri::HTML::DocumentFragment.parse(description_text)
description_doc.at('img')['src'] # => "http://pitre-web.tpg.ch/images?ligne=D"

実際の XML は、質問で与えられたものと一致しません。これは、何が発生したかを示すより良い例です。

<?xml version='1.0' encoding='UTF-8'?>
<rss>
  <channel>
    <title />
    <description />
    <item>
      <description>
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=2' title='Perturbation Ligne 2' alt='Perturbation Ligne 2' /&gt;
      &lt;br/&gt;&lt;br/&gt;18:47 - Surcharge de trafic - Retard de 8 minutes entre Marbriers et Gen&amp;egrave;ve-Plage.
      </description>
    </item>
    <item>
      <description>
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=19' title='Perturbation Ligne 19' alt='Perturbation Ligne 19' /&gt;
      &lt;br/&gt;&lt;br/&gt;18:43 - Cimeti&amp;egrave;re Saint-Georges - direction Vernier-Village - Incident &amp;agrave; bord du v&amp;eacute;hicule - Immobilisation du v&amp;eacute;hicule
      </description>
    </item>
    </channel>
</rss>

それに基づいて、URL を抽出するコードは次のとおりです。

require 'nokogiri'
doc = Nokogiri::XML(open('xml'))
img_srces = doc.search('item description').map{ |description|
  desc_doc = Nokogiri::HTML(description.text)
  desc_doc.at('img')['src']
}
img_srces
# => ["http://pitre-web.tpg.ch/images?ligne=2",
#     "http://pitre-web.tpg.ch/images?ligne=19"]
于 2014-11-14T22:10:53.857 に答える