由于管理的网站比较多,同时为了避免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文件中