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

19年7月19日(Fri) 18時03分
TOP » UsersWiki » nao-pon » blog » 2006-07-28

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

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

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

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

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

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

  • まずは、MySQL のテーブル構造
  • そして、肝心要のデーター
  • そして最後に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 として利用するなら http://bit.ly/5acUKS (hypweb.net) として IPを与えてください。

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

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

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




Post a new comment

Subject
guestname
Body

Go to richer form

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: 11278, today: 3, yesterday: 5
Princeps date: 2006-07-28 (Fri) 01:32:42
Last-modified: 2006-07-28 (Fri) 01:32:42 (JST) (4739d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証 | SSLログイン

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 45 人がオンライン中 :-)
(UsersWiki : 4 人)

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

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4610


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報