なんか他に再利用できそうなイディオムなのでメモ。
コード
Nokogiri::HTML(open(url)).xpath('//hogehoge').children.map{ |e|
case e.text.strip
when /データ年次.*?:(.*)$/
{year:$1.strip}
when /情報.*?:(.*)/
{tag:$1.strip}
when /再配布可否.*?:(.*)$/
{redistribution_allowed:$1.strip}
when /商用利用可否.*?:(.*)$/
{commercial_use_allowed:$1.strip}
when /テータ提供.*?:(.*)$/
{provider:$1.strip}
when /問い合わせ先電話番号.*?:(.*)$/
{tel:$1.strip}
when /内容.*?:(.*)$/
{description:$1.strip}
when /コメント.*?:(.*)$/
{comment:$1.strip}
end
}.compact.inject(&:merge)
簡単な手順
- ノコギリで
のっとうぇるすとらくちゃあど
なテキストを要素単位へギコギコして配列を作る。 -
case
のwhen
で正規表現にマッチさせたのをHash
にしてmap
する。(ちなみに、マッチした内容は$1
とかで取れる。あとゴミが混じるのでついでにstrip
も。) -
case
でマッチしない場合はnil
になるのでcompact
する。 - それを
inject(&:merge)
して1つのHash
へ結合する。 - できた!
ポイント
- やんわり。
- お手軽。
- マッチさせたい対象と
Hash
のキーの対応が見やすい。 - 条件追加しやすい。
-
map.compact.inject(&:merge)
が楽しい。