I occasionally run a little app
I
wrote 4 years ago to grab the most popular pages on my website via Google
Analytics and update the database so the
website can display a top 10 list of those
pages. I tried to run it this morning and it fell over in a heap. It seems that
Google no longer supports the API I was using. Ho hum, shit happens, software
does rust…
So time to drag out my old code. Except I couldn’t find it. So time to look
at Google’s latest and greatest API and rebuild it from scratch. Here’s what’s
required and a small code sample.
First download the Google API .NET libraries. There seem to be a whole host
of Google API libraries in nuget, but for Google Analytics the following should
get what you need and all the dependencies.
Install-Package Google.Apis.Analytics.v3
Then you’ll need to create a service account in the
Google Developers
Console. After creating this service account, create a P12 key for it and
save it somewhere on your computer. Then add the service account email
address to the Google Analytics account you want to access.
Next fire up Visual Studio and create a console application and add the
following code
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using System;
using System.Security.Cryptography.X509Certificates;
namespace UpdateTop10
{
class Program
{
[STAThread]
static void Main(string[] args)
{
try
{
Read();
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex.Message);
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
private static void Read()
{
String serviceAccountEmail = "<the service account email address>";
var certificate = new X509Certificate2(@"<the location of your P12 key file>",
"notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
}.FromCertificate(certificate));
// Create the service.
var service = new AnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "<your application name in Developer Console>"
});
// Run the request.
DataResource.GaResource.GetRequest req = service.Data.Ga.Get("ga:<the ID of the analytics view found under Admin/View Settings>", DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd"),
DateTime.Now.ToString("yyyy-MM-dd"), "ga:visits");
req.Dimensions = "ga:pagePath";
req.Sort = "-ga:visits";
GaData data = req.Execute();
for (int i=0; i<20; i++)
{
Console.WriteLine(data.Rows[i][0] + ": " + data.Rows[i][1]);
}
}
}
}
Fill in the bits between angled brackets with your details and give it a go.
The top 20 visited pages from the last month should appear in your output.
Overall it wasn’t too painful, Some of the examples on the web seem to
be written for older versions of the API which can cause some confusion and
Google have such a huge number of APIs out there, finding the right one can be
tricky, but once those hurdles are overcome, it’s reasonably straightforward.
Update - Windows Live Writer currently doesn't work with Blogger accounts, I'm guessing this is the same issue that I was having with my old little app. Hopefully Google told everyone they were turning off ClientLogin support, but it appears Microsoft didn't get the memo... And hopefully it gets fixed soon, because the Blogger editor is effing terrible