【问题标题】:Data not matching when fetching from Google Analytics API (python)从 Google Analytics API(python)获取时数据不匹配
【发布时间】:2019-05-31 06:37:21
【问题描述】:

我正在编写一个脚本来从 Google Analytics API v4 中提取数据。该脚本工作正常。但是,在通过将 GA 与我获取的数据进行比较来验证数据时,我可以看到一些差异。差别不大,但我不明白为什么不一样。

顺便提一下,我在脚本中使用了动态段,它与我在 GA 视图中的段具有完全相同的条件。 该段仅通过包含会话持续时间 > 1 秒的流量来过滤垃圾邮件流量。

这是我要拉的结构:

body={
"reportRequests":[
{
"viewId": view_id,
"dimensions":[{"name": "ga:date"},{"name": "ga:sourceMedium"},{"name": "ga:campaign"},{"name": "ga:adContent"},{"name": "ga:channelGrouping"},{"name": "ga:segment"}],
"dateRanges":[
{
"startDate":"2018-12-16",
"endDate":"2018-12-20"
}],
"metrics":[{"expression":"ga:sessions","alias":"sessions"}],
"segments":[
{
"dynamicSegment":
{
    "name": "sessions_no_spam",
    "userSegment":
    {
    "segmentFilters":[
    {
        "simpleSegment":
        {
        "orFiltersForSegment":
        {
            "segmentFilterClauses": [
            {
            "metricFilter":
            {
                "metricName":"ga:sessionDuration",
                "operator":"GREATER_THAN",
                "comparisonValue":"1"
            }
            }]
        }
        }
    }]
    }
}
}]
}]
}).execute()

不确定我的问题的答案是否更具概念性而不是技术性,但以防万一我还包括在我的数据库中批量处理结果的功能:

def print_results(no_spam_traffic):
    connection = psycopg2.connect(database = 'web_insights_data', user = 'XXXX', password = 'XXXXX', host = 'XXX', port = 'XXXXX')
    cursor = connection.cursor()
    for report in no_spam_traffic.get('reports', []):
        for row in report.get('data', {}).get('rows', []):
            gadate = row['dimensions'][0]
            gadate = gadate[0:4]+'/'+gadate[4:6]+'/'+gadate[6:8]
            gasourcemedium = row['dimensions'][1]
            gacampaign = row['dimensions'][2]
            gaadcontent = row['dimensions'][3]
            gachannel = row['dimensions'][4]
            gasessions = row['metrics'][0]['values'][0]

            cursor.execute("SELECT * from GA_no_spam_traffic where gadate = %s AND sourcemedium = %s AND campaign = %s AND adcontent = %s", (str(gadate),str(gasourcemedium),str(gacampaign),str(gaadcontent)))
            if len(cursor.fetchall())>0:        #update old entries
                cursor.execute("UPDATE GA_no_spam_traffic set sessions = %s where gadate = %s AND sourcemedium = %s AND campaign = %s AND adcontent = %s", (str(gasessions),str(gadate),str(gasourcemedium),str(gacampaign),str(gaadcontent)))
                connection.commit()
            else:                               #Insert new rows
                cursor.execute("INSERT INTO GA_no_spam_traffic (gadate,sourcemedium,campaign,adcontent,channel,sessions) VALUES (%s,%s,%s,%s,%s,%s)", (gadate,gasourcemedium,gacampaign,gaadcontent,gachannel,gasessions))
                connection.commit()

    connection.close()

任何想法可能是什么问题? 谢谢!!

【问题讨论】:

  • 您在 UI 和您的 API 拉取之间看到了什么样的差异? GA 通常使用采样来快速显示值。您是否尝试过指定采样级别?
  • 是的,如果您发现小的差异,我会考虑抽样问题。
  • 谢谢!我不应该有抽样问题,因为我没有太多的会议。在 35 天内,我的段数

标签: python google-analytics google-analytics-api segment


【解决方案1】:

我设法改进了它,尽管它并不准确。但是,这是可以接受的差异。我的页面大小有问题,所以我增加了 pagesize 参数。

这是来自谷歌指南的分页部分的链接:https://developers.google.com/analytics/devguides/reporting/core/v4/migration#pagination 谢谢

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多