Ruby で IPアドレスからロケーション情報を拾ってみる
2014年2月22日
なんとなくできるかなと思って試したら、Mechanizeで簡単に実装できたので紹介。
以下のソースを test.rbなどとして保存し、コマンドライン引数にIPアドレスを与えて実行すると、ロケーション情報を出力する。実装方法はWebでロケーション情報を提供しているページに対して、POSTでリクエストを投げつけて、Responseを拾うという方式。なので、ループ処理などでやたらめったらリクエストを投げ続けたら、多分文句言われますので、利用はほどほどに。
第一引数: IPアドレス
第二引数: サイトNo (1 or 2 default 1)
ソースコード (test.rb)
[ruby]
require ‘mechanize’
require ‘json’
client = Mechanize.new
ipaddr = ARGV[0]
siteno = ARGV[1].nil? ? 1 : ARGV[1]
pp “siteno=” + siteno.to_s
if siteno == 1
url = “http://ip2loc.jerodsanto.net/lookup”
ret = client.post(url,{ip: ipaddr})
else
url = “http://www.yougetsignal.com/tools/network-location/php/get-network-location-json.php”
ret = client.post(url,{remoteAddress:ipaddr,geoSource:”geoip”})
end
json_data = JSON.parse(ret.body)
json_data.each do |key,value|
p key + “–” + value.to_s
end
[/ruby]
実行結果1 (ip2loc.jerodsanto.netを利用)
[bash]
$ ruby test.rb 42.83.7.20 1
“siteno=1”
“request–42.83.7.20”
“ip–42.83.7.20”
“country_code2–JP”
“country_code3–JPN”
“country_name–Japan”
“continent_code–AS”
“region_name–25”
“city_name–Miyazaki”
“postal_code–”
“latitude–31.911100000000005”
“longitude–131.4239”
“dma_code–”
“area_code–”
“timezone–Asia/Tokyo”
[/bash]
実行結果2 (www.yougetsignal.comを利用)
[bash]
$ ruby test.rb 42.83.7.20 2
“siteno=2”
“status–Success”
“ipAddress–42.83.7.20”
“hostname–42-83-7-20.btvm.ne.jp”
“baseDomain–ne.jp”
“countryCode–Unknown”
“countryFlag–<img src=\”/img/flags/.gif\” alt=\”\” />”
“countryName–Unknown”
“region–Unknown”
“city–Unknown”
“latitude–Unknown”
“longitude–Unknown”
“areaCode–Unknown”
“postalCode–Unknown”
[/bash]
以上
Leave a comment