a-blog cms で どこどこ.jpを使用してみる


IPから地域を判別して表示するコンテンツを制御してみる

今回は、どこどこ.jpというサービスを使い、アクセスしている地域により表示するコンテンツを制御してみたいと思います。

例えば、制作会社一覧ページにアクセスした時にアクセスしている県で絞り込んで表示しています。

制作者会社一覧



どこどこ.jpとは


どこどこJPは、IPアドレスと様々な情報を紐づけたIP Geolocation & IP Intelligence データベースを搭載したAPI。IPアドレスからユーザーの地域を認識するエリアターゲティングの技術や、Webアクセス解析、金融や証券分野でのオンライン取引時における不正アクセス対策、デジタル配信される映像や音楽の著作権管理などに役立てられています。犯罪捜査やセキュリティ技術など高い精度が必要とされる場面での活用のために、全世界のIPアドレスデータを搭載しているだけでなく、継続した調査によってデータの品質を向上させる取り組みを日々行っています。

公式サイトより引用

つまり、IPアドレスから地域などの情報を引っ張ってこれるサービスです。 このサービスを使ってa-blog cmsで出力コンテンツを制御してみたいと思います。

どこどこ.jpの使い方

どこどこ.jpを使う為には2つの方法があります。

REST版とJS版がありますが、JS版を使うとあまりCMS関係なく実装できますので、 今回はあえてREST版を使用してa-blog cmsに組み込んでいきます。

今回使用する機能

  • どこどこ.jp (REST版)
  • Hook.phpでグローバル変数の拡張
  • ポストインクルード

以上3つの機能を使ってa-blog cmsで、どこどこ.jpを使えるようにします。

STEP 1 Hook.phpをカスタマイズ

Hook.phpとはa-blog cmsのコア機能をカスタマイズ出来るものになります。 Hook.phpには様々な処理が実行されるタイミングで呼び出される物があり、今回はグローバル変数をつくる処理をHookして独自のグローバル変数を作ります。

Hook.phpを有効にする

config.server.phpのHOOK_ENABLEに"1"を設定する事によりHookが使用できるようになります。

define('HOOK_ENABLE', 1);
Hook.phpをカスタマイズ

/php/ACMS/User/Hook.phpをエディタで開き、"extendsGlobalVars" に処理を書いていきます。 "extendsGlobalVars"をカスタマイズする事により、独自のグローバル変数を追加出来ます。

//------------------------------------------------------------------------------------
// どこどこ.jpへのリクエスト数を制限する為に /production 以下で実行
if ( preg_match('@^/production@', REQUEST_PATH) ) {
    
    //---------------------------------------
    // どこどこ.jpへのリクエストURL
    $api = 'http://api.docodoco.jp/v4/search?key1=key1値&key2=key2値&format=json&ipadr='.REMOTE_ADDR; // REMOTE_ADDRはリクエスト元IPアドレスのグローバル変数
    
    //---------------
    // リクエスト
    $req  =& new HTTP_Request($api, array(
        'timeout'     => 2,
        'readTimeout' => array(5, 0),
    ));
    $req->setMethod('get');
    $error = false;
    if ( $req->sendRequest() ) {
        if ( $req->getResponseCode() != 200 ) $error = true;
        $res = $req->getResponseBody();
    } else {
        $error = true;
    }

    //---------------------------------------------------------------------------
    // エラーがなかったらjsonをデコードしてグローバル変数生成
    if ( 1
        && !$error
        && $json = json_decode($res)
    ) {
        foreach ( $json as $key => $val ) {
            $globalVars->set($key, $val);
        }
    }
}

こんな感じでどこどこ.jpで取得できる情報をグローバル変数化する事ができます。

どこどこ.jpで取得できる主な情報
  • IP: "IPアドレス"
  • DomainName: "ドメイン名"
  • DomainType: "ドメインタイプ"
  • LineJName: "回線名"
  • ProxyFlag: "0"
  • TimeZone: "+0900"
  • ContinentCode: "3"
  • CountryCode: "JP"
  • CountryAName: "Japan"
  • CountryJName: "日本"
  • RegionCode: "04"
  • PrefCode: "23"
  • PrefAName: "aichi"
  • PrefJName: "愛知"
  • PrefLatitude: "35.18093"
  • PrefLongitude: "136.90654"
  • CityCode: "23100"
  • CityAName: "nagoya-shi"
  • CityJName: "名古屋市"
  • CityLatitude: "35.18093"
  • CityLongitude: "136.90654"
  • CityCF: "55"

STEP 2 グローバル変数を使ってポストインクルード

これで、a-blog cmsでどこどこ.jpの情報をグローバル変数として使えるようになったので、 これを使いポストインクルードしてみましょう。

前提条件として、エントリーのカスタムフィールド名 "partnerPref" に県名が入力されているものとします。

<section id="partnerBannerBox" class="mainModuleBox">
<h2><span class="acms-icon-shortcut"></span>%{PrefJName}のビジネスパートナー</h2>
<p><a href="http://www.docodoco.jp/">どこどこ.jp</a> のapiを使用して表示しています。( %{PrefJName} %{CityJName} lat:%{CityLatitude} lng:%{CityLongitude} )</p>
<form action="" method="post" class="js-post_include-ready">    <input type="hidden" name="partnerPref" value="%{PrefJName}" />
    <input type="hidden" name="partnerPref@operator" value="lk" />
    <input type="hidden" name="field[]" value="partnerPref" />
    <input type="hidden" name="tpl" value="include/main/partnerBannerAjax.html" />
    <input type="hidden" name="bid" value="%{BID}" />
    <input type="hidden" name="ACMS_POST_2GET" />
</form>
</section>

まず、formのclassにjs-post_include-readyを指定する事によりページが読み込まれたタイミングで ポストインクルードが動くようになります。

次に引っ張ってくる内容ですが、以下の部分で、エントリーカスタムフィールドのpartnerPref%{PrefJName}を含むエントリーを絞り込むようにしています。

<input type="hidden" name="partnerPref" value="%{PrefJName}" />
<input type="hidden" name="partnerPref@operator" value="lk" />
<input type="hidden" name="field[]" value="partnerPref" />

最後に

<input type="hidden" name="tpl" value="include/main/partnerBannerAjax.html" />

でテンプレートを指定して上げて、そのテンプレートにEntry_Summaryなどのモジュールなどを貼付ければ完成です。

今回カスタマイズした制作会社検索ページ

という事で、a-blog cmsでどこどこ.jpを使う方法(REST版)をご紹介させて頂きました。 アクセスする人により表示するコンテンツを制御できると、いろいろ提案の幅も広がると思います。

是非お試しを!

同じタグ付けがされている記事