Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1835)

Unified Diff: examples/analytics/demo/coreReportingApiReference.php

Issue 5881043: adding new Google Analytics API samples (Closed) Base URL: http://google-api-php-client.googlecode.com/svn/trunk/
Patch Set: fixed everything Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « examples/analytics/demo/authHelper.php ('k') | examples/analytics/demo/helloAnalyticsApi.php » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: examples/analytics/demo/coreReportingApiReference.php
===================================================================
--- examples/analytics/demo/coreReportingApiReference.php (revision 0)
+++ examples/analytics/demo/coreReportingApiReference.php (revision 0)
@@ -0,0 +1,317 @@
+<?php
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Main demo class to illustrate how to access all the values returned by
+ * the Core Reporting API using the Google API PHP client library. The demo
+ * both queries the API and returns the results as an HTML string.
+ *
+ * Note: The apiAnalyticsService parameter in the constructor accepts requires
+ * an apiClient object to be instantiated. This all happens outside of this
+ * class. This client must be configured to $apiClient->setUseObjects(true);
+ * so that the library returns an object representation of the API response
+ * instead of the default representation of associative arrays.
+ * @author Nick Mihailovski <api.nickm@gmail.com>
+ */
+class CoreReportingApiReference {
+
+ /** @var apiAnalyticsService $analytics */
+ private $analytics;
+
+ /**
+ * The Url of the main controller. Used to properly handle
+ * redirects and strip the URL of additional authorization
+ * parameters.
+ * @var string $controllerUrl
+ */
+ private $controllerUrl;
+
+ /** @var string $error */
+ private $error = null;
+
+ /**
+ * Constructor.
+ * @param apiAnalyticsService $analytics The analytics service object to make
+ * requests to the API.
+ * @param string $controllerUrl The Url for the main controller.
+ */
+ function __construct(&$anlaytics, $controllerUrl) {
+ $this->analytics = $anlaytics;
+ $this->controllerUrl;
+ }
+
+
+ /**
+ * Returns a HTML string representation of all the data in this demo.
+ * This method first queries the Core Reporting API with the provided
+ * profiled ID. Then it formats and returns all the results as a string.
+ * If any API errors occur, they are caught and set in $this->error.
+ * @param string $tableId The value of the ids parameter in the
+ * Core Reporting API. This is the ga namespaced profile ID. It has the
+ * format of ga:xxxx where xxxx is the profile ID. You can get this
+ * value from the Management API. See the helloAnalytics.php example
+ * for details.
+ * @return string The formatted results from the API.
+ */
+ function getHtmlOutput($tableId = null) {
+ $output = $this->getHTMLForm($tableId);
+
+ if (isset($tableId)) {
+ try {
+ $results = $this->queryCoreReportingApi($tableId);
+ $output .= $this->getFormattedResults($results);
+
+ } catch (apiServiceException $e) {
+ $this->error = $e->getMessage();
+ }
+ }
+ return $output;
+ }
+
+ /**
+ * Queries the Core Reporting API for the top 25 organic search terms
+ * ordered by visits. Because the table id comes from the query parameter
+ * it needs to be URI decoded.
+ * @param string $tableId The value of the ids parameter in the
+ * Core Reporting API. This is the ga namespaced profile ID. It has the
+ * format of ga:xxxx where xxxx is the profile ID. You can get this
+ * value from the Management API. See the helloAnalytics.php example
+ * for details.
+ * @return GaData The results from the Core Reporting API.
+ */
+ private function queryCoreReportingApi($tableId) {
+
+ $optParams = array(
+ 'dimensions' => 'ga:source,ga:keyword',
+ 'sort' => '-ga:visits,ga:keyword',
+ 'filters' => 'ga:medium==organic',
+ 'max-results' => '25');
+
+ return $this->analytics->data_ga->get(
+ urldecode($tableId),
+ '2010-01-01',
+ '2010-01-15',
+ 'ga:visits',
+ $optParams);
+ }
+
+ /**
+ * Returns the results from the API as a HTML formatted string.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getFormattedResults(&$results) {
+ return implode('', array(
+ $this->getReportInfo($results),
+ $this->getPaginationInfo($results),
+ $this->getProfileInformation($results),
+ $this->getQueryParameters($results),
+ $this->getColumnHeaders($results),
+ $this->getTotalsForAllResults($results),
+ $this->getRows($results)
+ ));
+
+ }
+
+ /**
+ * Returns general report information.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getReportInfo(&$results) {
+ return <<<HTML
+<h3>Report Information</h3>
+<pre>
+Contains Sampled Data = {$results->getContainsSampledData()} // TODO Fix ?!?!
+Kind = {$results->getKind()}
+ID = {$results->getId()}
+Self Link = {$results->getSelfLink()}
+</pre>
+HTML;
+ }
+
+ /**
+ * Returns pagination information.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getPaginationInfo(&$results) {
+ return<<<HTML
+<h3>Pagination Info</h3>
+<pre>
+Items per page = {$results->getItemsPerPage()}
+Total results = {$results->getTotalResults()}
+Previous Link = {$results->getPreviousLink()}
+Next Link = {$results->getNextLink()}
+</pre>
+HTML;
+ }
+
+ /**
+ * Returns profile information describing the profile being accessed
+ * by the API.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getProfileInformation(&$results) {
+ $profileInfo = $results->getProfileInfo();
+
+ return<<<HTML
+<h3>Profile Information</h3>
+<pre>
+Account ID = {$profileInfo->getAccountId()}
+Web Property ID = {$profileInfo->getWebPropertyId()}
+Internal Web Property ID = {$profileInfo->getInternalWebPropertyId()}
+Profile ID = {$profileInfo->getProfileId()}
+Table ID = {$profileInfo->getTableId()}
+Profile Name = {$profileInfo->getProfileName()}
+</pre>
+HTML;
+ }
+
+ /**
+ * Returns all the query parameters in the initial API query.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getQueryParameters(&$results) {
+ $query = $results->getQuery();
+
+ $html = '<h3>Query Parameters</h3><pre>';
+ foreach ($query as $paramName => $value) {
+ $html .= "$paramName = $value\n";
+ }
+ $html .= '</pre>';
+ return $html;
+ }
+
+ /**
+ * Returns all the column headers for the table view.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getColumnHeaders(&$results) {
+ $html = '<h3>Column Headers</h3><pre>';
+
+ $headers = $results->getColumnHeaders();
+ foreach ($headers as $header) {
+ $html .= <<<HTML
+
+Column Name = {$header->getName()}
+Column Type = {$header->getColumnType()}
+Data Type = {$header->getDataType()}
+
+HTML;
+ }
+
+ $html .= '</pre>';
+ return $html;
+ }
+
+ /**
+ * Returns the totals for all the results.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getTotalsForAllResults(&$results) {
+
+ $rowCount = count($results->getRows());
+ $totalResults = $results->getTotalResults();
+
+ $html = '<h3>Total Metrics For All Results</h3>';
+ $html .= "<p>This query returned $rowCount rows. <br>";
+ $html .= "But the query matched $totalResults total results. <br>";
+ $html .= 'Here are the metric totals for the matched results.</p>';
+ $html .= '<pre>';
+
+ $totals = $results->getTotalsForAllResults();
+ foreach ($totals as $metricName => $metricTotal) {
+ $html .= "Metric Name = $metricName\n";
+ $html .= "Metric Total = $metricTotal";
+ }
+ $html .= '</pre>';
+ return $html;
+ }
+
+ /**
+ * Returns the rows of data as an HTML Table.
+ * @param GaData $results The results from the Core Reporting API.
+ * @return string The formatted results.
+ */
+ private function getRows($results) {
+ $table = '<h3>Rows Of Data</h3>';
+
+ if (count($results->getRows()) > 0) {
+ $table .= '<table>';
+
+ // Print headers.
+ $table .= '<tr>';
+
+ foreach ($results->getColumnHeaders() as $header) {
+ $table .= '<th>' . $header->name . '</th>';
+ }
+ $table .= '</tr>';
+
+ // Print table rows.
+ foreach ($results->getRows() as $row) {
+ $table .= '<tr>';
+ foreach ($row as $cell) {
+ $table .= '<td>'
+ . htmlspecialchars($cell, ENT_NOQUOTES)
+ . '</td>';
+ }
+ $table .= '</tr>';
+ }
+ $table .= '</table>';
+
+ } else {
+ $table .= '<p>No results found.</p>';
+ }
+
+ return $table;
+ }
+
+ /**
+ * Returns an HTML form for the user to supply their Table ID. This
+ * form uses GET to pass the tableId back to the controller. The
+ * controller
+ * then passes the ID onto the demo.
+ * @param string $tableId The table ID value to add to the HTML form
+ * @return string The HTML form.
+ */
+ private function getHtmlForm($tableId) {
+ $tableId = htmlspecialchars($tableId);
+
+ return <<<HTML
+<form name="gaForm" action="$this->controllerUrl" method="get">
+ <p>Please enter your Table ID <input type="text" id="tableId" name="tableId" value="$tableId"></p>
+ <p>Format should be ga:xxx where xxx is your profile ID.</p>
+ <input type="hidden" name="demo" value="reporting">
+ <input type="submit" value="Run the demo with your table ID" />
+</form>
+<hr>
+HTML;
+ }
+
+ /**
+ * @return string Any error that occurred.
+ */
+ function getError() {
+ return $this->error;
+ }
+}
+
« no previous file with comments | « examples/analytics/demo/authHelper.php ('k') | examples/analytics/demo/helloAnalyticsApi.php » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b