Александр Головатенко
Александр Головатенко —

Говорит и показывает GoogleAnalyticsкатегории: Flex , Программирование , C# , ASP.NET

Как известно, Google не предоставил API для работы с его сервисом GoogleAnalytics, а если Вы захотели отображать на своем сайте гламурные графики посещаемости Вашего мега-сайта, то что делать? Понятно что делать: авторизируемся на GoogleAnalytics, качаем отчет в формате xml и отрисовываем на графике. Начнем.

Задача:
Отобразить на графике свежие статистические данные о посещаемости веб-сайта со своего аккаунта на сервисе GoogleAnalytics.

Решение:

Инструменты: сайт, на котором будет отображаться график делаем на ASP.NET, код пишем на C# Framework 2.0, график нарисуем на Flex 3(Eclipse SDK + Flex plugin).

Логика следующая: при загрузке страницы, вытаскивем xml файл отчета и сохраняем на диск, потом график (swf'ка), берет этот файл и отрисовывает данные. И так: открываем студию (MS VS 2008 у меня) и создаем новый веб-сайт. Код метода Page_Load класса _Default следующий:

  1. public partial class _Default : System.Web.UI.Page
  2. {
  3. protected void Page_Load(object sender, EventArgs e)
  4. {
  5. try
  6. {
  7. //Кукисы, которые получим после логина на GoogleAnalytics и будем передавать в последующих запросах
  8. CookieCollection Cooks = new CookieCollection();

  9. //По этому адресу будеим логиниться
  10. string loginUrl = "https://www.google.com/accounts/ServiceLoginBoxAuth";
  11. HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(loginUrl);
  12. webRequest.AllowAutoRedirect = true;
  13. webRequest.CookieContainer = new CookieContainer();
  14. webRequest.Method = "POST";
  15. webRequest.ContentType = "application/x-www-form-urlencoded";

  16. //Параметры, которые передаем в запросе(POST) на логин. Здесь:
  17. //Email - мыло
  18. //Passwd - и пароль, под которыми Вы логинились на GoogleAnalytics
  19. byte[] ByteQuery = Encoding.UTF8.GetBytes("ifr=true&Email=******&Passwd=******&rmShown=1");
  20. webRequest.ContentLength = ByteQuery.Length;
  21. Stream QueryStream = webRequest.GetRequestStream();
  22. QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
  23. QueryStream.Close();

  24. //Принимаем ответ, и, если все ОК, кукисы
  25. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
  26. if (webResponse.StatusCode == HttpStatusCode.OK)
  27. {

  28. //Удачно залогинились и вытаскиваем кукисы
  29. webResponse.Cookies = webRequest.CookieContainer.GetCookies(webRequest.RequestUri);
  30. if (webResponse.Cookies != null)
  31. {
  32. Cooks.Add(webResponse.Cookies);
  33. }
  34. webResponse.Close();

  35. //Запрашиваем отчет в формате xml. Здесь:
  36. //fmt=1 - это формат отчета xml
  37. //id=******** - это айди профиля сайта, отчет по которому хотим достать,
  38. //подсмотреть его можно в адресной строке браузера, когда выбираете профиль сайта на GoogleAnalytics
  39. //pdr=20090215-20090317 - это период, за который хотим получить данные
  40. //rpt=BrowsersReport - название отчета
  41. webRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/analytics/reporting/export? fmt=1&id=14192744&pdr=20090215-20090317&cmp=average&rpt=BrowsersReport&view=1");
  42. webRequest.Method = "GET";
  43. webRequest.CookieContainer = new CookieContainer();

  44. //Добавляем куки
  45. webRequest.CookieContainer.Add(Cooks);

  46. //Запрашиваем файл отчета
  47. webResponse = (HttpWebResponse)webRequest.GetResponse();
  48. if (webResponse.StatusCode = HttpStatusCode.OK)
  49. {

  50. //Получили отчет и сохраняем его в файл
  51. XmlDocument xmlReport = new XmlDocument();
  52. xmlReport.Load(webResponse.GetResponseStream());
  53. xmlReport.Save(Server.MapPath(@"data\Report.xml"));
  54. webResponse.Close();

  55. //Уходим
  56. webRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/Logout");
  57. webRequest.Method = "GET";

  58. //Не забываем про кукисы
  59. webRequest.CookieContainer = new CookieContainer();
  60. webResponse = (HttpWebResponse)webRequest.GetResponse();
  61. if (webResponse.StatusCode != HttpStatusCode.OK)
  62. {
  63. lblMsg.Text = "Не удалось красиво уйти.";
  64. }
  65. webResponse.Close();
  66. }
  67. else
  68. {
  69. lblMsg.Text = "Залогиниться - залогинилить, но файл отчета не пришел.";
  70. }
  71. }
  72. else
  73. {
  74. lblMsg.Text = "Неправильные логин и/или пароль.";
  75. }
  76. }
  77. catch (Exception ex)
  78. {
  79. lblMsg.Text = ex.Message;
  80. }
  81. }
  82. }

Вот так мы получили файл отчета по браузерам, которые ходят на ваш сайт . Теперь в Default.aspx вставляем <object> графика, удачно закомпиленого в sfw'ку. Выглядит это примерно так:

Важно: если у вас на сервере вклюен mode-rewrite, то url в HTTPService указывайте абсолютный, т.к. он берется не относитеьлно физического размещения файла на сервере, а относительно адреса.

 

Исходники:

ASP.NET сайт и mxml-исходник графика тут.