GA非常强大,但是免费版的有诸多的限制,如:GA里面最多能导出的记录是5000,如果要做细致,个性化的分析,无疑是需要用到API,免费版GA通过API最多可以拿100万条记录,付费版本GA360通过API最高是300W,但付费版本可以跟BigQuery关联起来,将GA账户里的数据导入进去,所以是可以获取到所有的原始记录的。
Google官方提供了多种API接口给用户,下图是整体数据逻辑结构如图2-88所示:
左侧是收集数据模块,收集用户互动的相关数据,可以看到经典版的ga.js只直接记录为Logs的行为,而统一版analytics.js则采用跟移动应用一致的方式,通过测量协议去手机数据。
中间上方是配置,可以管理数据的处理方式。
中间下方是数据处理,这个是Google分析的后台数据处理的,黑匣子来的。
右侧就提供的报告或接口,是处理后的数据。
获取API授权的原理:在GoogleAPI后台创建一个服务器ID,然后给该ID在GA的账户级别的用户管理里面授予分析的权限,然后在API创建OAuth 2.0型的ID和秘钥,这个就是放在程序里面的。
下面来介绍如何通过R和Python来连接GA的API来获取数据,首先介绍R的。
1.R
用R来获取GA的数据需要用RGoogle Anlytics,自行下载这个包,用这个包的好处是,该作者已经将分页查询的功能内置进去了,所以能够获得准确的数据。具体设置过程如:
1、GoogleAPI管理里创建服务账号密钥,
访问谷歌开发者后台,进入后先创建一个项目,然后选择“凭据”→“创建凭据”→“服务账号密钥”,如图2-89所示:
创建后会有个服务器账号ID,如图2-90所示:
2、在GA 账户级别的给这个服务器账号ID授权,权限级别是“阅读和分析”的即可,如图2-91所示:
3、然后返回到Google APIs管理界面,创建 OAuth 2.0授权,如图2-92所示,一般选择的应用类型是Web,如果不知道就选择其他,这个是通用型的:
4、创建后会看到图2-93所示,客户端ID就是后面需要用到的了。
5、然后在R上,将客户端ID和密钥填入对应的位置,如图2-94所示详细的代码去GA小站官网获取。
如果没有的包,自行下载。包RGoogleAnalytics是已经将分页查询的功能内置,所以通过这个查询出来的数据都是尽可能不抽样。上述代码中的table.id就是数据视图ID,下面试运行下如图2-95所示:
可以看到数据已经导出来了。
2.Python
这一节介绍如何用Python连接Google Anlaytics API去获取数据,前面大部分跟R的相同,不同的地方在于Python是引入json的密钥文件,而不是直接用服务端ID和密钥。
1、假设您已经创建好了OAuth2.0客户端ID,然后将其以json格式下载,如图2-96所示:
可以看到有个json文件,如图2-97所示:
2、然后将谷歌分析官方将那段实例代码复制带本地保存,并将前面下载的json秘钥与那段代码挡在同一个路径中,然后代码找到key_file_location,将其改为json文件的名称,如图2-98所示:
然后试运行下看有没报错,如果没报错,会返回一些数据,那就表示成功了。
3、接下来新建另一个py文件,引入上面的示例代码,代码中的第一段就是引入该示例代码,然后初始化,这里的profile_id就是GA的数据视图ID,如图2-99所示:
然后运行下,如图2-100,这段代码的的意思是获取2016年7月1号开始到2016年8月10号用桌面端访问过/my/p_login.php,每天的用户数是多少,并且按日期排序:
数据就提取出来了。可以看到,在通过API获取的数据的过程中最关键的还是ga().get的函数配置,而配置的模式跟前面Google Sheet类似的,特别是过滤器的使用是一致。API返回的数据都是字典结构,ga().get()返回有以下数据:
3.API V4
在2017年7月的时候,GA发布了新一版的API,Version4的,授权的方式上没有改变,但是界面的UI有了变化,更重要的是查询的核心函数变成了batchGet。
下面看看设置授权的流程:
1、进入谷歌云平台控制后台创建一个项目。
2、然后单击“IAM和管理”→“账号服务”,创建一个服务账号,账号的格式会是*****@http://developer.gserviceaccount.com的格式,然后在GA中给这个授予“读取和分析”的权限。
3、创建和下载密钥
单击服务账号右侧的那个三个点后选择“创建密钥”,如图2-101所示:
然后选择p12的格式下载。
4、将官方的案例代码复制到您的编辑器去,然后更改密钥路径已经设置相关的视图ID后试运行,如图2-102所示:
运行没有报错,获得返回的数据,API获得授权取得数据。仔细看上图的代码,这里获取数据使用的核心函数是batchGet,前面v3版本的使用的是ga().get()函数。