---
title: "位置情報データの取得"
slug: "retrieve-geolocation-data"
abstract: "GeoIP APIを使って、インタラクションやIPアドレスから位置情報を取得する方法。"
---
# 位置情報データの取得

Sitecoreは、ジオロケーションデータを扱うためのAPIサービスを提供しています。例えば、リクエストのIPアドレスから都市、国、地域を取得することが可能です。

トラッカー APIは、Sitecore.Analytics.Tracker.Current.Interaction.GeoDataプロパティの助けを借りて現在のやり取りに関するGeoIPデータへのアクセスを提供します。例えば、以下のコードを使って現在のやり取りの国を取得することができます:

var country = Sitecore.Analytics.Tracker.Current.Interaction.GeoData.Country;

特定のIPアドレスの位置情報データを取得することもできます。この目的には2つの方法があります。

-   Sitecore.Analytics.Lookups.GeoIPManager
-   Sitecore.CES.GeoIp.Core.Lookups.LookupManager.GetWhoIsInformationByIp(...)

## GeoIPManagerサービスを利用する

IPアドレスの位置情報データを取得するために、Sitecore.Analytics.Lookups.GeoIPManagerサービスはローカルメモリキャッシュとReferenceDataサービスで検索を行います。もしそこでデータが見つからない場合は、別のスレッドを作成し、位置情報サービスからデータを取得するためにSitecore.CES.GeoIp.Core.Lookups.LookupManagerを呼び出します。

この例は、IPアドレスから国をSitecore.Analytics.Lookups.GeoIpManagerで解析する方法を示しています:

using System;
using System.Net;
using Sitecore.Analytics.Lookups;
using Sitecore.Analytics.Model;
…
public string GetCountryByIp(IPAddress ipAddress)
{
 var millisecondsTimeout = 2000;
 var options = new GeoIpOptions(ipAddress, millisecondsTimeout);
 // For Sitecore version prior to 9.1.1
 //var addressBytes = ipAddress.GetAddressBytes();
 //var options = new GeoIpOptions();
 //options.Ip = GeoIpManager.IpHashProvider.ResolveIpAddress(addressBytes);
 //options.Id = GeoIpManager.IpHashProvider.ComputeGuid(addressBytes);
 //options.MillisecondsTimeout = millisecondsTimeout;
 string country = DefaultCountry; //will be used if we are not be able to resolve the country using service.

 try
 {
 var result = GeoIpManager.GetGeoIpData(options);
 if (result.ResolveState == GeoIpResolveState.Resolved &&
 result.WhoIsInformation != null)
 {
 country = result.WhoIsInformation.Country;
 }
 }
 catch (Exception)
 {
 // Handle the exceptions
 }
 return country;
}

GeoIpOptions変数を作成する際には、millisecondsTimeoutパラメータを設定しなければなりません。このパラメータは、メソッドがデータを解決するまでの待ち時間を定義します。メソッドが定義された時間内にデータを取得できない場合、プロセスは空のGeoIpResultを返し、バックグラウンドでそのまま進みます。これにより、データの解決に時間がかかりすぎる場合にメソッドがリクエストをブロックするのを防ぎます。

データ解決の遅延が発生した場合にページ読み込みに余計な実行時間が加わらないように、millisecondsTimeoutを数秒以内に設定することをお勧めします。

> !注millisecondsTimeoutを \-1に設定すると、メソッドはサービスからの応答を無限に待ちます。

## GetWhoIsInformationByIp APIを使いましょう

位置情報データを解決するには、Sitecore.CES.GeoIp.Core.Lookups.LookupManager.GetWhoIsInformationByIp(...)の基礎APIも利用できます。これは位置情報サービスに直接送られます。ただし、このAPIには待機タイムアウト機能がないため、リクエストスレッドから呼び出す際は注意することをお勧めします。

デフォルトでは、サービスはキャッシュを使用しません。キャッシュを有効にするには:

1.  SitecoreインスタンスでApp\_Config\\Sitecore\\DetectionServices.Location\\Sitecore.CES.GeoIP.config設定ファイルを閲覧して、CES.GeoIp.Caching.GeoIpCacheSize設定の場所を見つけてください。
    
2.  パッチ [ファイル](https://doc.sitecore.com/xp/en/developers/100/platform-administration-and-architecture/en/configuration-patching.html) を作成して、CES.GeoIp.Caching.GeoIpCacheSize設定を使いたいキャッシュのサイズに変更してください。
    
    > !注この設定の使い方の詳細については、設定ファイルの説明を参照してください。