1. Webトラッキング

ジオロケーションデータの取得

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

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

トラッカー APIは、Sitecore.Analytics.Tracker.Current.Interaction.GeoDataプロパティの助けを借りて、現在のインタラクションのGeoIPデータへのアクセスを提供します。たとえば、次のコードを使用して、現在のインタラクションの国を取得できます。

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

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

  • Sitecore.DependencyInjection.ServiceLocator.ServiceProvider.GetRequiredService<Sitecore.CES.GeoIp.Core.IGeoIpManager>().GetGeoIpData(...)

  • Sitecore.CES.GeoIp.Core.Lookups.LookupManager.GetWhoIsInformationByIp(...)

GeoIPManagerサービス

公開APIであるGeoIPManagerサービスを使用して、特定のIPアドレスのGeoIPデータを取得します。

Sitecore.CES.GeoIp.Core.IGeoIpManager.GetGeoIpData(string ipAddress,TimeSpan? timeout = null)
メモ

このトピックで説明するすべての構成設定は、<wwwroot>\App_Config\Sitecore\ DetectionServices.Location\ Sitecore.CES.GeoIp.config構成ファイルに含まれています。

特定のIPアドレスに対してAPIを呼び出すと、次の順序でGeoIPデータの存在がチェックされます。

  1. メモリキャッシュ

  2. データベース

  3. ジオロケーションサービス

結果が見つかった場合、それ以上のチェックは行いません。次のセクションでは、さまざまな場所をチェックする方法について詳しく説明します。

メモリキャッシュ

これは、APIが指定されたIPアドレスのGeoIPデータを検索する最初の場所です。次の2つの構成設定では、このキャッシュのサイズと、各IPアドレスのデータがキャッシュに保持される期間を指定します。

<setting name="CES.GeoIp.Caching.GeoIpCacheExpiryTime" value="1:00:00:00"/>
<setting name="CES.GeoIp.Caching.GeoIpCacheSize" value="5MB"/>

データベース

VisitGeoIpDataテーブルには、暗号化されたIPアドレスと関連するGeoIPデータが格納されます。設定では、次の項目を指定できます。

  • GeoIPデータの有効期間: テーブル内のレコードのデフォルトの有効期限は、挿入後1年です。<setting name="CES.GeoIp.Database.MaxEntryLifetime" value="365:00:00:00">設定で別の時間を指定できます。

  • 使用するデータベース: デフォルトで使用されるデータベースはWebですが、<setting name="CES.GeoIp.ConnectionName" value="web">設定で別のデータベースを指定できます。connectionstring.configファイルで定義されている任意のデータベースを指定できます。データベースは読み取り/書き込み操作をサポートする必要があり、VisitGeoIpテーブルが含まれている必要があります。

  • エージェントのクリーンアップ: エージェントは、実行時に期限切れのレコードをパージします。デフォルトでは、1日1回実行されます。<agent type="Sitecore.CES.GeoIp.Core.Database.CleanupAgent, Sitecore.CES.GeoIp.Core" method="Run" interval="24:00:00" async="true" resolve="true">構成設定で別の周波数を指定できます。

また、読み取り専用のレプリケートされたデータベースを使用するアクティブgeoレプリケーションを構成することもできます。

  • <setting name="CES.GeoIp.ConnectionName" value="read-only database name">構成設定で読み取り専用データベースを指定します。

  • <setting name="CES.GeoIp.ConnectionName.Writable" value="writable database name ">構成設定で書き込み可能なデータベースを指定します。

両方のデータベースにVisitGeoIpDataテーブルが含まれている必要があります。

手記

CES.GeoIp.ConnectionName.Writableは、アクティブgeoレプリケーションを実際に使用する場合にのみ指定します。そうでない場合は、この値を空白のままにします。

ジオロケーションサービス

APIは、メモリ キャッシュもデータベースにも必要なデータがない場合の最後のステップとして位置情報サービスを使用します。特定のIPアドレスの結果を受け取ると、その結果をデータベースに格納し、メモリ キャッシュにも追加します。

GeoIPManagerServiceの使用

次の例は、Sitecore.CES.GeoIp.Core.IGeoIpManagerAPIを使用して特定のIPアドレスの国を解決する方法を示しています。  

using Microsoft.Extensions.DependencyInjection;
using Sitecore.CES.GeoIp.Core;
using Sitecore.CES.GeoIp.Core.Model;
using Sitecore.DependencyInjection;
public string GetCountryByIp(string ipAddress)
{
    try
    {
        var country = string.Empty;

            var geoIpManager = ServiceLocator.ServiceProvider.GetRequiredService<IGeoIpManager>();

            var geoIpFetchedData = geoIpManager.GetGeoIpData(ipAddress);

            if (geoIpFetchedData.Status == GeoIpFetchDataStatus.Fetched && geoIpFetchedData.WhoIsInformation != null)
            {
                country = geoIpFetchedData.WhoIsInformation.Country;
            }    
    }
    catch (Exception)
    {
        // Handle the exceptions
    }
    return country;
}

GetGeoIpDataメソッドには、TimeSpan timeoutというオプションのパラメーターがあります。これは、メソッドがデータの解決を待機する時間を指定します。メソッドが指定された時間内にデータを取得できない場合、プロセスはUnknown Ip Address with Timeout statusを返し、バックグラウンドで続行します。これにより、データの解決に時間がかかりすぎる場合に、メソッドが要求をブロックするのを防ぐことができます。このパラメーターをメソッドに渡さない場合は、CES.GeoIp.LookupRequestTimeoutで指定された値が使用されます。タイムアウトを数秒以下に設定して、データ解決の遅延が発生した場合にページの読み込みに余分な実行時間が追加されないようにすることをお勧めします。

タイムアウトをTimeSpan.Maxに設定すると、メソッドはサービスからの応答を永久に待機します。

APIは、タイプがSitecore.CES.GeoIp.Core.Model.GeoIpFetchedDataのオブジェクトを返します。このオブジェクトには、Sitecore.CES.GeoIp.Core.Model.GeoIpFetchDataStatusの結果のステータスと地理データの結果が含まれます。ステータス値は、次のいずれかです。

  • Fetched: 正常に完了しました

  • Timeout: まだ完了しておらず、タイムアウトのため戻ってきました

  • Unknown: IPアドレスが不明です

  • Disabled: APIは無効です

  • Invalid: 指定されたIPアドレスが無効です

  • Failed: APIでエラーが発生し、失敗しました

GetWhoIsInformationByIp API

このAPIは今後のバージョンで削除される予定ですが、現時点では下位互換性のために存在します。内部的には、GeoIpManagerサービスを呼び出します。

この記事を改善するための提案がある場合は、 お知らせください!