首页 >> 网站分析, 网站技术 >> JAVA读取GA数据

JAVA读取GA数据

Catagory:网站分析, 网站技术, Date:2012年02月4日,Author: 工业品营销-贾定强

由于管理的网站比较多,同时为了避免Google非常轻松的发现站群,所以注册了很多GA账户来分别统计这些网站的流量。但这样做带来了一个麻烦,就是每天看网站流量的时候都要多次登录和退出GA账户,非常繁琐。http://www.trakkboard.com/是个不错的东西,可以把你的GA账户信息加入进去,然后一打开就可以看到你的所有网站的流量信息了,非常方便。以前有免费版,但最近没有免费版了。没办法,只能回到以前了。

这几天研究GA时,突然发现了这个东西:http://code.google.com/intl/zh-CN/apis/analytics/docs/tracking/home.html,眼前一亮,挺不错的。原来Google已经为我们提供了强大的API支持,可以非常方便的通过程序来管理GA账户(Management API)和导出GA数据(Data Export API)。正好有想写点JAVA的冲动了,已经两年没碰JAVA了,不知道自己的JAVA程序还剩下多少了。干脆自己写一个简易的程序来读取GA的数据吧,一为了减少每天登陆账户查看流量数据的繁琐,二为了捡起快要被遗忘的JAVA。

LGF要了eclipse,开始了JAVA开发。Google的帮助写的很详细,http://code.google.com/intl/zh-CN/apis/analytics/docs/mgmt/mgmtJava.html:安装Eclipse 的 Google Data 插件,阅读在 Eclipse 中使用 Google Data API 教程,下载GA程序开发需要的jar包(gdata-samples.java-1.46.0.zip,javamail1_4_4.zip,jaf-1_1_1.zip,apache-tomcat-7.0.25.zip),然后就可以开始写程序了。

用到GA API的地方并不难,就这么几步:初始化环境、登陆GA、构造查询条件、向对应的Feed发送查询条件、读出返回结果。每一步基本对应着一行程序,非常简单。下面跟大家分享一下我的程序。

package ga;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import com.google.gdata.client.analytics.AnalyticsService;
import com.google.gdata.client.analytics.DataQuery;
import com.google.gdata.data.analytics.AccountEntry;
import com.google.gdata.data.analytics.AccountFeed;
import com.google.gdata.data.analytics.DataEntry;
import com.google.gdata.data.analytics.DataFeed;

