Задача - получить аналитику гугла по сайту из 1С:8. Причем получать эту информацию регулярно, регламентным заданием, дабы анализировать продажи совместно с траффиком
Для связки с Google analytics API использую протокол OAUTH 2.0.
Статьи, которые помогли мне ознакомиться с протоколом:
https://developers.google.com/identity/protocols/OAuth2#basicsteps
https://habrahabr.ru/company/mailru/blog/115163/
В идеале - надо бы использовать HTTP соединение и SSL, но копипаст еще никого не подводил)
Шаг 1. Зарегистрировать проект в консоли разработчиков
https://console.developers.google.com/apis/library
Создаю проект. На вкладке Обзор включаю нужный api - Google analytics, на вкладке Учетные данные - создаю учетные данные, выбираю пункт Идентификатор клиента OAuth, Тип приложения - другие типы. Результат - клиент oauth, с идентификатором и секретом клиента, которые я использую для доступа к api гугла.
Шаг 2. Получить код ответа.
Создаю обработку, на форме размещаю поле HTMLдокумента с именем Браузер. Подключаю обработчик ожидания. На кнопку действия размещаю процедуру
Параметры = "response_type=code"+"&";
Параметры = Параметры + "client_id="+ client_id + "&";
Параметры = Параметры + "redirect_uri=http://localhost" + "&";
Параметры = Параметры + "access_type=offline"+"&";
Параметры = Параметры + "scope=https://www.googleapis.com/auth/analytics";
АдресАвторизации = "https://accounts.google.com/o/oauth2/auth" + "?";
ПолныйАдресАвторизации = АдресАвторизации + Параметры;
ЭлементыФормы.Браузер.Перейти(ПолныйАдресАвторизации);
client_id - идентификатор созданного проекта
При нажатии Выполнить - пользователю предлагается ввести логин/пароль в гугле и разрешить приложению доступ к данным. Код ответа смотрю в заголовке браузера: ЭлементыФормы.Браузер.документ.URLUnencoded
Шаг 3. Обменять данный код(code) на ключ доступа(access_token).
XTTPЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddObject("XTTPЗапрос", XTTPЗапрос);
Скрипт.Eval("XTTPЗапрос.Option(4)=13056");
XTTPЗапрос.Open("Post", "https://accounts.google.com/o/oauth2/token", 0);
XTTPЗапрос.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ПараметрыPOST = "grant_type=authorization_code" + "&";
ПараметрыPOST = ПараметрыPOST + "code=" + КодДоступа + "&";
ПараметрыPOST = ПараметрыPOST + "client_id=" + client_id + "&";
ПараметрыPOST = ПараметрыPOST + "client_secret=" + client_secret + "&";
ПараметрыPOST = ПараметрыPOST + "redirect_uri=http://localhost";
XTTPЗапрос.send(ПараметрыPOST);
Текст ответа:{ "access_token" : "ya29.CjHUAjuyyO6y5HZB9zOC-R6SurYOg7zoUIM9YQASLrBBT_S6F6rNxkvSzV2SNyt3R...", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "1/Zq3Vi90TZ3O52ft2NDley9-OqO7FxlefusSHH...."}
access_token поможет мне получить нужные данные api гугла, однако параметр expires_in показывает время жизни, после которого данный ключ бесполезен. Дабы получать каждый день данные уже без участия пользователя, сохраняю значение refresh_token, который буду обменивать на access_token.
Шаг 4(На будущее). Обменять refresh_token на access_token
XTTPЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddObject("XTTPЗапрос", XTTPЗапрос);
Скрипт.Eval("XTTPЗапрос.Option(4)=13056");
XTTPЗапрос.Open("Post", "https://accounts.google.com/o/oauth2/token", 0);
XTTPЗапрос.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
GoogleДанные = Справочники.Сайты.google;
ПараметрыPOST = "grant_type=refresh_token" + "&";
ПараметрыPOST = ПараметрыPOST + "client_id=" + client_id + "&";
ПараметрыPOST = ПараметрыPOST + "client_secret=" + client_secret + "&";
ПараметрыPOST = ПараметрыPOST + "refresh_token=" + refresh_token;
XTTPЗапрос.send(ПараметрыPOST);
ТекстОтвета = XTTPЗапрос.responsetext();
изменен параметр grant_type и указан refresh_token
Ответ данного запроса выглядит так:
{ "access_token" : "ya29.CjHUAlFwX3C196iBqH2UgBTi9qYu68zC6hTuWb9O0cvZIGUedwVIbTXc_Zm2yX8KK..", "token_type" : "Bearer", "expires_in" : 3600}
Шаг 5. Получить данные по траффику.
Итак, доступ получен. Осталось составить запрос - как запросить данные. Гугл уже позаботился о данном вопросе и любезно предоставил страничку https://ga-dev-tools.appspot.com/query-explorer/ , за что им огромное человеческое спасибо! В итоге код для получения трафика выглядит так:
ХТТПЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Скрипт.AddObject("ХТТПЗапрос",ХТТПЗапрос);
Скрипт.Eval("ХТТПЗапрос.Option(4)=13056");
ДатаЗапроса = формат(текущаяДата(),"ДФ=yyyy-MM-dd");
ТекстАпи = "https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A115479052&client_id="+ client_id + "&start-date="+ДатаЗапроса+"&end-date="+ДатаЗапроса+"&metrics=ga%3Asessions";
ХТТПЗапрос.Open("GET",ТекстАпи,0);
ХТТПЗапрос.setRequestHeader("Authorization","Bearer " + Токен);
ХТТПЗапрос.Send();
Результат = ХТТПЗапрос.ResponseText();
Результат - Json-файл. Если у вас платформа выше 8.3.6.1977 , то обработать данный файл можно средствами платформы. Иначе - парсинг собственными силами.
Шаг 6. Создать регламентное задание,запускающее Шаг 4 и Шаг 5 и сохранение данных по траффику
Данная статья написана по итогам первого знакомства с Google API.