laravel 5.7 Analytics API

追記

period 10年とかにするとバグる。
で、以下の方法で最初の日付を固定する

```

$startDate = Carbon::parse('2014-06-02');
$endDate = Carbon::now();
$period = Period::create($startDate, $endDate);

```


```


$startDate = Carbon::now()->subDay(7);
$endDate = Carbon::now();
$period = Period::create($startDate, $endDate);

```


ページのアクセス数とかランキングとか作るならAnalyticsを使って、
Cronで回してDBに突っ込むべき。


参考
https://qiita.com/uehatsu/items/255cbe8940b324d051ef

# laravel でのインスコ

```

composer require spatie/laravel-analytics

```


以下２つを追加

```/config/app.php


'providers' => [
    Spatie\Analytics\AnalyticsServiceProvider::class,
];

'aliases' => [
    'Analytics' => Spatie\Analytics\AnalyticsFacade::class,
];


```


```

php artisan vendor:publish --provider="Spatie\Analytics\AnalyticsServiceProvider"

```


#コンフィグファイル系の用意

1 credentialsファイルを用意

https://github.com/spatie/laravel-analytics#getting-credentials

credentialsファイル（JSON形式）をダウンロードしたら、storage/app/analytics/service-account-credentials.jsonとして保存。


2 メールアドレスに権限を設定

https://github.com/spatie/laravel-analytics#granting-permissions-to-your-analytics-property

credentialsファイルを開き、client_emailをコピーし、Google Analyticsの管理画面でそのメールアドレスに「表示と分析」の権限を付与する。

3 ビューIDを設定

https://github.com/spatie/laravel-analytics#getting-the-view-id

.env

```\.env

ANALYTICS_VIEW_ID=123456789

```



# 利用

```HogeController.php

use Spatie\Analytics\AnalyticsClientFactory;
use Spatie\Analytics\Analytics;
use Spatie\Analytics\Period;


class HogeController extends Controller
{
    public function test()
    {

        $client = AnalyticsClientFactory::createForConfig(config('analytics'));
        $ga     = new Analytics($client, config('analytics.view_id'));

        $data = $ga->performQuery(
            Period::years(1),//これはダメ。 carbon で$period を取得しておく。
            'ga:pageviews',
            [
                'dimensions' => 'ga:pagePath',
                'sort' => '-ga:pageviews', //PV数多い順に
//                'filters' => 'ga:pageviews<=10',
                'filters' => 'ga:pagePath=~/f\//*'// /f/ で始まる URLのみ
            ]

        );


        pr($data);
        die;


```

これでデータを取得できる。

#おまけ

```

        $client = AnalyticsClientFactory::createForConfig(config('analytics'));
        $ga     = new Analytics($client, config('analytics.view_id'));


        $options = [
            'start-index' => 1,//1から始まる。結果が10000超える場合だけこれをいじればいい。
            'max-results' => 10000,//何件取得するか
            'dimensions' => 'ga:pagePath',
            'sort' => '-ga:pageviews', //P1V数多い順に
//                'filters' => 'ga:pageviews<=10',
            'filters' => 'ga:pagePath=~/f\//*'// /f/ で始まる URLのみ
        ];



        $pageviews = $ga->performQuery(
            Period::years(10),
            'ga:pageviews',
            $options
        );

        $count = [];
        foreach ($pageviews->rows as $v) {
            $tmp = explode("/",$v[0]);
            if (is_numeric($tmp[2])) {
                $count[$tmp[2]] = [
                    'id' => $tmp[2],
                    'pageviews' => $v[1]
                ];
            }
        }




        $day7 = $ga->performQuery(
            Period::days(7),
            'ga:pageviews',
            $options
        );


        foreach ($day7->rows as $v) {
            $tmp = explode("/",$v[0]);
            if (is_numeric($tmp[2])) {

                $count[$tmp[2]] = [
                        'id' => $tmp[2],
                        'day7pageviews' => $v[1]
                    ];

            }
        }


//        保存できんので、配列の順番を 0からに振り直す
        $count = array_values($count);




        Fortune::insertOnDuplicateKey($count);

//        ゴミデータを削除
        $res = Fortune::query()
            ->where('social_id',0)
        ->delete();//削除

```