「トランジション採用」でフリーランスの正社員転換を支援 他
- 隔週月曜更新!フリーランス・副業ニュース
ユーザーの位置情報の取得は、さまざまなビジネスやサービスにとって大きな活用の可能性を秘めています。
スケジュールや文化圏、通貨、そして世界観までをも、ユーザーの位置情報からある程度読み取ることが可能でしょう。位置情報から得られるデータは、営業活動や新規ユーザーの獲得、SNSのいいね獲得、そして強固なUXを築けるポテンシャルを秘めています。
たとえばユーザーがアメリカからWebサイトにアクセスしたことが分かれば、Webサイトの言語を自動的に英語に切り替えられます。ECサイトならば、アクセス元の国によって通貨表示や配送方法を柔軟に変更することも可能でしょう。またGDPRなど、各国の法律に最適化したサービス提供も位置情報によって叶えられます。もし実店舗ビジネスならば、ユーザーの現在地から最も近い店舗を知らせることもできるでしょう。
そんな位置情報ですが、ユーザーの端末が持つ「IPアドレス」を取得することでWebと現実世界を結びつけているのです。膨大なデータベースからIPアドレスの位置を特定し、国名や通貨、大陸などの重要な詳細情報を返してくれるのです。
ただし、位置情報の取得は自力で行うと開発費が高額になり、また何万ものSQLを発行するため運用コストもかさみます。多くのスモールビジネスには非常に難しいのが現実です。
そこでおすすめしたいのが『IP Geolocation API』です。機能数と返ってくるデータ量は限定されている一方で、ユーザーの正確な位置情報取得を無料で行えるのです。IP Geolocation APIはデータをJSONオブジェクトで返し、その多くの情報をサイトで使用できます。
この記事では、そんなIP Geolocation APIの使い方をご紹介します。
IP Geolocation APIはどの言語でも利用できますが、最も一般的なのはJavaScriptです。しかし後ほどデザインをカスタマイズしたいので、ここではフロントエンド技術に頼りたくありません。代わりにPHPを用いてページを書いてみましょう。
まずは新規ファイルを作成し、”country.php”と名付け、自身の開発環境かFTPクライアントからPHPファイルを実行可能な場所へアップロードしてください。次に、ファイルを開き中身を編集します。
PHPファイルを開き、
<?php
IPアドレスの位置を取得するファンクションを作成します。
Function grabIpInfo($ip)
{
}
PHPでファンクションを書くことに慣れていなくても、心配しないでください。すべて後にクリアになります。(簡単に言うと、このファンクションを呼び出しIPアドレスを渡すと、ブラケット内で実行されるのです)
ブラケット内では、APIからデータを取得するため、PHP標準のcURLを使います。
$curl = curl_init();
このコードは、cURLセッションを初期化します。
次に、cURLセッションにオプションを設定します。ひとつ目のオプションがとても重要で、ここにはロードするAPI(https://api.ipgeolocationapi.com/geolocate/)をセットします。ふたつ目には実際のIPアドレス(ファンクションを呼び出すときに渡した$ipパラメーター)をセットします。
curl_setopt($curl, CURLOPT_URL, "https://api.ipgeolocationapi.com/geolocate/" . $ip);
次のオプションで、データをStringで返すかどうかを設定します。Stringの場合はtrueです。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
次にcURLセッションを実行し、ファンクションから返すため新たな変数にデータを保存します。
$returnData = curl_exec($curl);
そしてcURLセッションを閉じます。
curl_close($curl);
最後に、取得したデータを返します。
return $returnData;
注意してほしいのは、上のコードはすべて波括弧内に書くということです。
これで、私たちは好きなだけファンクションを呼んでデータにアクセスできます。
$ipInfo = grabIpInfo("91.213.103.0");
変数$ipInfoには、IPアドレスに関する大量の優れたデータが返ってきています。もしそのデータを見たければ、PHPのechoを使って出力をしましょう。
echo $ipInfo;
最後に、PHPを忘れずに閉じましょう。
?>
ここまでくれば、ブラウザでファイルを実行できます。ファイルを実行すると、以下のようなものが出てくるでしょう。
{"continent":"Europe","address_format":"{{recipient}}\n{{street}}\n{{postalcode}}
{{city}}\n{{country}}","alpha2":"DE","alpha3":"DEU","country_code":"49","international_prefix":"00","ioc":"GER","gec":"GM","name":"Germany","national_destination_code_lengths":[2,3,4,5],"national_number_lengths":[6,7,8,9,10,11],"national_prefix":"0","number":"276","region":"Europe","subregion":"Western
Europe","world_region":"EMEA","un_locode":"DE","nationality":"German","eu_member":true,"eea_member":true,"vat_rates":{"standard":19,"reduced":[7],"super_reduced":null,"parking":null},"postal_code":true,"unofficial_names":["Germany","Deutschland","Allemagne","Alemania","ドイツ","Duitsland"],"languages_official":["de"],"languages_spoken":["de"],"geo":{"latitude":51.165691,"latitude_dec":"51.20246505737305","longitude":10.451526,"longitude_dec":"10.382203102111816","max_latitude":55.0815,"max_longitude":15.0418962,"min_latitude":47.2701115,"min_longitude":5.8663425,"bounds":{"northeast":{"lat":55.0815,"lng":15.0418962},"southwest":{"lat":47.2701115,"lng":5.8663425}}},"currency_code":"EUR","start_of_week":"monday"}
こんな簡単にこれらのデータが取得できてしまうなんて本当に驚きですが、このままではあまり実用的ではありません。なので、データから必要な箇所を取り出せるようにする必要があります。
ファイルを開き、echoからはじまる行を消して、以下のコードに書き換えましょう。
$ipJsonInfo = json_decode($ipInfo);
これで、JSON stringをアクセス可能なオブジェクトに変換できます。
次に、あなたが取り出したいデータをechoしましょう。この場合だと、nameプロパティを取り出すことで国名を表示させられます。
echo $ipJsonInfo->name;
もう一度ファイルを実行すると、ブラウザに”Germany”という文字が出ることが確認できると思います。
これでも十分ですが、より使えるコードにするためにはもうひとつするべきことがあります。それは、ページにアクセスしてくる人たちの国を調べるために、動的にIPアドレスを取得することです。
JavaScriptでコードを書く場合、IP Geolocation APIが必要なことをすべてやってくれるのですが、あいにく今回はPHPです。なので、$_SERVER[“REMOTE_ADDR”]を使用して、ユーザーのIPアドレスを取得しましょう。
ファンクション呼び出し時のIPアドレスを、動的な方法に置き換えます。
$ipInfo = grabIpInfo($_SERVER["REMOTE_ADDR"]);
もう一度ファイルを実行すると、今度はあなた自身の国名がブラウザに出力されます。(もしなにも出力されない場合、ローカルで試していて検知不可能なIPアドレスになっているかもしてません。ウェブ上にファイルをアップロードし、正しく動くか試してみてください)
以下が全体のコードです。
<?php
function grabIpInfo($ip)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.ipgeolocationapi.com/geolocate/" . $ip);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$returnData = curl_exec($curl);
curl_close($curl);
return $returnData;
}
$ipInfo = grabIpInfo($_SERVER["REMOTE_ADDR"]);
$ipJsonInfo = json_decode($ipInfo);
echo $ipJsonInfo->name;
?>
ここまでで分かったように、IP Geolocation APIを用いれば位置情報の取得はは非常に簡単にできます。この手のデータに無料でアクセスできるというのは、すべての開発者にとって素晴らしいことでしょう。
IP Geolocation APIから得られる位置情報データはMaxMindから取得しているため(※MaxMindデータベースは最も信頼されているデータベースのひとつ)、信頼性の高い正確なデータをプレミアムなプロバイダーから無料で取得していることになります。
IP Geolocation APIは、位置情報技術を扱うにはうってつけのAPIです。一度使いはじめたら、もう手放せなくなるでしょう。
(原文:WDD Staff 翻訳:Shimizu Yui)
位置情報を活用したIoTアプリケーションがビジネスにもたらすものとは
Workship MAGAZINE
マルチテクノロジーを用いたジオロケーションIoTの未来
Workship MAGAZINE
開発者必見!IoTにおけるREST APIの基本まとめ
Workship MAGAZINE