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

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

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

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

Q&A

解決済

2回答

3270閲覧

[PHP]functionの引数が2回目以降に呼び出した時に最初の値が引き継がれてしまう。[google analytics api php]

el__ninja

総合スコア12

PHP

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

0グッド

0クリップ

投稿2016/11/10 01:28

編集2016/11/10 01:33

###前提・実現したいこと
Google Analytics Api をPHPを使ってPVデータを取得しています。
1回だけ呼び出すとデータは取得できるのですが、2回目に引数を変えて呼び出しても、
1回目の引数でファンクションの結果が返ってきます。

読み込む順番、初期化などが原因でしょうか?
$jsondata[1]['viewid']の数値の部分を変更すれば結果は変わります。

###出力結果

Array
(
[0] => Array
(
[0] => 239
)

)
Array
(
[0] => Array
(
[0] => 239
)

)
.
.
.
###viewid.json
[
{
"tempo_id": 1,
"viewid": xxxxx
},
{
"tempo_id": 2,
"viewid": xxxxx
}
]
###該当のソースコード

lang

1<?php 2$t = file_get_contents('viewid.json'); 3$t = mb_convert_encoding('viewid.json', 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 4$jsondata = json_decode('viewid.json',true); 5 6function pvget($viewid){ 7 global $result, $service, $client; 8 require_once('src/Google_Client.php'); 9 require_once('src/contrib/Google_AnalyticsService.php'); 10 define('CLIENT_ID', 'xxxxx'); 11 define('SERVICE_ACCOUNT_NAME', 'xxxxx'); 12 define('KEY_FILE', __DIR__ . 'xxxxx'); 13 define('PROFILE_ID', $viewid); 14 $client = new Google_Client(); 15 $client->setApplicationName("Google Analytics PHP Starter Application"); 16 $client->setClientId(CLIENT_ID); 17 $client->setAssertionCredentials(new Google_AssertionCredentials( 18 SERVICE_ACCOUNT_NAME, 19 array('https://www.googleapis.com/auth/analytics'), 20 file_get_contents(KEY_FILE) 21 )); 22 $service = new Google_AnalyticsService($client); 23 $result = $service->data_ga->get( 24 'ga:' . PROFILE_ID, 25 'today', //開始日 26 'today', //終了日 27 'ga:pageviews' 28 ); 29 print_r($result); 30} 31 32 pvget($jsondata[0]['viewid']); 33 pvget($jsondata[1]['viewid']);

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

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

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

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

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

guest

回答2

0

自己解決

php

1function pvget($viewid){ 2 global $result, $service, $client; 3 require_once('src/Google_Client.php'); 4 require_once('src/contrib/Google_AnalyticsService.php'); 5 define('CLIENT_ID', 'xxxxx'); 6 define('SERVICE_ACCOUNT_NAME', 'xxxxx'); 7 define('KEY_FILE', __DIR__ . 'xxxxx'); 8 #ここを削除define('PROFILE_ID', $viewid); 9 $client = new Google_Client(); 10 $client->setApplicationName("Google Analytics PHP Starter Application"); 11 $client->setClientId(CLIENT_ID); 12 $client->setAssertionCredentials(new Google_AssertionCredentials( 13 SERVICE_ACCOUNT_NAME, 14 array('https://www.googleapis.com/auth/analytics'), 15 file_get_contents(KEY_FILE) 16 )); 17 $service = new Google_AnalyticsService($client); 18 $result = $service->data_ga->get( 19 'ga:' . $viewid#ここを変更, 20 'today', //開始日 21 'today', //終了日 22 'ga:pageviews' 23 ); 24 print_r($result); 25}

上記2点を変更することで解決しました。
defineで指定せず、変数に変えることで解決しました。
みなさまありがとうございました。

投稿2016/11/10 02:21

el__ninja

総合スコア12

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

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

0

Google Analytics Api はやったことが無いのでわからないのですが、
出力結果の入れ子(Arrayの中にArray)になっていますが、そちらの中も同じなのでしょうか。

http://qiita.com/ichikawa_0829/items/74a6f1e62816cf3bf900
ここを見ると、以下のような感じでとっていたので気になりました。

PHP

1$data = $service->data_ga->get($profile_id, $start_date, $end_date, $metrics, $optParams); 2$list = array(); 3foreach ($data['rows'] as $row => $value) { 4 $result = array(); 5 foreach ($data['columnHeaders'] as $key => $header) { 6 $result[$header['name']] = $value[$key]; 7 } 8 $list[] = $result; 9}

誤解を招く記載であれば申し訳ありません。

投稿2016/11/10 01:52

aki178

総合スコア164

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

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

el__ninja

2016/11/10 02:05 編集

ご回答ありがとうございます! $resultの配列の中身は同じになります。 `print_r($result);` を `print_r($result['rows'][0][0]);` に変更すると出力が 239239 になります。
aki178

2016/11/10 02:23

メソッド内でrequire_onceを使用したときのスコープが分からないのですが、 もしかしたら最初の1回だけgoogle提供のAPIが実行される状態にあるかもしれません。 (require_once⇒requireに変更)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問