curl - 谷歌分析如何提供访问 token

标签 curl google-analytics google-api google-oauth google-analytics-api

我正在尝试从谷歌分析 API 获取实时用户

我正在关注这个:https://developers.google.com/analytics/devguides/reporting/core/v4/basics

我发布的数据如下:

$url = 'https://analyticsreporting.googleapis.com/v4/reports:batchGet';

//Initiate cURL.
$ch = curl_init($url);

$jsonDataEncoded = '{
  "reportRequests":
  [
    {
      "viewId": "109200098",
      "dateRanges": [{"startDate": "2014-11-01", "endDate": "2014-11-30"}],
      "metrics": [{"expression": "ga:users"}]
    }
  ]
}'
;

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

//Execute the request
$result = curl_exec($ch);

print_r($result);

{ "error": { "code": 401, "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } }

我知道我应该为此获得一些 OAuth,但我不知道如何做到这一点。
你能帮我解决这个问题吗?
谢谢!

index.php 和 oauth2callback.php

和这里一样:https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/web-php

工作正常获取 session 计数现在我想使用 https://developers.google.com/analytics/devguides/reporting/realtime/v3/reference/data/realtime/get#auth获取 rt:activeUsers

我正在编辑 index.php,例如:
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
      // Set the access token on the client.
      $client->setAccessToken($_SESSION['access_token']);

      // Create an authorized analytics service object.
      $analytics = new Google_Service_AnalyticsReporting($client);

      // Call the Analytics Reporting API V4.
      $response = getReport($analytics);

      $optParams = array(
    'dimensions' => 'rt:medium');

try {
  $results = $analytics->data_realtime->get(
      'ga:56789',
      'rt:activeUsers',
      $optParams);
  // Success. 
} catch (apiServiceException $e) {
  // Handle API service exceptions.
  $error = $e->getMessage();
}

      // Print the response.
      printResults($response);

    } else {
      $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
      header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
    }

出现错误:未定义的属性:Google_Service_AnalyticsReporting::$data_realtime

最佳答案

我可以使用更新的 index.php 来做到这一点

<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

session_start();

$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/client_secret.json');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
$service = new Google_Service_Analytics($client);

// If the user has already authorized this app then get an access token
// else redirect to ask the user to authorize access to Google Analytics.
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
  // Set the access token on the client.
  $client->setAccessToken($_SESSION['access_token']);

  // Create an authorized analytics service object.
  $analytics = new Google_Service_AnalyticsReporting($client);

  // Call the Analytics Reporting API V4.
  $response = getReport($analytics);

  // Print the response.
  printResults($response);



    $result = $service->data_realtime->get(
        'ga:<VIEWID CHANGE>',
        'rt:activeVisitors'
    );
    echo "<pre>";
    print_r($result->totalsForAllResults['rt:activeVisitors']);
    echo "</pre>";

} else {
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}


/**
 * Queries the Analytics Reporting API V4.
 *
 * @param service An authorized Analytics Reporting API V4 service object.
 * @return The Analytics Reporting API V4 response.
 */
function getReport($analytics) {

  // Replace with your view ID, for example XXXX.
  $VIEW_ID = "<VIEW ID>";

  // Create the DateRange object.
  $dateRange = new Google_Service_AnalyticsReporting_DateRange();
  $dateRange->setStartDate("7daysAgo");
  $dateRange->setEndDate("today");

  // Create the Metrics object.
  $sessions = new Google_Service_AnalyticsReporting_Metric();
  $sessions->setExpression("ga:sessions");
  $sessions->setAlias("sessions");

  // Create the ReportRequest object.
  $request = new Google_Service_AnalyticsReporting_ReportRequest();
  $request->setViewId($VIEW_ID);
  $request->setDateRanges($dateRange);
  $request->setMetrics(array($sessions));

  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  return $analytics->reports->batchGet( $body );
}


/**
 * Parses and prints the Analytics Reporting API V4 response.
 *
 * @param An Analytics Reporting API V4 response.
 */
function printResults($reports) {
  for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
    $report = $reports[ $reportIndex ];
    $header = $report->getColumnHeader();
    $dimensionHeaders = $header->getDimensions();
    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
    $rows = $report->getData()->getRows();

    for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
      $row = $rows[ $rowIndex ];
      $dimensions = $row->getDimensions();
      $metrics = $row->getMetrics();
      for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
        print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
      }

      for ($j = 0; $j < count($metrics); $j++) {
        $values = $metrics[$j]->getValues();
        for ($k = 0; $k < count($values); $k++) {
          $entry = $metricHeaders[$k];
          print($entry->getName() . ": " . $values[$k] . "\n");
        }
      }
    }
  }
}

关于curl - 谷歌分析如何提供访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497513/

相关文章:

android - 请求服务器授权码时,GoogleSignInResult 在 Android 应用程序中返回 DEVELOPER_ERROR

javascript - 地址栏中的谷歌翻译

api - 从 Nexus 下载神器

Cygwin:Libcurl 不工作

JavaScript 在谷歌分析后执行

node.js - 如何使用服务帐户来验证Google Workspace管理API?

php - PHP curl 到 HTTPS 安全吗?

php - cURL 错误 6 : Could not resolve host: test. example.localhost(参见 http ://curl. haxx.se/libcurl/c/libcurl-errors.html)

javascript - 从谷歌分析获取json

javascript - Google Analytics trackEvent 内部链接无法正常工作