【发布时间】:2014-11-23 18:31:53
【问题描述】:
我是 Google Analytics API 的新手。我刚开始做一个小项目,我想从 API 中提取数据,并使用一个 Google Analytics 帐户将其显示在每个用户的仪表板上。我尝试按照谷歌提供的教程进行操作,并在需要更新库时进行了调整。
我正在开发一个基于 codeigniter 的平台,我能够创建一个 Google 客户端对象,还可以使用保存在数据库中的刷新令牌。我使用刷新令牌是为了让仪表板上的数据可用,而不必每次都手动登录。
每次登录时访问令牌都在那里,我可以使用它来设置客户端访问令牌并创建一个谷歌服务分析对象($service = new Google_Service_Analytics($client);).我正在打印服务,我可以看到客户端ID,客户端密码等以及传递给它的访问令牌;但是像Google_Service_Analytics_DataGa_Resource 这样的其他对象是空的(我不知道在这个特定步骤它们是否应该是那样的?)。
当我尝试请求用户帐户时
$accounts = $analytics->management_accounts->listManagementAccounts();,
我得到一个空白屏幕并且我的视图没有被渲染。
我以前找不到这样的问题,所以我有点困惑为什么会发生。我没有收到任何错误消息或任何可能指出错误原因或正确方向的信息。
注意:我确实设法通过 JavaScript 使用相同的凭据使其工作,但在这种情况下,它不是我想要的。我能够使用 JS 检索数据、在图表中显示数据等。我是新来的帖子,所以如果我需要任何东西以便您更好地了解正在发生的事情,请告诉我。
如果我能得到任何关于为什么会发生这种情况的迹象,或者任何能让我走上正确道路的事情,我将不胜感激。
Codeigniter 控制器类如下
// 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 错误吗?你检查错误代码吗?日志说什么?附带说明一下,您应该尽量让您的问题更简洁,因为目前的形式很难阅读。
-
您应该发布不足以帮助调试的其余代码。顺便说一句:$service->management_accountSummaries->listManagementAccountSummaries(); (更快)这也可能有助于daimto.com/google-oauth2-php
-
感谢您的回复,我已经尝试调试了几次,逐行查看发生了什么;我还打印了我创建的所有对象。没有遇到任何类型的错误,只是一个空白屏幕,就像 Tibo 建议的那样,它可能是一个 PHP 错误,但它仍然只有在我尝试调用创建的分析时才会发生。我很困惑,因为在遵循教程时它应该是直截了当且容易做到的......
标签: php codeigniter google-analytics google-api-php-client