GA API的使用(R&Python)

Google Analytics Haran 8年前 (2016-09-09) 8013次浏览 2个评论

GA因为其强大的功能而备受一些企业的青睐,但由于是免费的,GA提供的数据存在抽样的,导致数据的准确大大降低,但GA也提供一些API接口给用户,通过GA API分页查询功能能降低抽样的比例,甚至是没有抽样。

首先在Google APIs创建GA API授权,其中一共有三种授权方式:

  • API密钥:简单通用型;
  • Oauth2.0客户端ID:应用访问型,如web端;
  • 服务账户密钥: 主要适用于服务器间

整体来说是通用的,要适用GA API,需要先创建服务账号密钥,生成id

R

需要安装 RGoogleAnalytics

library(httpuv)
require(RGoogleAnalytics)
token <- Auth(client.id=paste("156582067107-2c86apnook88a9fnn1knu7egbpjst***.",
                              "apps.googleusercontent.com", sep=""), 
              client.secret="bKu-j2SYVpbkQYWAyvuFepKJ")
save(token,file="./1token_file")
ValidateToken(token)
query.list <- Init(start.date = "2016-8-10", # 设置开始日期
                   end.date = "2016-8-24",  # 设置结束日期
                   dimensions = "ga:eventAction, ga:eventLabel",
                   metrics = "ga:totalEvents",
                   max.results = 10000,
                   #segments="users::condition::ga:dimension1=~[a-zA-z0-9]",
                   sort = "-ga:totalEvents",
                   table.id = "ga:******")  # 设置分站 view id
ga.query <- QueryBuilder(query.list)
ga.data <- GetReportData(ga.query, token, split_daywise = T)
write.csv(ga.data,file="D:/gadata/0810-0824/test.csv",fileEncoding = "UTF-8")  # 设置导出文件名

RGoogleAnalytics这个包已经将GA提供的分页查询功能封装进去了,所以RGoogleAnalytics官方说是能够提供接近精确的数据。

Python

Python的比较简单,基本是按照官方两个例子导入,再加载就可以,具体提取数据是用service.data().ga().get()方法,


import install_ga_demo as gaapi
import json

service=gaapi.get_service('analytics','v3','scope','client_secrets.json')
profile_id='10506***'


data=service.data().ga().get(
		ids='ga:'+profile_id,
		start_date='2016-07-01',
		end_date='2016-08-10',
		max_results='20000',
		metrics='ga:users',
		dimensions='ga:date',
		sort='ga:date',
		segment='users::condition::ga:deviceCategory==desktop').execute()

a=json.dumps(data['rows'])
print(data['rows'])

GA API的使用(R&Python)
分页查询

GA API的数据每次只能够返回1W条数据,GA里面最高为5K,但通过分页查询,可以尽可能的返回数据,虽然还是存在抽样。分页查询其实是往这个URL:https://www.googleapis.com/analytics/v3/data/ga? …\&start-index=10001&max-results=10000请求数据,通过修改每次请求的start-index和max_results再做循环就可以尽可能多抽取数据,下面是我做将在Python将数据扩大到100w,同时插入数据库,耗费1h,主要是GA API对请求频率有一定的限制,而且目前程序还是单线程的。

start_time=time.time()
for i in range(10000):
	a=[]
	aa=service.data().ga().get(
      ids='ga:' + profile_id,
      start_index=str(1+i*10000),
      max_results='10000',
      start_date='2015-01-01',
      end_date='today',
      samplingLevel=None,
      dimensions='ga:date,ga:pagePath,ga:city,ga:language,ga:browser,ga:campaign,ga:medium',
      metrics='ga:users,ga:sessions,ga:newUsers').execute()
	data1=list(aa['rows'])
	try:
		# cursor.executemany('insert into gatestp2016 (date,pagePath,city,language,browser,campaign,medium,sessions,users,newusers) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',data1)
		# db.commit()
		print("已经插入%d万条数据" %int(1+i))
		if len(data1)<10000:
			break
	except TypeError as e:
		print(e)
print("Done!")
end_time=time.time()-start_time
print('共耗时:%d s' %int(end_time))

在请求数据的过程中,最重要的就是service.data().ga().get()中的参数吗,如逗号表示or,分号表示和,其他的如:
GA API的使用(R&Python)
GA API的使用(R&Python)
其他具体查看:https://developers.google.com/analytics/devguides/reporting/core/v3/reference?hl=zh-cn


如有疑问,可以在文章底部留言或邮件(haran.huang@ichdata.com) 我~
喜欢 (5)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. python 代码中,import install_ga_demo as gaapi这个install_ga_demo模块在哪?是怎么加载的?
    terry2019-03-07 18:59 回复 Windows 10 | Chrome 70.0.3538.67
    • https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py?hl=zh-cn 第三步
      GA小站2019-03-07 19:50 回复 Mac OS X | Chrome 72.0.3626.119