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

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

新規登録して質問してみよう
ただいま回答率
85.39%
Google Analytics

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

PHP

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

Google Analytics API

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

Q&A

解決済

1回答

2630閲覧

GoogleAnalyticsのAPIを利用したランキングについてです。

saya_0825

総合スコア11

Google Analytics

Google AnalyticsはGoogleが開発した無料のウェブ分析のソリューションです。複数のクライアント側のAPIとデータをエクスポートし管理するREST APIも格納されています。

PHP

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

Google Analytics API

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

0グッド

1クリップ

投稿2018/03/02 00:36

前提・実現したいこと

はじめて利用するので、分かりづらかったら申し訳ないです。
Google Analytics APIを利用したアクセスランキングを作成しようとしています。
WordPressではなく、テキストエディタで作成したサイトです。
特定のディレクトリのみを対象にしたいので、新しくビューを作り、そのビューIDを使っています。

発生している問題・エラーメッセージ

ランキングは1位~10位まで表示しており、期間は15日前から本日までです。
昨日までは特に問題なかったのですが、先程見たら同じページが2つ(1位と7位に)表示されていました。
Google Analyticsの方で期間を変えたり全期間にして見てもそのページは1つしか見つからないので、phpの方が間違っているのだと思います。
初心者ゆえにどこが間違っているのかさっぱり分からず...。
ちなみにページビュー数はGoogle Analyticsの方と全く違います(APIで取得した方は少ないです)が、これは最初からなので諦めています。

該当のソースコード

長いですがごめんなさい。
echoの部分はちょっと端折っています(表示は正常なのでechoの部分は間違っていないはずです)。

php

