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

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

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

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

Google Analytics API

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

Q&A

解決済

1回答

898閲覧

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

Samson818

総合スコア162

PHP

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

Google Analytics API

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

0グッド

0クリップ

投稿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

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

実現したいこと

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

該当のソースコード

php

1<?php 2 3// Google API クライアントライブラリの読込み 4require_once __DIR__ . '/google-api-php-client--PHP7.4/vendor/autoload.php'; 5 6// 鍵ファイルのパス 7$key_file_location = __DIR__ . '/client_secret_xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com.json'; 8 9// ビューID 10$view_id = 'XXXXXXXXXX'; 11 12// 認証処理 13$client = new Google_Client(); 14$client->setApplicationName('sample'); 15$client->setAuthConfig( $key_file_location ); 16$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); 17$analytics = new Google_Service_AnalyticsReporting($client); 18 19//var_dump($analytics);//どうやらちゃんと何か取得出来ている 20 21// データを取得する期間 22$dateRange = new Google_Service_AnalyticsReporting_DateRange(); 23$today = date("Y-m-d"); 24$lastMonth = date("Y-m-d", strtotime("-1 month")); 25$dateRange->setStartDate( $today ); 26$dateRange->setEndDate( $lastMonth ); 27 28// 取得するメトリクスの指定 29// https://developers.google.com/analytics/devguides/reporting/core/dimsmets 30// PV 31$pageviews = new Google_Service_AnalyticsReporting_Metric(); 32$pageviews->setExpression('ga:pageviews'); 33// セッション 34$sessions = new Google_Service_AnalyticsReporting_Metric(); 35$sessions->setExpression('ga:sessions'); 36// ユーザー 37$users= new Google_Service_AnalyticsReporting_Metric(); 38$users->setExpression('ga:users'); 39 40// リクエストの作成 41$request = new Google_Service_AnalyticsReporting_ReportRequest(); 42$request->setViewId($view_id); 43$request->setDateRanges($dateRange); 44$request->setMetrics(array($pageviews, $sessions, $users)); 45 46//var_dump($request);//どうやらちゃんと何か取得出来ている 47 48// リクエスト実行 49$body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 50$body->setReportRequests(array($request)); 51 52var_dump($body);//どうやらちゃんと何か取得出来ている 53 54$reports_obj = $analytics->reports->batchGet( $body ); 55 56var_dump($reports_obj);//ここで何もひょうじされない 57 58// オブジェクトを配列変数に変換 59$reports_array = json_decode(json_encode($reports_obj), true); 60 61//var_dump($reports_array['reports'][0]['data']['totals'][0]); 62 63/** 64 * Parses and prints the Analytics Reporting API V4 response. 65 * 66 * @param An Analytics Reporting API V4 response. 67 */ 68function printResults($reports) { 69 for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) { 70 $report = $reports[ $reportIndex ]; 71 $header = $report->getColumnHeader(); 72 $dimensionHeaders = $header->getDimensions(); 73 $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); 74 $rows = $report->getData()->getRows(); 75 76 for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { 77 $row = $rows[ $rowIndex ]; 78 $dimensions = $row->getDimensions(); 79 $metrics = $row->getMetrics(); 80 for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { 81 print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); 82 } 83 84 for ($j = 0; $j < count($metrics); $j++) { 85 $values = $metrics[$j]->getValues(); 86 for ($k = 0; $k < count($values); $k++) { 87 $entry = $metricHeaders[$k]; 88 print($entry->getName() . ": " . $values[$k] . "\n"); 89 } 90 } 91 } 92 } 93} 94?>

試したこと

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

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

PHP Version 7.4.28

エラー内容

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

php

1Fatal 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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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にしないと具体的な指摘内容は出ません。
guest

回答1

0

自己解決

こちらのページを参照し、秘密鍵をjsonではなくp12で作る方法を試したらうまくいきました。
https://www.karakaram.com/google-analytics-api-batch/#create-oauth-client-id

投稿2022/09/22 06:49

Samson818

総合スコア162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問