Google Analytics API, Oauth2.0 и 1c8

02.05.16

Интеграция - WEB-интеграция

Обращение к Google Analytics API, Протокол Oauth 2.0 и запросы от 1С:8 без авторизации пользователя

Задача - получить аналитику гугла по сайту из 1С:8. Причем получать эту информацию регулярно, регламентным заданием, дабы анализировать продажи совместно с траффиком

Для связки с Google analytics API использую протокол OAUTH 2.0.

Статьи, которые помогли мне ознакомиться с протоколом:

https://developers.google.com/identity/protocols/OAuth2#basicsteps

https://developers.google.com/adwords/api/docs/guides/authentication#create_a_client_identifier_and_client_secret

https://habrahabr.ru/company/mailru/blog/115163/

http://pro1c.net/pub/283

В идеале - надо бы использовать 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.

google api oauth2.0

См. также

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С. Бесплатный период Техподдержки - 1 месяц.

60000 руб.

07.05.2019    34415    65    45    

26

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2413    2    0    

9

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2141    1    1    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18956    21    22    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    3775    3    2    

4

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18710    53    50    

29

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    733    3    1    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pythonchik 03.05.16 11:05 Сейчас в теме
А зачем COMОбъект("WinHttp.WinHttpRequest.5.1")?
Стандартным HTTPСоединение не удалось обойтись? А то как-то не кроссплатформенно получилось.
Z_Z; Irwin; Virusaka; Dimz_z; TMV; frkbvfnjh; viptextil; ekaruk; +8 Ответить
2. Ольга_tmp 72 04.05.16 07:46 Сейчас в теме
(1) pythonchik, как есть. Да, идеологически правильно - сделать HTTPСоединение и прикрутить SSL.
3. viptextil 42 04.05.16 11:16 Сейчас в теме
(1) pythonchik, Точно не знаю, но для кроссплатформенности можно было бы костылик использовать. Типа wget и под винду есть и под Linux. Могу, конечно и ошибаться.
4. Serg O. 301 04.05.16 13:06 Сейчас в теме
афигеть как сложно... перестал читать на 1 шаге...
там авторизация с указанием телефона и @
а это уже не совсем "бесплатно" - при желании вас вычислят...
и денег стрясут хоть прямо с телефона
5. ture 613 04.05.16 15:55 Сейчас в теме
(4) Serg O., у гугла много всяких подсадных сервисов. К примеру, можно распознавать человеческую речь, ну т.е. можно с 1С разговаривать в стиле - "Открой, маленькая дрянь, документ, укажи контрагента такогото... проведи и закрой.... " Но это все беспонтово, свою прогу этим сильно круто не сделать, просто будешь баблом сервисы гугла прокачивать.
6. TMV 14 07.05.16 08:24 Сейчас в теме
оффтоп.
Так все-таки "XTTPЗапрос" или "ХТТПЗапрос" ?
7. viktor2008 16.02.17 08:32 Сейчас в теме
Все прекрасно, а как теперь файлик обратно на гугл-диск отправить?
8. Ольга_tmp 72 16.02.17 11:52 Сейчас в теме
(7)какой файлик? в статье описывается получение аналитики гугла, на гугл-диск ничего отправлять не нужно
9. viktor2008 16.02.17 15:17 Сейчас в теме
Дело в том, что я использую ваш пример для получения расшаренного файла с гугла-диска, корректирую его и теперь хочу положить его на место. Вот и задал вопрос, как полученный ранее файл обратно положить на гугл-диск. Использовать приложение гугл-диск - руководство не рекомендует.

10. Ольга_tmp 72 18.02.17 09:41 Сейчас в теме
(9)также Post запросом. например http://forum.aeroion.ru/topic446.html описывается подобное
11. viktor2008 19.02.17 16:34 Сейчас в теме
Спасибо за ссылку. Думаю она мне поможет решить мою задачу.
12. echo77 1919 21.07.17 17:56 Сейчас в теме
Без объекта ПолеХТМЛДокумента на форме это можно сделать?
13. echo77 1919 31.07.17 20:21 Сейчас в теме
Тема кому-нибудь интересна? Я думаю создавать пример, делать публикацию по использованию Google API для Drive(Чтение данных файла, содержимое папок), SpreadSheets(Чтение данных о файле, перечень листов в файле, чтение и анализ значений на всех листах, запись значений на листах, изменение оформления ячеек)?
evergrim; ROM_1C; +2 Ответить
14. ROM_1C 692 22.03.18 14:38 Сейчас в теме
(13)
Тема кому-нибудь интересна? Я думаю создавать пример, делать публикацию по использованию Google API для Drive

Делали?
15. echo77 1919 22.03.18 19:29 Сейчас в теме
(14) Нет, готовая программа есть, но оформлять ее в виде публикации с набором методов и примеров пока нет времени
evergrim; Ko1t; ROM_1C; +3 Ответить
16. ROM_1C 692 22.03.18 22:45 Сейчас в теме
17. Zamza 27.04.18 11:18 Сейчас в теме
У вас опечатка в статье:

client_id - идентификатор созданного проекта

Это всё же идентификатор клиента.
18. boron 10.07.18 20:15 Сейчас в теме
А как получить КодДоступа?
Оставьте свое сообщение