1

我正在使用 Doug Tan 制作的 PHP 中的 Google Analytics API 类从特定配置文件中检索分析数据。

在此处查看网址:http ://code.google.com/intl/nl/apis/analytics/docs/gdata/gdataArticlesCode.html

当您创建该类的新实例时,您可以添加配置文件 ID、您的 google 帐户 + 密码、日期范围以及您想从分析中获取的任何维度和指标。

例如,我想查看 2009 年有多少人从不同国家/地区访问了我的网站。

//make a new instance from the class
$ga = new GoogleAnalytics($email,$password);

//website profile example id
$ga->setProfile('ga:4329539');

//date range
$ga->setDateRange('2010-02-01','2010-03-08');

//array to receive data from metrics and dimensions
$array = $ga->getReport(
        array('dimensions'=>('ga:country'),
        'metrics'=>('ga:visits'),
        'sort'=>'-ga:visits'
        )
);

现在你知道这个 API 类是如何工作的了,我想解决我的问题。

速度。从分析数据库中检索多种类型的数据需要花费大量时间,尤其是在构建具有不同指标/维度的不同数组时。我怎样才能加快这个过程?

是否可以将所有可能的数据存储在缓存中,这样我就可以在不反复加载的情况下检索数据?

4

2 回答 2

2

您可以确保将数据加载到缓存中,确切地说,数据缓存的方式/位置完全取决于您。您可以使用任何东西,从每个请求的缓存(这对于这个特定问题将毫无用处)到诸如APCmemcached、本地数据库之类的东西,甚至只是将原始结果保存到文件中。当然,这些不会使从 Google 实际检索数据的速度更快。

关于这一点,很可能(没有看到代码)向 Google 发出的请求可能是按顺序执行的。可以扩展 PHP 类以允许从 Google 并行请求多组数据(例如使用cURL Multi)。

于 2010-03-12T10:59:47.420 回答
0

面临同样的问题,并决定使用 cronjob 并将数据保存在 .json 文件中,我可以用于显示。

        $globalTrendData = $client->runReport([
            'property' => 'properties/' . $property_id,
            'dateRanges' => [
                new DateRange([
                    'start_date' => '20daysAgo',
                    'end_date' => 'yesterday',
                ]),
            ],
            'dimensions' => [
                new Dimension(['name' => 'pagePath',]),
                new Dimension(['name' => 'pageTitle',]),
                new Dimension(['name' => 'city',]),
                new Dimension(['name' => 'sessionSource',]),
                new Dimension(['name' => 'date',])
            ],
            'metrics' => [
                new Metric(['name' => 'screenPageViews',]),
                new Metric(['name' => 'userEngagementDuration',]),
                new Metric(['name' => 'activeUsers',]),

            ]
        ]);
        
foreach ($globalTrendData->getRows() as $key => $row) {

            $saved['globalTrendData'][$key]['dimension']['pagePath'] = (array) $row->getDimensionValues()[0]->getValue() ;
            $saved['globalTrendData'][$key]['dimension']['pageTitle'] = (array) $row->getDimensionValues()[1]->getValue() ;
            $saved['globalTrendData'][$key]['dimension']['city'] = (array) $row->getDimensionValues()[2]->getValue() ;
            $saved['globalTrendData'][$key]['dimension']['source'] = (array) $row->getDimensionValues()[3]->getValue() ;
            $saved['globalTrendData'][$key]['dimension']['date'] = (array) $row->getDimensionValues()[4]->getValue() ;


            $saved['globalTrendData'][$key]['metric']['screenPageViews'] = (array) $row->getMetricValues()[0]->getValue() ;
            $saved['globalTrendData'][$key]['metric']['userEngagementDuration'] = (array) $row->getMetricValues()[1]->getValue() ;
            $saved['globalTrendData'][$key]['metric']['activeUsers'] = (array) $row->getMetricValues()[2]->getValue() ;

        }

      file_put_contents($GLOBALS['serverPath'].'/monitoring/statistics.json',json_encode($saved, JSON_PRETTY_PRINT)) ;

Json 文件输出示例:

"globalTrendData": {
    "0": {
        "dimension": {
            "pagePath": {
                "0": "\/modeles-maison\/liste"
            },
            "pageTitle": {
                "0": "Plans de maisons 100% personnalisables - adapt\u00e9s \u00e0 votre style et \u00e0 votre budget"
            },
            "city": {
                "0": "(not set)"
            },
            "source": {
                "0": "(direct)"
            },
            "date": {
                "0": "20220128"
            }
        },
        "metric": {
            "screenPageViews": {
                "0": "18"
            },
            "userEngagementDuration": {
                "0": "152"
            },
            "activeUsers": {
                "0": "1"
            }
        }
    }
}
于 2022-02-11T15:48:46.707 回答