【发布时间】:2009-04-29 21:14:16
【问题描述】:
我的应用从我的网站读取一个 (html) 文件,我想使用 Google Analytics 跟踪对该文件的访问。由于读取文件时不会执行 GA Javascript,因此不会对其进行跟踪。有没有办法直接从代码触发 GA,或者从 .NET 应用程序执行 Javascript 而无需添加一堆依赖项?
【问题讨论】:
标签: .net javascript google-analytics
我的应用从我的网站读取一个 (html) 文件,我想使用 Google Analytics 跟踪对该文件的访问。由于读取文件时不会执行 GA Javascript,因此不会对其进行跟踪。有没有办法直接从代码触发 GA,或者从 .NET 应用程序执行 Javascript 而无需添加一堆依赖项?
【问题讨论】:
标签: .net javascript google-analytics
Google Analytics 的工作原理是通过 javascript 向 Google 服务器发出网络请求。如果您想以编程方式执行此操作,您只需自己发出此 Web 请求。当您在浏览器中加载页面时,我会使用 Fiddler 或 FireBug 来捕获请求的样子。然后您可以在您的 .Net 应用程序中使用相同的 URL。
【讨论】:
我最近发布了一个 .net 库,它允许您通过代码使用 Google Analytics 本地记录页面视图。它是在 GNU 下作为开源发布的,因此只需要适当的归属即可。
你可以在这里获取图书馆:http://www.diaryofaninja.com/projects/details/ga-dot-net
API 使用示例:
GooglePageView pageView = new GooglePageView("My page title",
"www.mydomain.com",
"/my-page-url.html");
TrackingRequest request = new RequestFactory().BuildRequest(pageView);
GoogleTracking.FireTrackingEvent(request);
还有一个内置的 HTTP 处理程序,允许您通过在页面上简单地包含跟踪像素来触发跟踪事件:
<img src="/tracker.asmx?domain=mydomain.com&pagetitle=My%20Page%20Title&url=/my-page.aspx" />
或者,您可以使用 jquery 来使用 Google Analytics(zip、jpg 等)跟踪页面中的链接 - 不久前在此处发布了有关它的博客:
【讨论】:
private void analyticsmethod4(string trackingId, string pagename)
{
Random rnd = new Random();
long timestampFirstRun, timestampLastRun, timestampCurrentRun, numberOfRuns;
// Get the first run time
timestampFirstRun = DateTime.Now.Ticks;
timestampLastRun = DateTime.Now.Ticks-5;
timestampCurrentRun = 45;
numberOfRuns = 2;
// Some values we need
string domainHash = "123456789"; // This can be calcualted for your domain online
int uniqueVisitorId = rnd.Next(100000000, 999999999); // Random
string source = "Shop";
string medium = "medium123";
string sessionNumber = "1";
string campaignNumber = "1";
string culture = Thread.CurrentThread.CurrentCulture.Name;
string screenRes = Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height;
string statsRequest = "http://www.google-analytics.com/__utm.gif" +
"?utmwv=4.6.5" +
"&utmn=" + rnd.Next(100000000, 999999999) +
// "&utmhn=hostname.mydomain.com" +
"&utmcs=-" +
"&utmsr=" + screenRes +
"&utmsc=-" +
"&utmul=" + culture +
"&utmje=-" +
"&utmfl=-" +
"&utmdt=" + pagename +
"&utmhid=1943799692" +
"&utmr=0" +
"&utmp=" + pagename +
"&utmac=" +trackingId+ // Account number
"&utmcc=" +
"__utma%3D" + domainHash + "." + uniqueVisitorId + "." + timestampFirstRun + "." + timestampLastRun + "." + timestampCurrentRun + "." + numberOfRuns +
"%3B%2B__utmz%3D" + domainHash + "." + timestampCurrentRun + "." + sessionNumber + "." + campaignNumber + ".utmcsr%3D" + source + "%7Cutmccn%3D(" + medium + ")%7Cutmcmd%3D" + medium + "%7Cutmcct%3D%2Fd31AaOM%3B";
using (var client = new WebClient())
{
client.DownloadData(statsRequest);
//Stream data = client.OpenRead(statsRequest);
//StreamReader reader = new StreamReader(data);
//string s = reader.ReadToEnd();
}
}
参考这个 - http://tilr.blogspot.com/2012/10/google-analytics-use-google-analytics.html
【讨论】:
Google Analytics(分析)提供了两种方法来跟踪自定义操作、事件或您处理的任何事情。在您的情况下,简单的解决方案是为您的应用程序读取的 HTML 文件生成一个虚拟页面浏览量。调用适当的JavaScript function:
pageTracker._trackPageview("/Foo.html");
这样每次处理 Foo.html 时,都会为其生成一个页面浏览量,就像它是对您的应用程序的正常查询一样。
如果您想将这些 Foo.html 与普通浏览量区分开来,GA 有一个不错的功能,称为 Event Tracking,那么您应该看看。
【讨论】:
我最终使用 WebBrowser 组件来加载 .html 文件,从而触发 GA 跟踪器。 WebBrowser 组件执行嵌入的 JavaScript。
using (WebBrowser wb = new WebBrowser())
{
wb.Url = new Uri(@"mytrackingpage.html");
while (wb.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
现在我要做的就是添加一些错误处理,摆脱丑陋的 DoEvents 并将 WebBrowser 移动到单独的线程。
【讨论】:
Google 有几种不同语言的库(alpha 版),用于访问各种谷歌 API,包括分析——这里有一个很好的描述——https://developers.google.com/analytics/devguides/collection/ 和 .NET 库是https://developers.google.com/api-client-library/dotnet/apis/analytics/v3
还请记住,您在使用此功能时必须遵守他们的隐私政策:https://developers.google.com/analytics/devguides/collection/protocol/policy
【讨论】: