Ruby で IPアドレスからロケーション情報を拾ってみる
2014年2月22日 No Comments on Ruby で IPアドレスからロケーション情報を拾ってみるなんとなくできるかなと思って試したら、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] 以上
Read more
Recent Comments