hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

TOP » UsersWiki » nao-pon » blog » Backup diff of nao-pon/blog/2006-07-28(No. 1)
1: 2006-07-28 (Fri) 10:32:42 source
Line 1: Line 1:
 +#freeze uid:1 aid:0 gid:0
 +// author:1
 +// author_ucd:dQh9JbjdAEAY nao-pon
 +** IP から ccTLD (国別コード)を得る [#l40617ff]
 +#keyword()
 +#category(#right,:Blog,プログラミング)
 +ちょっと前から、いじっているサイト [[YouTube NAVI:http://youtube.navi-gate.org/]] は、内容がワールドワイドなコンテンツなので、Amazon のアソシエイツも各国のそれに参加しています。
 +
 +当初は、ブラウザが送ってくる Accept-Charset を見て判別して振り分けていたのですが、Accept-Charset はあくまでも言語指定であって、住んでる地域とは一致しないので、IPを元にアクセス元の国を判別してみようと思い立ちました。
 +
 +調べてみると、http://api.hostip.info/ で、APIとして公開されていたので使ってみたのですが、正しく取得できない場合があったので、自前で構築してみました。
 +
 +まずは、リストの取得ですが [[不正アクセスの発信地の国別統計をとろう!:http://www.nminoru.jp/~nminoru/memo/ip-address/what_country_from.html]] で Nakamura Minoru さんという方が、世界に4ヶ所ある IP アドレスを管理している組織が公開しているデータをまとめて公開されているのを発見!
 +
 +そちらのデーターを元に MySQL にデータベースを作成しまし、PHPスクリプトで問い合わせるものを作ってみました。
 +
 +-まずは、MySQL のテーブル構造
 +--http://hypweb.net/api/ip2tld/sql/ip2tld_table.sql.txt
 +-そして、肝心要のデーター
 +--http://hypweb.net/api/ip2tld/sql/ip2tld_dat.txt
 +-そして最後にPHPスクリプトの関数
 +<<<
 +function ip2tld($ip)
 +{
 +    global $config;
 +
 +    if (preg_match("/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/",$ip,$arg))
 +    {
 +     $ip = $arg[1];
 +    }
 +    else
 +    {
 +     $ip = "";
 +    }
 +
 +    $tld = "";
 +
 +    if ($ip)
 +    {
 +     $ips = explode(".",$ip);
 +     $ip = $ips[0] * 16777216 + $ips[1] * 65536 + $ips[2] * 256 + $ips[3];
 +
 +     // データベースに接続し、選択する
 +     $link = mysql_connect($config['db']['host'], $config['db']['user'], $config['db']['pass'])
 +         or die("Could not connect");
 +     //print "Connected successfully";
 +     mysql_select_db($config['db']['name'],$link)
 +         or die("Could not select database");
 +
 +     // SQLクエリを実行する
 +     $query = "SELECT tld FROM `{$config['ip2tld']['table']}` WHERE start <= $ip AND end >= $ip LIMIT 1";
 +     //echo $query;
 +     $result = mysql_query($query)
 +         or die("Query failed");
 +
 +     // HTMLに結果を出力する
 +     list($tld) = mysql_fetch_row($result);
 +
 +     // 接続を閉じる
 +     mysql_close($link);
 +    }
 +
 +    if (!$tld) $tld = "XX";
 +
 +    return $tld;
 +}
 +>>>
 +--$config に配列として DB接続情報を指定してください。
 +<<<
 +$config = array();
 +
 +// DB setting //
 +$config['db']['host'] = "localhost"; // MySQL Server host
 +$config['db']['name'] = "db name";  // MySQL DB name
 +$config['db']['user'] = "user name"; // MySQL User name
 +$config['db']['pass'] = "password";  // MySQL Password
 +// ---------- //
 +
 +$config['ip2tld']['table'] = "ip2tld_dat"; // DB Table name (ip2tld_dat)
 +>>>
 +
 +----
 +
 +これを利用したのが [[Convert IP to ccTLD:http://hypweb.net/api/ip2tld/form.php]] です。~
 +API として利用するなら http://hypweb.net/api/ip2tld/?ip= として IPを与えてください。~
 +現状では利用にあたり制限をしていませんが、継続性は保証できません。ある日突然なくなるかもしれないので、ご了承ください。
 +
 +一式諸々をパックしておきました。ご自由にお使いください。
 +-&ref(ip2tld.zip);
 +--rename.config.php の内容を設定して config.php とリネームしてください。 ;)
 +
 +----
 +#comment(,btn:つっこみ)
 +----
 +***似たような BLOG [#p891d865]
 +#blogs(like)
 +#ping(http://www.blogpeople.net/servlet/weblogUpdates,http://i-uranai.net/tb.php/aries/)


Front page   Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 75, today: 1, yesterday: 0
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
オンライン状況
45 人のユーザが現在オンラインです。 (2 人のユーザが UsersWiki を参照しています。)

登録ユーザ: 0
ゲスト: 45

もっと...
サイト情報