Говорит и показывает 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 следующий:
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- try
- {
- //Кукисы, которые получим после логина на GoogleAnalytics и будем передавать в последующих запросах
- CookieCollection Cooks = new CookieCollection();
- //По этому адресу будеим логиниться
- string loginUrl = "https://www.google.com/accounts/ServiceLoginBoxAuth";
- HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(loginUrl);
- webRequest.AllowAutoRedirect = true;
- webRequest.CookieContainer = new CookieContainer();
- webRequest.Method = "POST";
- webRequest.ContentType = "application/x-www-form-urlencoded";
- //Параметры, которые передаем в запросе(POST) на логин. Здесь:
- //Email - мыло
- //Passwd - и пароль, под которыми Вы логинились на GoogleAnalytics
- byte[] ByteQuery = Encoding.UTF8.GetBytes("ifr=true&Email=******&Passwd=******&rmShown=1");
- webRequest.ContentLength = ByteQuery.Length;
- Stream QueryStream = webRequest.GetRequestStream();
- QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
- QueryStream.Close();
- //Принимаем ответ, и, если все ОК, кукисы
- HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
- if (webResponse.StatusCode == HttpStatusCode.OK)
- {
- //Удачно залогинились и вытаскиваем кукисы
- webResponse.Cookies = webRequest.CookieContainer.GetCookies(webRequest.RequestUri);
- if (webResponse.Cookies != null)
- {
- Cooks.Add(webResponse.Cookies);
- }
- webResponse.Close();
- //Запрашиваем отчет в формате xml. Здесь:
- //fmt=1 - это формат отчета xml
- //id=******** - это айди профиля сайта, отчет по которому хотим достать,
- //подсмотреть его можно в адресной строке браузера, когда выбираете профиль сайта на GoogleAnalytics
- //pdr=20090215-20090317 - это период, за который хотим получить данные
- //rpt=BrowsersReport - название отчета
- webRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/analytics/reporting/export? fmt=1&id=14192744&pdr=20090215-20090317&cmp=average&rpt=BrowsersReport&view=1");
- webRequest.Method = "GET";
- webRequest.CookieContainer = new CookieContainer();
- //Добавляем куки
- webRequest.CookieContainer.Add(Cooks);
- //Запрашиваем файл отчета
- webResponse = (HttpWebResponse)webRequest.GetResponse();
- if (webResponse.StatusCode = HttpStatusCode.OK)
- {
- //Получили отчет и сохраняем его в файл
- XmlDocument xmlReport = new XmlDocument();
- xmlReport.Load(webResponse.GetResponseStream());
- xmlReport.Save(Server.MapPath(@"data\Report.xml"));
- webResponse.Close();
- //Уходим
- webRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/Logout");
- webRequest.Method = "GET";
- //Не забываем про кукисы
- webRequest.CookieContainer = new CookieContainer();
- webResponse = (HttpWebResponse)webRequest.GetResponse();
- if (webResponse.StatusCode != HttpStatusCode.OK)
- {
- lblMsg.Text = "Не удалось красиво уйти.";
- }
- webResponse.Close();
- }
- else
- {
- lblMsg.Text = "Залогиниться - залогинилить, но файл отчета не пришел.";
- }
- }
- else
- {
- lblMsg.Text = "Неправильные логин и/или пароль.";
- }
- }
- catch (Exception ex)
- {
- lblMsg.Text = ex.Message;
- }
- }
- }
Вот так мы получили файл отчета по браузерам, которые ходят на ваш сайт . Теперь в Default.aspx вставляем <object> графика, удачно закомпиленого в sfw'ку. Выглядит это примерно так:
Важно: если у вас на сервере вклюен mode-rewrite, то url в HTTPService указывайте абсолютный, т.к. он берется не относитеьлно физического размещения файла на сервере, а относительно адреса.
Исходники: