質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Google Analytics API

Google Analytics APIは、アクセス解析機能が行える API(Application Programming Interface)です。

解決済

Google Analytics APIでPVランキングを作成したい。$analytics->reports->batchGet( $body );に不具合があるようなのだが何がNGかわからない

Samson818
Samson818

総合スコア149

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Google Analytics API

Google Analytics APIは、アクセス解析機能が行える API(Application Programming Interface)です。

1回答

0リアクション

0クリップ

174閲覧

投稿2022/09/21 09:12

編集2022/09/22 05:57

前提

PHP、Google Analytics APIでPVランキングを作成したいのです。
下記ページを参照に対応してみています。
https://blog.apar.jp/web/11573/

phpコードをサーバーに置き、アクセスしたところ実行されませんでした。
var_dumpを用いながらチェックしていると下記箇所で何も表示されなくなりました。
綴り間違いやアロー演算子がハイフンになっているなど基本的な事を確認したのですが、
どれも正しく原因が不明です。

php

$reports_obj = $analytics->reports->batchGet( $body ); var_dump($reports_obj);

実現したいこと

下記コードを実行できる形にする

該当のソースコード

php

<?php // Google API クライアントライブラリの読込み require_once __DIR__ . '/google-api-php-client--PHP7.4/vendor/autoload.php'; // 鍵ファイルのパス $key_file_location = __DIR__ . '/client_secret_xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com.json'; // ビューID $view_id = 'XXXXXXXXXX'; // 認証処理 $client = new Google_Client(); $client->setApplicationName('sample'); $client->setAuthConfig( $key_file_location ); $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); $analytics = new Google_Service_AnalyticsReporting($client); //var_dump($analytics);//どうやらちゃんと何か取得出来ている // データを取得する期間 $dateRange = new Google_Service_AnalyticsReporting_DateRange(); $today = date("Y-m-d"); $lastMonth = date("Y-m-d", strtotime("-1 month")); $dateRange->setStartDate( $today ); $dateRange->setEndDate( $lastMonth ); // 取得するメトリクスの指定 // https://developers.google.com/analytics/devguides/reporting/core/dimsmets // PV $pageviews = new Google_Service_AnalyticsReporting_Metric(); $pageviews->setExpression('ga:pageviews'); // セッション $sessions = new Google_Service_AnalyticsReporting_Metric(); $sessions->setExpression('ga:sessions'); // ユーザー $users= new Google_Service_AnalyticsReporting_Metric(); $users->setExpression('ga:users'); // リクエストの作成 $request = new Google_Service_AnalyticsReporting_ReportRequest(); $request->setViewId($view_id); $request->setDateRanges($dateRange); $request->setMetrics(array($pageviews, $sessions, $users)); //var_dump($request);//どうやらちゃんと何か取得出来ている // リクエスト実行 $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests(array($request)); var_dump($body);//どうやらちゃんと何か取得出来ている $reports_obj = $analytics->reports->batchGet( $body ); var_dump($reports_obj);//ここで何もひょうじされない // オブジェクトを配列変数に変換 $reports_array = json_decode(json_encode($reports_obj), true); //var_dump($reports_array['reports'][0]['data']['totals'][0]); /** * Parses and prints the Analytics Reporting API V4 response. * * @param An Analytics Reporting API V4 response. */ function printResults($reports) { for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) { $report = $reports[ $reportIndex ]; $header = $report->getColumnHeader(); $dimensionHeaders = $header->getDimensions(); $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); $rows = $report->getData()->getRows(); for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { $row = $rows[ $rowIndex ]; $dimensions = $row->getDimensions(); $metrics = $row->getMetrics(); for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); } for ($j = 0; $j < count($metrics); $j++) { $values = $metrics[$j]->getValues(); for ($k = 0; $k < count($values); $k++) { $entry = $metricHeaders[$k]; print($entry->getName() . ": " . $values[$k] . "\n"); } } } } } ?>

試したこと

コード内にvar_dumpを埋め込み順を追って追跡中

補足情報(FW/ツールのバージョンなど)

PHP Version 7.4.28

エラー内容

いただいたご意見元にエラーが表示されるようにしました。
表示されてたエラーは以下です。

php

Fatal error: Uncaught Google\Service\Exception: { "error": { "code": 401, "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "errors": [ { "message": "Login Required.", "domain": "global", "reason": "required", "location": "Authorization", "locationType": "header" } ], "status": "UNAUTHENTICATED", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "CREDENTIALS_MISSING", "domain": "googleapis.com", "metadata": { "service": "analyticsreporting.googleapis.com", "method": "google.analytics.reporting.v4.Reporting.GetReports" } } ] } } in C:\home\site\wwwroot\google-api-php-client--PHP7.4\src\Http\REST.php:134 Stack trace: #0 C:\home\site\wwwroot\google-api-php-client--PH in C:\home\site\wwwroot\google-api-php-client--PHP7.4\src\Http\REST.php on line 134

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2022/09/21 21:23

何も表示されないというのは nulll とか Array{} のようにもならないということですか? var_dump()では何かしら出力されるはずなので(例え未定義の変数突っ込んだとしても) $analytics->$analytics->reports->batchGet( $body ); ( $body ); の実行でエラーが起きているようにも見受けられます。 エラーハンドリングをするか、エラー表示ONにして確認してみてください。
Samson818

2022/09/22 00:42

回答ありがとうございます。 文字通り何も表示されないです。画面が真っ白です。 エラーハンドリングまたはエラー表示ONの具体的な方法を教えていただけますでしょうか?
m.ts10806

2022/09/22 06:05

APIのエラーレスポンス確認 https://developers.google.com/analytics/devguides/reporting/core/v3/coreErrors?hl=ja PHPのエラーハンドリング https://www.php.net/manual/ja/language.exceptions.php PHPのエラー表示ON https://qiita.com/shotets/items/3c95aef631b2c5eadae5 「真っ白」はある地点でPHP側で継続不可能なエラー(Fatalエラー}が起きたか、 継続可能だけどエラー表示がONになっていないため何も出力されてないか のどちらかになります。 var_dump()で何も出ないということはないので前者の可能性が高いと思います。 Fatalエラーとしても、やはりエラー表示ONにしないと具体的な指摘内容は出ません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Google Analytics API

Google Analytics APIは、アクセス解析機能が行える API(Application Programming Interface)です。