1

このコードを使用して、HTTParty gem を使用して og メタ タグを解析しようとしています。

link = http://www.usatoday.com/story/gameon/2013/01/08/nfl-jets-tony-sparano-fired/1817037/
# link = http://news.yahoo.com/chicago-lottery-winners-death-ruled-homicide-181627271.html
resp = HTTParty.get(link)
ret_body = resp.body

# title
  og_title = ret_body.match(/\<[Mm][Ee][Tt][Aa] property\=\"og:title\"\ content\=\"(.*?)\"\/\>/)
  og_title = og_title[1].to_s

問題は、一部のサイト (yahoo!) では機能したが、他のサイト (今日のアメリカ) では機能しなかったことです。

4

3 に答える 3

4

正規表現を使用して HTML を解析しないでください。最も単純な問題以外には脆弱すぎるためです。HTML にわずかな変更を加えるだけでパターンが崩れ、拡大し続けるパターンを維持するためのゆっくりとした戦いが始まります。勝てない戦争です。

代わりに、HTML パーサーを使用してください。Ruby にはノコギリがあり、優れています。これが私があなたが望むことをする方法です:

require 'nokogiri'
require 'httparty'

%w[
  http://www.usatoday.com/story/gameon/2013/01/08/nfl-jets-tony-sparano-fired/1817037/
  http://news.yahoo.com/chicago-lottery-winners-death-ruled-homicide-181627271.html
].each do |link|
  resp = HTTParty.get(link)

  doc = Nokogiri::HTML(resp.body)
  puts doc.at('meta[property="og:title"]')['content']
end

どの出力:

ジェッツの攻撃コーディネーター、トニー・スパラノ
シカゴの宝くじ当選者の死は殺人と判断
于 2013-01-08T17:58:33.750 に答える
1

おそらく私はより簡単な解決策を提供できますか?OpenGraphジェムをチェックしてください。

これは、Web サイトからの Open Graph プロトコル情報を解析するための単純なライブラリであり、問​​題を解決するはずです。

于 2014-02-16T12:09:49.220 に答える
0

解決:

og_title = ret_body.match(/\<[Mm][Ee][Tt][Aa] property\=\"og:title\"\ content\=\"(.*?)\"[\s\/\>|\/\>]/)
og_title = og_title[1].to_s

末尾の空白は解析を台無しにするので、必ず確認してください。正規表現に OR 句を追加して、末尾の空白と末尾の空白の両方を許可しました。

于 2013-01-08T17:38:45.033 に答える