Using filters with the Google Analytics API and PHP
Posted May 31st, 2009 in PHP (Updated July 14th, 2009)
The Google Analytics API allows filtering to be done on the result data before it is fetched so you could, for example, only get data for visitors from the United States. This post shows how to format the filters field in PHP and also how to use my Google Analytics API PHP Class with filters.
Read more about my Google Analytics API PHP Class.
A URL making a request to the API looks like this, where data is being fetched for the ga:vists and ga:pageviews dimensions for the period from 2009-04-29 to 2009-05-28 (I've broken the URL onto multiple lines for readability):
https://www.google.com/analytics/feeds/data?ids=ga:7426158
&dimensions=&metrics=ga:visits,ga:pageviews
&sort=-ga:visits,ga:pageviews&start-date=2009-04-29
&end-date=2009-05-28&max-results=10&start-index=1
To filter this so it only contains data for the United States add the following "filters" parameter to the request URL:
&filters=ga:country%3D%3DUnited+States
The %3D%3D is the urlencoded version of == which tells the GA API to make an exact match. Some other possible matches are != to not match the string, =~ for regular expressions, and =@ where the data contains the string. For a full list of filtering types read the documentation.
To make sure the filters are correctly formatted when using PHP use the urlencode() function. If this is not used then the GA API will return a 400 error status because it cannot understand the data passed.
An example of encoding the country filter used above would be like this in PHP:
$filters = "&filters=" . urlencode("ga:country==United States");
Using my PHP Class you could pass 'urlencode("ga:country==United States")' as the $filters parameter like so:
$data = $api->data($id, '', 'ga:visits,ga:pageviews', false,
false, false, 10, 1, urlencode("ga:country==United States"));
Another way to do this is to use my analytics_filters helper class which is in the same library file as the analytics class itself. You would then do something like this:
$filters = new analytics_filters('ga:country', '==', 'United States');
$data = $api->data($id, '', 'ga:visits,ga:pageviews', false, false, false, 10, 1, $filters);
If you wanted to find e.g. the data for Firefox users in the United States you would do this:
$filters = new analytics_filters('ga:country', '==', 'United States');
$filters->add_and('ga:browser', '=@', 'Firefox');
$data = $api->data($id, '', 'ga:visits,ga:pageviews', false, false, false, 10, 1, $filters);
If you wanted to find e.g. the data for visitors who have come from the United States or from Canada you would do this:
$filters = new analytics_filters('ga:country', '==', 'United States');
$filters->add_or('ga:country', '==', 'Canada');
$data = $api->data($id, '', 'ga:visits,ga:pageviews', false, false, false, 10, 1, $filters);
If you have some more examples you would like to see please send me an email and I can create another post with some more ideas of what can be done.
Related posts:
- The Google Analytics API and PHP: A series (Tuesday, April 28th 2009)
Share or Bookmark
Share or Bookmark this page using the following services. You will need to have an account with the selected service in order to post links or bookmark this page.
Subscribe or Follow
Subscribe via RSS or email, or follow me on Facebook or Twitter below. The RSS icon takes you through to Feedburner where you can select the service or application to use.
