PHP Array и Google Analytics V3 API - PullRequest
       44

PHP Array и Google Analytics V3 API

2 голосов
/ 15 февраля 2012

Я использую API Google Analytics V3 PHP OAuht. При использовании Simple.php в Примере Google Analytics API данные возвращаются в виде массивов PHP. Я использую следующий вызов, чтобы получить более подробный ответ на некоторые конкретные данные. Работает нормально.

$ids = "ga:xxxxxx";
$start_date = "2011-01-01";
$end_date = "2011-11-30";
$metrics = "ga:visits,ga:pageviews";
$dimensions = "ga:browser";
$optParams = array('dimensions' => $dimensions);
$data = $service->data_ga->get($ids,$start_date,$end_date,$metrics,$optParams); 

Выход массива -

       Data

Array
(
    [kind] => analytics#gaData
    [id] => https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxxxx&dimensions=ga:browser&metrics=ga:visits,ga:pageviews&start-date=2011-01-01&end-date=2011-11-30&start-index=1&max-results=1000
    [query] => Array
        (
            [start-date] => 2011-01-01
            [end-date] => 2011-11-30
            [ids] => ga:xxxxxxxx
            [dimensions] => ga:browser
            [metrics] => Array
                (
                    [0] => ga:visits
                    [1] => ga:pageviews
                )

            [start-index] => 1
            [max-results] => 1000
        )

    [itemsPerPage] => 1000
    [totalResults] => 220
    [selfLink] => https://www.googleapis.com/analytics/v3/data/ga?ids=ga:xxxxx&dimensions=ga:browser&metrics=ga:visits,ga:pageviews&start-date=2011-01-01&end-date=2011-11-30&start-index=1&max-results=1000
    [profileInfo] => Array
        (
            [profileId] => xxxxx
            [accountId] => xxxxx
            [webPropertyId] => UA-xxxxxx-x
            [internalWebPropertyId] => xxxxxxxxxx
            [profileName] => xxxxx.com
            [tableId] => ga:xxxxxxxx
        )

    [containsSampledData] => 
    [columnHeaders] => Array
        (
            [0] => Array
                (
                    [name] => ga:browser
                    [columnType] => DIMENSION
                    [dataType] => STRING
                )

            [1] => Array
                (
                    [name] => ga:visits
                    [columnType] => METRIC
                    [dataType] => INTEGER
                )

            [2] => Array
                (
                    [name] => ga:pageviews
                    [columnType] => METRIC
                    [dataType] => INTEGER
                )

        )

    [totalsForAllResults] => Array
        (
            [ga:visits] => 36197
            [ga:pageviews] => 123000
        )

    [rows] => Array
        (
            [0] => Array
                (
                    [0] => (not set)
                    [1] => 459
                    [2] => 1237
                )

            [1] => Array
                (
                    [0] => 12345
                    [1] => 3
                    [2] => 3
                )

            [2] => Array
                (
                    [0] => 440955
                    [1] => 1
                    [2] => 1
                )

            [3] => Array
                (
                    [0] => Alexa Toolbar
                    [1] => 1
                    [2] => 1
                )

            [4] => Array
                (
                    [0] => Android Browser
                    [1] => 4177
                    [2] => 9896
                )

    ....

    The [Rows] Array has 219 entries.

Теперь проблема. Я провел последнюю неделю, пытаясь разобрать это в HTML-таблицу или что-нибудь, что выглядит презентабельно. Я подошел ближе, но кажется, что этот многомерный массив выходит за рамки того, с чем я могу справиться. Я также пытаюсь сделать решение достаточно гибким, чтобы обрабатывать больше метрик или измерений, если они также добавляются. Я самоучка PHP, поэтому, может быть, мне не хватает функции или двух, которые могли бы сделать это проще. Еще раз спасибо за любые советы, советы по созданию этой работы.


Я продвинулся немного дальше, но я не полностью форматирую, как хочу ... может быть, кто-то может увидеть, где я ошибся

$output = $service->data_ga->get($ids,$start_date,$end_date,$metrics,$optParams);
echo'<table style="text-align: left; width: 100%;" border="1" cellpadding="2"
cellspacing="2">
<tbody><tr>';
foreach ($output['columnHeaders'] as $header) {
print "<td>";
printf('%25s', $header['name']);
print "</td>";
}
print "</tr>";
foreach ($output['rows'] as $row) {
print "<td>";
foreach ($row as $column)
printf('%25s', $column);
print "</td>";
}
print "\n";
echo'
</tbody>
</table>';

Мне все еще не удается правильно отобразить строки.

Ответы [ 2 ]

2 голосов
/ 23 января 2014

Проблема в вашем foreach для строк тела таблицы. Вы, кажется, пропустили ряды. Оберните его в другой цикл, чтобы распечатать tr вокруг набора tds.

Это то, что я использовал для распечатки таблицы аналитических данных:

$data = $analytics->data_ga->get('ga:' . $profileId, $dateFrom, $dateTo, $metrics, array('dimensions' => $dimensions));

<table>
        <thead>
            <tr>
                <?php 
                    foreach ($data->columnHeaders as $header) {
                        $headerName = ucwords(preg_replace('/(\w+)([A-Z])/U', '\\1 \\2', str_replace('ga:', '', $header->name)));
                        print '<th>';
                        printf('%s', $headerName);
                        print '</th>';
                    }
                ?>
            </tr>
        </thead>
        <tbody>
        <?php 
            foreach ($data->rows as $row) {
                print '<tr>';
                foreach ($row as $cell) {
                    print '<td>';
                    printf('%s', $cell);
                    print '</td>';
                }
                print '</tr>';
            }
        ?>
    </tbody>
 </table> 
2 голосов
/ 22 февраля 2012

Чтобы помочь вам в пути, используйте

$data [rows][$i][$j][columnHeaders] [0][name]
$data [rows][$i][$j][columnHeaders] [1][name]

, а для строк используйте что-то вроде

$data [rows][0][1]

Вам нужно будет получить переменную с приращением, например:

var =(count($data [columnHeaders]));

   for ($i='0'; $i<=$var; $i++) {
    echo '.$data [columnHeaders] [$i][name].';}

Это должно помочь вам построить стол.Удачи!

...