Python 操作 GA API 指南
因为需要写一个 Blog Feature 的缘故,所以接触了下 GA 的 Python API,发现 G 家的 API 不是那么直观,比较绕,但是,在使用过程中发现其实 G 家的 API 设计挺有意思的,可能有一些新的设计理念,值得思考学习一番。但是这不是这篇文章的重点,这篇文章还是介绍一下 GA 的 Python API V4 版本的使用,顺带在最后解答几个我再使用过程中遇到的问题。
GA API 使用入门
目前 GA 的 API 是 V4 版本,据说 V3 版本还可以使用,但是我没有尝试,为了减少后续的升级,直接就上了 V4 的版本。V4 版本用起来比较蛋疼,但是无妨,按照官方的 Guide 还是能进行下去的,只是中途遇到了一些问题,这个后面说。
启用 API
要开始使用 Analytics Reporting API v4,您需要先使用设置工具,该工具会引导您在 Google 云端平台控制台中创建项目,启用 API 以及创建凭据。
这里要吐槽一番,G 家似乎把它的 GA 服务和 GCP 绑定在一起了,不知道我的理解对不对,反正我发现设置的项目 是通用的。这个不太理解,但是也不妨碍我的使用,所以按照以下步骤做就好了:
- 打开服务帐号页。如果看到相关提示,请选择项目。
- 点击创建服务帐号。
- 在创建服务帐号窗口中,键入服务帐号的名称,然后选择提供新的私钥。如果您希望将 G Suite 全网域权限授予该服务帐号,另请选中启用 G Suite 全网域委派功能。然后,点击创建。
这里提醒以下,创建私钥有 json 和 p12 模式,推荐使用 json,但是我使用的是 p12,因为我很久以前就已经申请过了。ok,到此,创建账户阶段算是完了,这里需要记录几个东西。

安装 GA Python 包
这个很简单,直接使用 pip 就好了,需要注意的是,最好连 PyOpenSSL 也装上,因为 p12 密钥文件要用到。
尝试示例
您需要创建一个名为 HelloAnalytics.py 的文件,其中将包含指定的示例代码。所有代码你可以在我的 Github Repo 中找到:GA Demo Code。这里你有几个常量是需要更改的:
因为刚才我们创建了几个 ID 的文件,所以需要把它放进代码里面,在代码里应该修改这里:
把 15、16、17 行按照上面的 ID 替换掉。这样代码应该就可以运行了,尝试一下看看。如果发生错误,不妨看看我下面的问题解决或者好好利用 Google 搜索一番。
遇到的问题
- 访问错误或者无响应

一开始看到第 3 行的错误时,我就猜测是墙的原因,所以就将 URL:https://analyticsreporting.googleapis.com/$discovery/rest 复制出来,在浏览器发现可以打开。所以这里我就没有想法了,因为我认为我的梯子是全局的,所以这段代码应该也是走的梯子,但是后面发现这就是打脸的想法。
在查找了一些资料和尝试了一些 DEMO 代码之后我发现应该还是代码没有走梯子的问题,所以就设置了一下 Http 的 proxy 参数,参考官网资料:httplib2 Http Object,然后配了一下 proxy 参数:

然后就发现这样居然就行了!真特么的逗。
- User does not have any Google Analytics account
这个问题比较简单,肯定最开始想的就是没有授权,所以就去搜了一下 GA 的用户授权,原来前边的授权和 GA 的授权没半毛钱的关系,所以还是得在 GA 上开一下授权:

