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

19年2月23日(Sat) 2時42分
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 とリネームしてください。 ;)




新しくコメントをつける

題名
ゲスト名
投稿本文

より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 10790, today: 1, yesterday: 3
初版日時: 2006-07-28 (金) 01:32:42
最終更新: 2006-07-28 (金) 01:32:42 (JST) (4593d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

新規登録 | パスワード紛失



メインメニュー
UsersWiki メニュー
付箋メニュー
付箋メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:
 
ブックマーク
オンサイトブックマークは
ログインするとご利用になれます
[ログインする]
サイト内 Wiki
☆ 検索 ☆



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

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

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

nao-pon
 

登録ユーザ数: 4598


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