2014-11-06 88 views
1

我是Google API的新手,并且无法使Google Analytics API正常工作。到目前为止,我已经设置了开发者控制台,创建了一个项目,并生成了相关的证书。我注册的电子邮件ID是[email protected],默认情况下重定向URI设置为http://www.mycompany.com/oauth2callback。 JavaScript起源设置为http://www.mycompany.comGoogle API重定向URI无法正常工作

当我从localhost运行项目时,我可以启动OAuth过程。但是当我点击“允许”按钮时,我被发送到http://www.mycompany.com并没有任何反应。我可能做错了什么?我是否需要从mycompany.com doamin运行此脚本才能正常工作?最后,我如何从本地主机运行它?

<?php 
include_once "google_api/autoload.php"; 

session_start(); 

$client = new Google_Client(); 
$client->setApplicationName("Hello Analytics API Example"); 

$client->setClientId('XXXXXXXXXXXXXXXXX'); 
$client->setClientSecret('XXXXXXXXXXXXXXXXXXXX'); 
//$client->setRedirectUri('XXXXXXXXXXXXXXXXXXX'); 
$client->setRedirectUri('XXXXXXXXXXXXXXXXXX'); 
$client->setDeveloperKey('XXXXXXXXXXXXXXXXXXXX'); 
$client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly')); 

// Magic. Returns objects from the Analytics Service instead of associative arrays. 
//print_r($client); 
//$client->setUseObjects(true); 

if (isset($_GET['code'])) 
{ 
    $client->authenticate(); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 

if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 

if (!$client->getAccessToken()) 
{ 
    $authUrl = $client->createAuthUrl(); 
    print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
} 
else 
{ 
    // Create analytics service object. See next step below. 
    $analytics = new apiAnalyticsService($client); 
    runMainDemo($analytics); 
} 

function runMainDemo(&$analytics) { 
    try { 

     // Step 2. Get the user's first view (profile) ID. 
     $profileId = getFirstProfileId($analytics); 

     if (isset($profileId)) { 

      // Step 3. Query the Core Reporting API. 
      $results = getResults($analytics, $profileId); 

      // Step 4. Output the results. 
      printResults($results); 
     } 

    } catch (apiServiceException $e) { 
     // Error from the API. 
     print 'There was an API error : ' . $e->getCode() . ' : ' . $e->getMessage(); 

    } catch (Exception $e) { 
     print 'There wan a general error : ' . $e->getMessage(); 
    } 
} 

function getFirstprofileId(&$analytics) { 
    $accounts = $analytics->management_accounts->listManagementAccounts(); 

    if (count($accounts->getItems()) > 0) { 
     $items = $accounts->getItems(); 
     $firstAccountId = $items[0]->getId(); 

     $webproperties = $analytics->management_webproperties 
     ->listManagementWebproperties($firstAccountId); 

     if (count($webproperties->getItems()) > 0) { 
      $items = $webproperties->getItems(); 
      $firstWebpropertyId = $items[0]->getId(); 

      $profiles = $analytics->management_profiles 
      ->listManagementProfiles($firstAccountId, $firstWebpropertyId); 

      if (count($profiles->getItems()) > 0) { 
       $items = $profiles->getItems(); 
       return $items[0]->getId(); 

      } else { 
       throw new Exception('No views (profiles) found for this user.'); 
      } 
     } else { 
      throw new Exception('No webproperties found for this user.'); 
     } 
    } else { 
     throw new Exception('No accounts found for this user.'); 
    } 
} 

function getResults(&$analytics, $profileId) { 
    return $analytics->data_ga->get(
      'ga:' . $profileId, 
      '2012-03-03', 
      '2012-03-03', 
      'ga:sessions'); 
} 

function printResults(&$results) { 
    if (count($results->getRows()) > 0) { 
     $profileName = $results->getProfileInfo()->getProfileName(); 
     $rows = $results->getRows(); 
     $sessions = $rows[0][0]; 

     print "<p>First view (profile) found: $profileName</p>"; 
     print "<p>Total sessions: $sessions</p>"; 

    } else { 
    print '<p>No results found.</p>'; 
    } 
} 
+0

你想让别人能看到Google Analytics(分析)数据,或者您想让其他人访问您的Google Analytics(分析)数据吗?在我们可以帮助您之前,您确实需要添加一些代码。 – DaImTo 2014-11-06 08:45:03

+0

@DalmTo我想创建一个请求用户权限并从其Analytics(分析)中提取只读数据的应用程序。现在我正在通过自己的帐户进行测试,因此开发人员和用户帐户都是'myname @ mycompany.com'。代码补充,虽然它只是官方教程。 – dotslash 2014-11-06 08:48:24

回答

0

如果您希望能够自动请求数据,您将需要存储refreshtoken。如果你只希望他们能够访问那里的数据,当他们在你的网站上,那么这应该让你开始。

最新的Google PHP客户端库可以在这里找到。 Github

<?php   
require_once 'Google/Client.php';  
require_once 'Google/Service/Analytics.php';  
session_start();  
$client = new Google_Client(); 
    $client->setApplicationName("Client_Library_Examples"); 
    $client->setDeveloperKey("{devkey}"); 
    $client->setClientId('{clientid}.apps.googleusercontent.com'); 
    $client->setClientSecret('{clientsecret}'); 
    $client->setRedirectUri('http://www.daimto.com/Tutorials/PHP/Oauth2.php'); 
    $client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly')); 

    //For loging out. 
    if ($_GET['logout'] == "1") { 
    unset($_SESSION['token']); 
     } 

    // Step 2: The user accepted your access now you need to exchange it. 
    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 1: The user has not authenticated we give them a link to login  
    if (!$client->getAccessToken() && !isset($_SESSION['token'])) { 
     $authUrl = $client->createAuthUrl(); 
     print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
     }   

    // Step 3: We have access we can now create our service 
    if (isset($_SESSION['token'])) { 
     print "<a class='logout' href='".$_SERVER['PHP_SELF']."?logout=1'>LogOut</a><br>"; 
     $client->setAccessToken($_SESSION['token']); 
     $service = new Google_Service_Analytics($client);  

     // request user accounts 
     $accounts = $service->management_accountSummaries->listManagementAccountSummaries(); 

     foreach ($accounts->getItems() as $item) { 
     echo "Account: ",$item['name'], " " , $item['id'], "<br /> \n";   
     foreach($item->getWebProperties() as $wp) { 
      echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebProperty: ' ,$wp['name'], " " , $wp['id'], "<br /> \n";  

      $views = $wp->getProfiles(); 
      if (!is_null($views)) { 
       foreach($wp->getProfiles() as $view) { 
       // echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View: ' ,$view['name'], " " , $view['id'], "<br /> \n";  
       } 
      } 
     } 
    } // closes account summaries 

    } 
print "<br><br><br>"; 
print "Access from google: " . $_SESSION['token']; 
?> 

代码从教程Google Analytics Oauth2 with php撕开。

更新:在查看您的代码后,我认为您的问题的一部分可能是您没有将redirectURI链接到页面。它不能只是一个目录,你必须给它的PHP页面,它应该重定向。

+0

@达尔我认为是这样。对不起,我的无知,但redirectURI PHP脚本应该做什么?我的意思是登录凭证存储在源脚本中。 。 。我需要从会话中检索吗? – dotslash 2014-11-06 08:58:39

+0

重定向URI基本上告诉认证服务器在哪里返回认证。一个文件应该能够汉德尔全部检查步骤2. – DaImTo 2014-11-06 09:00:32

+0

@达姆谢谢!我现在已经接受了答案。将尽快尝试。 :) – dotslash 2014-11-06 09:13:11