1require_once __DIR__ . '/vendor/autoload.php'; 2$analytics = initializeAnalytics(); 3$response = getReport( $analytics ); 4printResults( $response ); 5 6function initializeAnalytics() { 7 $KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json'; 8 $client = new Google_Client(); 9 $client->setApplicationName( "Hello Analytics Reporting" ); 10 $client->setAuthConfig( $KEY_FILE_LOCATION ); 11 $client->setScopes( ['https://www.googleapis.com/auth/analytics.readonly'] ); 12 $analytics = new Google_Service_AnalyticsReporting( $client ); 13 return $analytics; 14} 15function getReport( $analytics ) { 16 $VIEW_ID = "対象のビューID"; 17 18 $dateRange = new Google_Service_AnalyticsReporting_DateRange(); 19 $dateRange->setStartDate( "15daysAgo" ); 20 $dateRange->setEndDate( "today" ); 21 22 $sessions = new Google_Service_AnalyticsReporting_Metric(); 23 $sessions->setExpression( "ga:sessions" ); 24 $sessions->setAlias( "sessions" ); 25 26 $dimention = new Google_Service_AnalyticsReporting_Dimension(); 27 $dimention->setName( 'ga:pagePath' ); 28 $dimention2 = new Google_Service_AnalyticsReporting_Dimension(); 29 $dimention2->setName( 'ga:pageTitle' ); 30 31 $orderby = new Google_Service_AnalyticsReporting_OrderBy(); 32 $orderby->setFieldName( "ga:sessions" ); 33 $orderby->setOrderType( "VALUE" ); 34 $orderby->setSortOrder( "DESCENDING" ); 35 36 $request = new Google_Service_AnalyticsReporting_ReportRequest(); 37 $request->setViewId( $VIEW_ID ); 38 $request->setDateRanges( $dateRange ); 39 $request->setMetrics( array( $sessions ) ); 40 $request->setDimensions( array( $dimention,$dimention2 ) ); 41 $request->setOrderBys( $orderby ); 42 $request->setPageSize(10); 43 44 $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 45 $body->setReportRequests( array( $request) ); 46 return $analytics->reports->batchGet( $body ); 47} 48 49function printResults( $reports ) { 50 $report = $reports[0]; 51 $rows = $report->getData()->getRows(); 52 for ( $rowIndex = 0; $rowIndex < count( $rows ); $rowIndex++ ) { 53 $row = $rows[ $rowIndex ]; 54 $dimensions = $row->getDimensions(); 55 $metrics = $row->getMetrics(); 56 $session = $metrics[0]->getValues()[0]; 57 58 echo '<a href="'.$dimensions[0].'">'; 59 //タイトルにサイト名と特定の文字列が入るのでそれを消したい 60 echo str_replace(array('●●●','▲▲▲'), '', $dimensions[1]); 61 echo '</a><br>'; 62 echo 'テキストを入れています'.$session.'テキストを入れています'; 63 echo "\n"; 64 } 65}

色々と調べてはみたのですがヒットするのは古い情報(前のバージョンのものでしょうか?)ばかりで、そちらのやり方では、ランキングの表示すらできませんでした。
あるサイトさんが新しいものの解説をしていたので、ほぼコピペをさせてもらいました。
原因が分かる方がみえましたら、どうかお知恵を拝借願えませんでしょうか?
また、Google Analytics API以外に(レンタルや広告が入るもの以外で)特定のディレクトリのみを対象にしたランキングが作成できるCGIやPHPなどはありますでしょうか?
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2018/03/02 01:40

これだけでは状況が分かりにくいので、画面キャプチャを載せていただくのは可能でしょうか?(できれば以前のものと現在のものがあればよいです)
saya_0825

2018/03/02 02:58

ありがとうございます。 画面のキャプチャとはどの画面でしょうか? 「以前のもの」と「現在のもの」が何のことかが分からず...すみません。
m.ts10806

2018/03/02 05:49

表示されている画面のことです。「昨日までは特に問題なかった」とのことなので、「以前(昨日まで)」と「今」どうなっているか比較できるものがあれば、と思いまして。仕様変更とかでなければ良いのですが。
saya_0825

2018/03/02 09:38

ごめんなさい、まさかこんな事になると思っていなくてスクリーンショットなども撮っておらず...。 phpなども何もいじっていませんし、今日同じページが2つ出て来るまで約1ヶ月は(少なくとも昨日の20時頃までは)問題なかったです。 もしかしたら表示していない11位以降で被っているものがあったかもしれませんが、今となってはそれも不明です...。
guest

回答1

0

ベストアンサー

Dimensionsの組み合わせが異なると別々でカウントがされます。

たとえば以下のように pagePathpageTitle の組み合わせで別々の結果としてカウントされます。

pagePathpageTitle
Path_ATitle_A
Path_ATitle_B
Path_BTitle_A
Path_BTitle_B

このとき、Path_A の観点だけで結果を見ると「同じページの結果が重複している」ように見えます。

この点はいかがでしょうか?

投稿2018/03/02 01:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

saya_0825

2018/03/02 02:58

ありがとうございます。 初心者ゆえに、ちょっと理解が追いつかないです...。 このPHPも「コピペしたら動いた」というレベルでして。 同じページにURLとタイトルが2つあるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/02 21:41 編集

たとえば、https://www.example.com/sample/my_profile.html というページがあったとします。 ページのアドレス(pagePath)は /sample/my_profile.html になります。 もしこのページの「タイトル(pageTitle)」(ブラウザのタブに表示される文字列です)が、例えば15日前と昨日で違っていた場合は別々にカウントされるということです。以下に例を出します。 |pagePath|pageTitle|sessions| |:-----|:-----|:-----| |/sample/my_profile.html|私のプロフィール(2018/02/25版)|123| |/sample/my_profile.html|私のプロフィール(2018/03/01版)|98| 上記結果は、「pagePathだけに着目すると」「同じ /sample/my_profile.html という pagePath のデータが2つ現れて」います。測定期間の途中でページのタイトルを変えたためです。 以上の点はいかがでしょうか。 なお、GAのデータ集計に関しては「ディメンション」と「メトリックス」という二つの「軸」があることはとらえておいたほうがいいです。GUIの集計画面でいろいろいじくってみると理解が進むと思います。
saya_0825

2018/03/03 05:44

すっごく分かりやすくありがとうございます! まさにこれです。 タイトルを変えると別ページ扱いになるのですね!はじめて知りました。
退会済みユーザー

退会済みユーザー

2018/03/04 01:58

「タイトルを変えると別ページ扱いになる」というのは厳密にはちょっと違っていて、今回は「ディメンション」に「pagePathとpageTitleの二つの項目を指定したため」に起きたのです。 「ディメンション」の指定を「pagePathだけ」にすれば、お望みの結果が得られるかと思います。 コードで言うならば、 $request->setDimensions( array( $dimention,$dimention2 ) ); のところを、 $request->setDimensions( array( $dimention ) ); とすればよいと思います。 「ディメンション」の項目を増やせば増やすほど、それらの項目が完全一致しないとどんどん結果のケース数が増えていくので、何を測定したいのかを明確にして設計するとよいと思います。
saya_0825

2018/03/05 11:46

なるほど! ただ、タイトルも取得する必要があるのですが、別の方法を使うしかないのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/05 13:14

タイトルを取得する場合は論理的にどうしても上記のように2つ(以上)に結果が分かれてしまいます。 なので、GAから取得したデータをPHPで集計するという方法になるでしょう。 GA上でうまくやる方法もありますが、修正や変更が大変なので、PHP側で処理するほうが良いと思います。
saya_0825

2018/03/05 23:28

何度も助けて頂きありがとうございます。 $dimensions[0]のタイトルを取得することで問題なく表示することができました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問