位置情報データの取得
このページの翻訳は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サービス
GeoIPManagerサービスという公開APIを使って、特定のIPアドレスのGeoIPデータを取得します:
Sitecore.CES.GeoIp.Core.IGeoIpManager.GetGeoIpData(string ipAddress,TimeSpan? timeout = null)
!注このトピックで言及されたすべての設定設定は
\App_Config\Sitecore\ DetectionServices.Location\ Sitecore.CES.GeoIp.config設定ファイルに含まれています。
特定のIPアドレスのAPIを呼び出すと、以下の順番でGeoIPデータの存在を確認します。
- メモリキャッシュ
- データベースについて
- ジオロケーションサービス
結果が見つかると、それ以上は調査しません。以下のセクションでは、各位置をどのようにチェックするかを詳しく説明します。
メモリキャッシュ
ここでAPIは指定されたIPアドレスのGeoIPデータを最初に検索します。2つの設定設定で、キャッシュのサイズと各IPアドレスのデータがキャッシュにどれくらい長く残るかが指定されています。
データベースについて
VisitGeoIpDataのテーブルは暗号化されたIPアドレスと関連するGeoIPデータを格納します。設定で以下のことを指定できます:
- GeoIPデータの寿命。
設定で別の時刻を指定することもできます。 - 使用データベース、
設定で別のデータベースを指定することもできます。connectionstring.configファイル内で定義された任意のデータベースを指定できます。データベースは読み書き操作をサポートし、VisitGeoIpテーブルを含む必要があります。 - クリーンアップエージェント。デフォルトでは1日に1回実行されます。<agent type="Sitecore.CES.GeoIp.Core.Database.CleanupAgent, Sitecore.CES.GeoIp.Core" method="Run" interval="24:00の設定設定で別の周波数" async="true" resolve="true">指定できます。
また、アクティブジオレプリケーションの設定も可能で、読み取り専用のレプリケートデータベースを使用します。
設定で読み取り専用データベースを指定します。 設定で書き込み可能なデータベースを指定します。
両方のデータベースにはVisitGeoIpDataテーブルが含まれていなければなりません。
!注実際にアクティブなジオレプリケーションを使うときだけCES.GeoIp.ConnectionName.Writable指定してください。使わない場合は、この値を空欄のままにしてください。
ジオロケーションサービス
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
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
- Disabled
- Invalid: 提供されたIPアドレスは無効です
- Failed: APIがエラーに遭遇し失敗しました
GetWhoIsInformationByIp API
このAPIは後のバージョンで削除されますが、現時点では後方互換性のために存在しています。内部的にはGeoIpManagerサービスを呼び出します。