这两个地方编辑一下就 OK 了。
- 怎么自己构造 API 数据
跟着 GA 的官方指导一直写下去发现是可以工作的,但是,发现 Demo 仅仅展示了 session 是怎么获取的,并没有其他的支持,所以我们还是需要自己阅读文档,所以参考了这个文档:GA 所有 Metric,通过这份文档,我们就可以自己根据需要搜索所需的数据了。
Reference
- httplib2:A comprehensive HTTP client library
- Analytics Google API Error 403: “User does not have any Google Analytics Account
Python 操作 GA API 指南的更多相关文章
- python操作ansible api示例
#!/usr/bin/env python # -*- coding:utf-8 -*- import json import shutil from collections import named ...
- python 操作 saltstack Api(二) 示例
获取token #!/usr/bin/env python #-*-coding:utf--*- import urllib import urllib.parse import urllib.req ...
- Python 操作Zabbix API 获取ERROR级别告警信息并打印
1.需求:有一个语音合成播报项目,要实时获取zabbix的ERROR级别以上告警信息,将该信息合成语音播报出去.(合成语音及播报已经完成) 2.现实:整理zabbix告警级别,将不太重要的告警放到ER ...
- Python 操作Sonqube API 获取检测结果并打印
1.需求:每次Sonqube检查完毕后,需要登陆才能看到结果无法通过Jenkins发布后直接看到bug 及漏洞数量. 2.demo:发布后,可以将该项目的检测结果简单打印出来显示,后面还可以集成钉钉发 ...
- 通过Python操作hbase api
# coding=utf-8 # Author: ruin """ discrible: """ from thrift.transport ...
- Redis - Python操作Redis
目录 Python操作Redis 一. Redis安装和基本使用 二. Python操作Redis API使用 1.操作模式 2.连接池 3.Django配置Redis 4.操作 Python操作Re ...
- python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...
- 运营的Python指南 - Python 操作Excel
这是一份写给运营人员的Python指南.本文主要讲述如何使用Python操作Excel.完成Excel的创建,查询和修改操作. 相关代码请参考 https://github.com/RustFishe ...
- python实现elasticsearch操作-CRUD API
python操作elasticsearch常用API 目录 目录 python操作elasticsearch常用API1.基础2.常见增删改操作创建更新删除3.查询操作查询拓展类实现es的CRUD操作 ...
随机推荐
- xCode8以及iOS10 的新特性
其他:ios10中 适配问题(1.系统判断方法失效:2.隐私数据的访问问题:3.UIColor 问题4.真彩色的显示5.ATS问题6.UIStatusBar问题7.UITextField8.UserN ...
- 用vue实现简单分页
在这个demo中,我用vue对一个json文件中的数据进行了简单的分页,没用用到交互,一下是我的实现过程. 基础逻辑 1.将json文件引入app.vue,并作为data返回 data(){ var ...
- Java NIO (五) 管道 (Pipe)
Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 如下图: 向管道写数据: 从管道读数据: 1. ...
- 关于sleep函数的一些问题和资料
//================================================================================================ 2 ...
- Linux发行版 CentOS6.5 修改默认主机名
修改前准备 我们将主机名修改为comexchan.cnblogs.com(本文发布于http://comexchan.cnblogs.com/) 备份相关配置文件,以便回滚 cp /etc/sysco ...
- Head First设计模式之命令模式
一.定义 定义:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化.对请求排队或记录请求日志,以及支持可撤消的操作. 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关 ...
- selenium WebDriver 八种定位方式源码
/* * 多种元素定位方式 */ package com.sfwork; import java.util.List; import org.openqa.selenium.By; import or ...
- python_第2课
前言 回顾一下python+selenium基础,并整理相关知识点,分享给有需要,在前进道路上的朋友. 由于不是在python中敲的代码,有可能有缩进等相关错误,请自行检查 数据类型 #python中 ...
- [js高手之路] es6系列教程 - 新的类语法实战选项卡
其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法. 一.用es6封装一个基本的类 class Person{ constructor( ...
- AVFoundation 框架初探究(二)
接着第一篇总结 系列第一篇地址:AVFoundation 框架初探究(一) 在第一篇的文章中,我们总结了主要有下面几个点的知识: 1.对AVFoundation框架整体的一个认识 2.AVSpeech ...