スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DoCoMoの機種名とユーザエージェントを取得する

昨日と同じノリで、DoCoMoのユーザエージェントのページからシリーズ名、機種名、ユーザエージェントを取得してCSVで出力します。
rubyとnokogiriを使っています。
DoCoMoのこのページでは、テーブル構造が複雑なのでxpathでtdを根こそぎ持ってきた後、ロジックでゴリゴリ組んでいます。「DoCoMo」という文字列が来たらユーザエージェントと決めうちしたり、tdのclassでシリーズ名を決めうちしたりなど、やってます。
# -*- coding: utf-8 -*-
require 'nokogiri'
require 'open-uri'
require 'kconv'

# テキストノードのみ回収する
def getValue(td)
result = ""
xpath = %{.//span}
spanList = td.xpath(xpath)
if nil == spanList || 0 == spanList.size
return ""
end
spanList.each(){|span|
children = span.children
children.each(){|node|
if "text" == node.name
result = result + node.text()
end
}
}
return result.gsub("\n", "")
end

url = "http://www.nttdocomo.co.jp/service/imode/make/content/spec/useragent/"
xpath = %{//td}
nokogiri = Nokogiri::HTML.parse(open(url).read.toutf8, nil, 'UTF-8')
tdlist = nokogiri.xpath(xpath)
serias = ""
kisyu = ""
xpath = %{.//span}
tdlist.each(){|td|
# ヘッダーは処理しない
if "brownLight acenter middle" == td["class"]
next
end

# シリーズ取得
if "acenter middle" == td["class"]
serias = td.text()
next
end

# 機種名またはユーザエージェント取得
val = getValue(td)
index = val.index("mova")
if val.start_with?("DoCoMo") || val == "" || nil != index
#N2701対応
if nil != val.index("mova")
#「・FOMAモード」と「・movaモード」を取り除く
val = val.toutf8
val.sub!("・FOMAモード", "")
val.sub!("・movaモード", "")
end
# ユーザエージェントのあるもののみ出力
if val != ""
# 複数ユーザエージェントがある場合は別々に出力
ary = val.split("DoCoMo")
ary.each(){|v|
if v != ""
puts "#{serias},#{kisyu},DoCoMo#{v}"
end
}
end
else
# 機種名の取得
kisyu = val
end
}
スポンサーサイト

Tag : ruby

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。