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

TOP » UsersWiki » nao-pon » blog » 2006-07-28

IP から ccTLD (国別コード)を得る anchor.png

ちょっと前から、いじっているサイト YouTube NAVI は、内容がワールドワイドなコンテンツなので、Amazon のアソシエイツも各国のそれに参加しています。

当初は、ブラウザが送ってくる Accept-Charset を見て判別して振り分けていたのですが、Accept-Charset はあくまでも言語指定であって、住んでる地域とは一致しないので、IPを元にアクセス元の国を判別してみようと思い立ちました。

調べてみると、 (api.hostip.info) で、APIとして公開されていたので使ってみたのですが、正しく取得できない場合があったので、自前で構築してみました。

まずは、リストの取得ですが 不正アクセスの発信地の国別統計をとろう! で Nakamura Minoru さんという方が、世界に4ヶ所ある IP アドレスを管理している組織が公開しているデータをまとめて公開されているのを発見!

そちらのデーターを元に MySQL にデータベースを作成し、PHPスクリプトで問い合わせをする関数を作ってみました。

  • まずは、MySQL のテーブル構造
    • (hypweb.net)
  • そして、肝心要のデーター
    • (hypweb.net)
  • そして最後にPHPスクリプトの関数
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    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接続情報を指定してください。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      
      $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 です。

API として利用するなら (hypweb.net) として IPを与えてください。

現状では利用にあたり制限をしていませんが、継続性は保証できません。ある日突然なくなるかもしれないので、ご了承ください。

一式諸々をパックしておきました。ご自由にお使いください。

  • fileip2tld.zip
    • rename.config.php の内容を設定して config.php とリネームしてください。 ;)




Front page   Freeze 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: 253, today: 1, yesterday: 0
Princeps date: 2006-07-28 (Fri) 01:32:42
Last-modified: 2006-07-28 (Fri) 01:32:42 (JST) (6271d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





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

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

もっと...
サイト情報