public class Traffices {

public static void main(String[] args) {
try {
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);
Calendar c = Calendar.getInstance();
c.roll(Calendar.DAY_OF_YEAR, -1);
String nowstr = df.format(c.getTime());

FileReader fr = new FileReader(
“account.txt”);// 创建FileReader对象,用来读取字符流
BufferedReader br = new BufferedReader(fr); // 缓冲指定文件的输入
FileWriter fw = new FileWriter(
“traffics.txt”);// 创建FileWriter对象,用来写入字符流
BufferedWriter bw = new BufferedWriter(fw); // 将缓冲对文件的输出
String myreadline; // 定义一个String类型的变量,用来每次读取一行
while (br.ready()) {
myreadline = br.readLine();// 读取一行
String[] str = split(myreadline, “\t”); // 将每行中的帐号和密码分开
String username = str[0].toString();
String pass = str[1].toString();

// Service Object to work with the Google Analytics Data Export
// API.
AnalyticsService analyticsService = new AnalyticsService(
“gaExportAPI_acctSample_v2.0”);

// ClientLogin Authorization.
analyticsService.setUserCredentials(username, pass);

// Construct query from a string.
URL queryUrl = new URL(
“https://www.google.com/analytics/feeds/accounts/default?max-results=50”);

// Make request to the API, using AccountFeed class as the
// second parameter.
AccountFeed accountFeed = analyticsService.getFeed(queryUrl,
AccountFeed.class);

// 输出账户信息,配置文件信息.
System.out.println(“——– Account Feed Results ——–“);
for (AccountEntry entry : accountFeed.getEntries()) {
System.out.println(“\nAccount Name  = ”
+ entry.getProperty(“ga:accountName”)
+ “\nProfile Name  = ”
+ entry.getTitle().getPlainText()
+ “\nProfile Id    = ”
+ entry.getProperty(“ga:profileId”)
+ “\nTable Id      = ”
+ entry.getTableId().getValue());

bw.write(entry.getTitle().getPlainText() + “\n”);

// 对账户中的每一个配置文件进行读取

// 设置查询条件
DataQuery query2 = new DataQuery(new URL(
“https://www.google.com/analytics/feeds/data”));

// 设置读取的visits的开始和结束时间
if (args != null && args.length == 2) {
query2.setStartDate(args[0].toString());
query2.setEndDate(args[1].toString());
} else {
query2.setStartDate(nowstr);
query2.setEndDate(nowstr);
}
query2.setDimensions(“ga:date”);
query2.setMetrics(“ga:visits”);
query2.setMaxResults(10000);
query2.setIds(entry.getTableId().getValue());
// 根据查询条件像GA服务器提交查询
DataFeed dataFeed2 = analyticsService.getFeed(
query2.getUrl(), DataFeed.class);

System.out
.println(“———– Data Feed Results ———-“);
// 输出查询结果
for (DataEntry entry2 : dataFeed2.getEntries()) {
System.out.println(“\n”
+ entry2.stringValueOf(“ga:date”)
+ ” Visits = ”
+ entry2.stringValueOf(“ga:visits”));
bw.write(entry2.stringValueOf(“ga:date”) + “\t”
+ entry2.stringValueOf(“ga:visits”) + “\n”);
}
}

}
// 关闭文件操作
bw.flush();
bw.close();
br.close();
fw.close();
br.close();
fr.close();

} catch (Exception e) {
e.printStackTrace();
}

}
//字符串拆分函数,str为要拆分的字符串,splitsign为拆分标记
public static String[] split(String str, String splitsign) {
int index;
if (str == null || splitsign == null)
return null;
ArrayList al = new ArrayList();
while ((index = str.indexOf(splitsign)) != -1) {
al.add(str.substring(0, index));
str = str.substring(index + splitsign.length());
}
al.add(str);
return (String[]) al.toArray(new String[0]);
}
}

程序不难,有点java基础的人应该都能看懂。不过看不懂也不要紧,我把程序进行了打包,想用的童鞋们可以自己下载使用。使用说明如下:

1. 安装java运行环境
2. account.txt里填写查看的ga账户的帐号和密码
3. 在命令行里运行java -jar ga.jar 开始日期 结束日期
4. 开始日期和结束日期格式为“yyyy-MM-dd”,不写默认为昨天
5. 流量查询结果存储在traffics.txt文件中

来源:工业品营销,原文地址:http://www.jiadingqiang.com/2359.html,欢迎分享本文,转载请保留出处!

Comments: 7 Responses to “ JAVA读取GA数据 ”
九月 16th, 2014
SAIEN 说 Said:

您好,博主:
想请教一下使用代理的情况下如何运行您的程序呢?
最近google GA更新后,通过修改URL无法一次性导出5000+的数据了,而且google被墙的很严重,不使用代理就上不了GA了。
您能不能更新下您的程序,添加一下处理代理的情况呢?
如果可以的话,我建议您给出一个proxy.txt让我等小白们往里面写代理服务器和端口。

感谢!!盼复!

[回复]

小强 回复:

这个程序写的时间有点久远了,好久不写代码,都生疏了。所以,暂时不想更新了。建议你买一个VPN软件就解决了。

[回复]

三月 7th, 2012
限时折扣 说 Said:

这个确实不懂 还是比较喜欢前端开发。

[回复]

二月 16th, 2012
商世网 说 Said:

不错,很好

[回复]

二月 14th, 2012

java不懂,正在学习css html,以后都来看强哥

[回复]

二月 6th, 2012
网络营销 说 Said:

强哥的技术真牛啊。原来2口子都是做技术的?

[回复]

小强 回复:

GF是我一同事名字的缩写 ……

[回复]

你也来说几句:

名字*必填
邮箱*必填,不会被公开
网站
QQ群交流
最近文章
文章归档
  • 2017 (3)
  • 2016 (30)
  • 2015 (63)
  • 2014 (21)
  • 2013 (38)
  • 2012 (25)
  • 2011 (67)
  • 2010 (268)
  • 2009 (19)