
九保すこひです(フリーランスのITコンサルタント、エンジニア)
さてさて、16本のマーケティング講義をすでに3周してますが、量をこなすためいろいろ調べたら「これは自分もやられてたな」という手法を見つけました。
それは・・・・・・
位置情報マーケティング
です。例えば、
- 裕福なエリアに住んでいれば、高額な商品を買いやすい
- 地方エリアなら移動手段を考えてクルマ関連の商品
- 家族が多いエリアならキッズ商品
などなど、いろんなパターンが存在するわけ。
そして、実はIPアドレスがあれば(だいたい)アクセス位置が分かるサービスがあったりします。
そこで
今回は以下のような人のために記事をお届けします。
- Laravelと位置情報を絡めた機能をつくりたい
- Laravelでマーケティングの機能をつくってみたい
- Laravelの知識をとにかく貯めておきたい
ぜひ最後まで読んでください
「マーケティングも領域が広いから
学ぶこといっぱい!」
前提として
Laravel
にログイン機能がインストールされていることが前提です。
以下のページを参考にして先に用意しておいて下さい。
参照ページ: Laravel Breezeで「シンプルな」ログイン機能をインストール
IPinfoのトークンを取得する
IPinfo はIP
アドレスからその場所を取得することが出来るサービスで月50,000
回まで無料で使用することができます。(2024.5.9
現在)
※ ただし取得出来る情報は最低限のものだけです。詳しくはこちら
では、まずは IPinfo へ移動し、 右上の「Sing up」ボタンをクリックします。
すると、フォームが表示されるので、名前とメールアドレス、パスワードを入力して送信します。
すると、認証メールが届くので「Verify email address」ボタンをクリック。
これで、本登録が完了し自動ログインされます。
すると、移動後のページ下部にトークンが表示されています。
これをLaravel
でいつでも使えるように.env
にセットしておきましょう。
.env
IPINFO_TOKEN=(ここにトークン)
※ 本来はconfig
に入れておくべきですが、今回は省略します。
DB周りをつくる
では、まずはモデルとマイグレーションをつくりましょう。
以下のコマンドを実行して下さい。
php artisan make:model UserLocation -m
すると、ファイルが作成されるので中身を以下のように変更します。
app/Models/UserLocation.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UserLocation extends Model
{
use HasFactory;
protected $fillable = [
'user_id',
'city',
'region',
'country',
];
}
database/migrations/****_**_**_******_create_user_locations_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('user_locations', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id')->comment('ユーザー ID');
$table->string('city')->comment('市区町村');
$table->string('region')->comment('都道府県');
$table->string('country')->comment('国');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('user_locations');
}
};
今回は「市区町村、都道府県、国」での判別ですがIPinfo
では無料版でも以下のような情報を取得することができます。
- 市区町村(都市名)
- 都道府県(地方名)
- 国
- 緯度経度(GPS)
- 組織(プロバイダー)
- 郵便番号
- タイムゾーン
では、この状態でマイグレーションを実行してみましょう。
以下のコマンドを実行して下さい。
php artisan migrate
すると、実際のテーブルはこうなりました。
ログインをキャッチするイベントリスナーをつくる
では、ログインしたときに自動で実行されるコード(リスナー)をつくっておきましょう。
app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use App\Models\UserLocation;
use Illuminate\Auth\Events\Login;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Event::listen(
Login::class,
[$this, 'onLogin']
);
}
public function onLogin(Login $event): void
{
$ip = request()->ip();
$token = env('IPINFO_TOKEN');
$url = 'https://ipinfo.io/'. $ip .'?token='. $token;
$response = Http::get($url);
if($response->ok()) {
$user = $event->user;
$ip_data = $response->json();
if(Arr::has($ip_data, 'city')
&& Arr::has($ip_data, 'region')
&& Arr::has($ip_data, 'country')) {
UserLocation::firstOrCreate([
'user_id' => $user->id,
'city' => $ip_data['city'],
'region' => $ip_data['region'],
'country' => $ip_data['country'],
]);
}
}
}
}
※ なお、Illuminate\Support\Facades\Http
を使っておくと、ユニットテストのときにフェイクのレスポンスとかを指定できて便利ですよ
テストしてみる
では、今回はテスト用のIPアドレス8.8.8.4
を使いたいので少しだけコードを変更します。
app/Providers/AppServiceProvider.php
// $ip = request()->ip();
$ip = '8.8.8.4'; //
これに置き換えました
では、「https://******/login」へブラウザでアクセスしてログインします。
すると・・・・・・
ログインできました。
では、テーブルを確認してみましょう。
はい
IPアドレスから場所の情報が取得できました。
これは、Google
のIPアドレスでした。
では、年のためもうひとつIPinfo
が用意してくれていた1.1.1.14
へ変更してログインしなおしてみましょう。
どうなるでしょうか・・・・・・
はい
またひとつ増えましたね。
成功です
企業様へのご提案
今回のように、ユーザーの位置情報を取得することができますので、もしクライアント様が位置情報に関連が高い商品をお持ちでしたら、きっとお力になれるかと思います。
もしそういったご相談がございましたら、いつでもお気軽にお問い合わせからご連絡下さい。
お待ちしております。
おわりに
ということで、今回は位置情報をIP
アドレスから取得してみました。
ホントにデータは使い方次第でゴミにもお宝にもなるわけで、こういうデータ処理を考える人も賢いんだろうなという印象です。
皆さんも自社やクライアントさんのために「位置情報」を使った提案をしてみてはいかがでしょうか。
ではでは〜
「次はライティング勉強すっか
」