Sitecore では既定では IPアドレスからGeolocation情報を取得する Lookup プロバイダーとして MaxMind 社のサービスを使用するプロバイダーが既定で提供されセットアップしています。MaxMind社のLookupサービスは一定期間もしくは一定回数使用することができます。MaxMind社の提供するGeolocationサービスは使用期間(もしくは上限回数)が切れると使用できなくなります。

今回はフリーのGeolocation API サービスプロバイダーとして ip-api。日本語のサポートを受けることができるサービスプロバイダーとして どこどこJP というGeolocation APIを提供するサービスプロバイダーを使用する Lookup プロバイダーを実装してみました。

ip-api は無料でIPからGeolocation情報を提供するサービスを提供していますが、同一のIPアドレスから1分あたり 240回以上のAPI呼び出しを受けると その IP アドレスからのAPI呼び出しが禁止されるのでご注意ください。どこどこJPは法人使用の場合は 評価期間以降は有料のサービスになるということも覚えておいてください。それぞれのサービスの情報に関しては下記UROをご参照ください。

IP Geolopcation API
http://ip-api.com/docs/
どこどこJP
http://www.docodoco.jp/index.html

1.ソースプログラムとdll

ソースプログラムは GitHub にて公開しています。ソリューション事態は Visual Studio 2013 で作成しています。詳細は下記URLをご参照ください。

https://github.com/madoibito/SitecoreGeoLocationLookupProvider

Sitecore 7.X 用に .NET 4.5 をターゲットバージョンとしてビルドした dll もここからダウンロードできます。最新版は GitHubからソースを取得していただきビルドしていただくのが良いと思います。

2.IP-API用の Lookup Provider を使用する場合

IP-APIを使用する Lookup Provider を使用する方法を記載します。

Sitecore.Analytics.config のlookupManager の設定で、下記のように デフォルトの MaxMndProviderを使用する要素をコメントにして、IpApiProvider を使用する設定を記述します。

    <lookupManager defaultProvider="default">
      <providers>
        <clear/>
        <add name="default" type="Netplanetes.Analytics.Lookups.IpApi.IpApiProvider,Netplanetes.Analytics.Lookups"/>
        <!--
        <add name="default" type="Sitecore.Analytics.Lookups.MaxMindProvider,Sitecore.Analytics"/>
        -->
      </providers>
    </lookupManager>

同じく Sitecore.Analytics.config ファイルに次の設定を追加します。UrlTemplate は 問い合わせを行うエンドポイントのURLのテンプレートになります。{0}はGeolocation情報を取得するIPアドレス用のプレースホルダーです。

      <setting name="Netplanetes.Lookup.UrlTemplate" value="http://ip-api.com/xml/{0}" />

そのほか、問い合わせのタイムアウト時間(ミリ秒) を指定するために Netplanetes.Lookup.Timeout を setting 要素に設定することもできます。既定値で 30000ミリ秒です。

3. どこどこJP用の Lookup Provider を使用する場合

IP-APIと同じように Sitecore.Analytics.config を編集します。

Sitecore.Analytics.config のlookupManager の設定で、下記のように デフォルトの MaxMndProviderを使用する要素をコメントにして、DocoDocoJpProvider を使用する設定を記述します。

    <lookupmanager defaultprovider="default">
      <providers>
        <clear>
        <add name="default" type="Netplanetes.Analytics.DocoDocoJp.DocoDocoJpProvider,Netplanetes.Analytics.Lookups">
        <!--
        <add name="default" type="Sitecore.Analytics.Lookups.MaxMindProvider,Sitecore.Analytics"/>
        -->
      </add></clear></providers>
    </lookupmanager>

同じくSitecore.Analytics.coonfig ファイルに次の設定を追加します。UrlTemplateは問い合わせを行うエンドポイントのURLのテンプレートになります。{0}は問い合わせ対象のIPアドレスのプレースホルダーになります。{1},{2} には、 それぞれ、 サービスプロバイダーにリクエストをする際に必要な ApplicationId, ApplicationSecret 用のプレースホルダーになります。Netplanetes.Lookup.ApplicationId と Netplanetes.Lookup.ApplicationSecret 用の設定値はどこどこJPでAPI利用申請をしていただき、発行されるAPIキーの  key1, key2 をそれぞれ設定してください。

      <setting name="Netplanetes.Lookup.UrlTemplate" value="http://api.docodoco.jp/v4/search?key1={0}&amp;key2={1}&amp;ipadr={2}" />
      <setting name="Netplanetes.Lookup.ApplicationId" value="XXXXXX" />
      <setting name="Netplanetes.Lookup.ApplicationSecret" value="YYYYY" />

どこどこJPのLookup Provider を使用する場合もip-api を使用する場合も同様に 問い合わせのタイムアウト時間(ミリ秒) を指定するために Netplanetes.Lookup.Timeout を setting 要素に設定することもできます。既定値で 30000ミリ秒です。