我是Google Analytics Api的新手。我剛開始研究一個小型項目,我想從API中獲取數據,並使用一個Google Analytics帳戶將其顯示在每個用戶的儀表板上。我試圖按照谷歌提供的教程進行調整,並根據需要對庫進行了更新。查詢帳戶時Google Analytics API空白屏幕?
我正在開發一個基於codeigniter的平臺,我能夠創建一個Google Client對象,並且還可以使用保存在數據庫中的刷新令牌。我使用刷新令牌來使儀表板上的數據可用,而無需每次都手動登錄。
每次我登錄時都有訪問令牌,我可以使用它來設置客戶端訪問令牌並創建Google Service Analytics對象($service = new Google_Service_Analytics($client);).
我正在打印該服務,並且我可以看到客戶端ID,客戶端祕密等,並將訪問令牌傳遞給它;但其他像Google_Service_Analytics_DataGa_Resource
對象是空的(我不知道他們應該是這樣或不是在這個特定的步驟?)。
當我試圖請求用戶帳戶
$accounts = $analytics->management_accounts->listManagementAccounts();,
,我得到了一個空白頁面,我的觀點並沒有被渲染。
我找不到以前遇到過這樣的問題,所以我有點困惑爲什麼會發生。我沒有收到任何錯誤信息或任何可能指向我的原因或正確方向的信息。
注:我確實設法通過JavaScript使用相同的憑據,但在這種情況下,它不是我正在尋找的。我能夠使用JS檢索數據,在圖表中顯示數據等。我是新來發表帖子的,所以如果我需要做些什麼才能更好地瞭解發生了什麼,請告訴我。
我將不勝感激,我可以指出爲什麼會發生這種情況,或者任何會讓我走上正確道路的事情。
笨控制器類如下
// Step 1 - Load PHP Client Libraries
require_once APPPATH.'libraries/Google/Client.php';
require_once APPPATH.'libraries/Google/Analytics.php';
class GoogleTest extends CI_Controller {
public function index(){
$this->load->helper(array('url','form'));
$this->load->model('googleapi_model'); //used to get the refresh token
// Step 2 - Start a session to persist credentials
session_start();
// Step 3 - Create and configure a new client object
$client = new Google_Client();
$client->setApplicationName("API Project");
// Insert client id, api key, client secret, project scope and redirect uri
$client->setDeveloperKey("***************");
$client->setClientId('********************');
$client->setClientSecret('******************');
$client->setRedirectUri('****************');
$client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly'));
// Check if refresh token exists, it is used to login users automatically & it is being generated only once when you login the first time from the created
// google analytics app, this will take precedence to Step 4 or 6 below ;
if(count($this->googleapi_model->getGoogleRefreshToken()) > 0){
$db_refresh_token = $this->googleapi_model->getGoogleRefreshToken();
$client->refreshToken($db_refresh_token[0]->refreshtoken);
$_SESSION['token'] = $client->getAccessToken();
}else{
if ($client->getAccessToken()) {
$token = $client->getAccessToken();
$authObj = json_decode($token);
$refreshToken = $authObj->refresh_token;
if(isset($refreshToken) && $refreshToken != null){
$this->googleapi_model->insertGoogleRefreshToken($refreshToken);
}
}
}
//Step 4 - Handle authorization flow from the server
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST']. $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
// Step 5 - Retrieve and use stored credentials
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
// Stept 6 - Either prompt the user to login or run the demo
if(!$client->getAccessToken()){
$authUrl = $client->createAuthUrl();
$this->data['auth'] = $authUrl;
}else{ //Create analytics service object
echo 'authenticated';
$analytics = new Google_Service_Analytics($client);
//TILL HERE MY CODE WORKS FINE, NO ERRORS, VIEW BEING RENDERED
$accounts = $analytics ->management_accountSummaries->listManagementAccountSummaries();
// $accounts = $analytics->management_accounts->listManagementAccounts();
echo '<pre>';
print_r($analytics);
echo '</pre>';
}
$this->data['content'] = '/public/dashboard/google_test';
$this->load->view('template/template', $this->data);
}
您確定這不是PHP錯誤嗎?你檢查錯誤代碼嗎?日誌說什麼?作爲一個方面說明,你應該試着讓你的問題更加簡潔,因爲目前的形式很難閱讀。 – Tibo 2014-09-29 11:27:49
您應該發佈不足以幫助調試的其他代碼。順便說一句:$ service-> management_accountSummaries-> listManagementAccountSummaries(); (更快),這可能也有助於http://www.daimto.com/google-oauth2-php/ – DaImTo 2014-09-29 12:17:18
感謝您的回覆,我已經嘗試過幾次,逐行查看發生了什麼;我還打印了我創建的所有對象。沒有遇到任何類似的錯誤,只是一個空白的屏幕,像Tibo表示這可能是一個PHP錯誤,但只有當我嘗試打電話給創建的分析時纔會發生。我很困惑,因爲它應該是簡單直接並且容易遵循教程的事情...... – Marin 2014-09-29 20:25:14