Содержание страницы
Начало работы с Yandex Metrika API
В работе с любыми API первым шагом является получение токена. Затем нужно понять как формировать запросы. Плюс необходимо узнать какие форматы данных может возвращать API — обычно это JSON, CSV (TXT).
Вся документация Yandex Metrika API обычно очень быстро гуглится — https://yandex.ru/dev/metrika/.
Я пройдусь от получения токена до получения выгруженных данных из Yandex.Metrika.
Yandex Token Для яндекс метрики
Итак, в соответствии с инструкцией регистрируем приложение по ссылке https://oauth.yandex.ru/client/new. Ссылка может поменяться, так что если что гуглите.
Указываем название приложения, делаем описание.
В поле Callback URL вбиваем https://oauth.yandex.ru/verification_code
Указываете в разделе Yandex.Metrika, что выдать доступ для получения статистики.
Создаете приложение
Яндекс выдаст Вам ID и Пароль. Можете не запоминать их, всегда можно найти в списке созданных приложений — https://oauth.yandex.ru/
Берем ссылку
https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
Подставляем <идентификатор приложения> — это полученный ID. Вбиваем в URL в браузере. У меня получилась такая вот ссылка:
https://oauth.yandex.ru/authorize?response_type=token&client_id=14b9e156de754901b9f321f53746092b
Дальше появляется запрос на предоставление доступа
Далее подтверждаем. Яндекс выдаст нам наш токен для доступа к статистике:
Наш токен
Запоминаем, никому не передаем, храним в укромном уголке на компьютере или в почте 🙂
AgAAAAAJ8KAaAAYl4OT0R-7vKU3IkJuf0A0lN5M
Ставим библиотеку tapi-yandex-metrika
https://github.com/pavelmaksimov/tapi-yandex-metrika
pip install pyOpenSSL
pip install tapi-yandex-metrika
Пример запроса (поменяйте TOKEN и IDS счетчика)
from tapi_yandex_metrika import YandexMetrikaStats ACCESS_TOKEN = "AgAAAAAJ8KAaAAYl4OT0R-7vKU3IkJuf0A0lN5M" # По умолчанию возвращаются только 10000 строк отчета, # если не указать другое кол-во в параметре limit. # В отчете может быть больше строк, чем указано в limit # Тогда необходимо сделать несколько запросов для получения всего отчета. # Чтоб сделать это автоматически вы можете указать # параметр receive_all_data=True при инициализации класса. api = YandexMetrikaStats( access_token=ACCESS_TOKEN, # Если True, будет скачивать все части отчета. По умолчанию False. receive_all_data=True ) params = dict( ids="18197662", metrics="ym:s:visits,ym:s:bounces", dimensions="ym:s:date,ym:s:startOfMonth", sort="ym:s:date", limit=10 ) result = api.stats().get(params=params) print(result().data)
Получение данных из Yandex.Metrika API с помощью библиотеки tapi_yandex_metrika и выгрузка данных в Excel через Pandas DataFrame
Ниже будет представлен пример получения данных из Yandex.Metrika API с последующим сохранением массива данных в Excel.
from tapi_yandex_metrika import YandexMetrikaStats import json import pandas as pd ACCESS_TOKEN = "AgAAdsf4fffaAAYl4OT0R-7vKU3IkJuf0A0lN5M" METRIC_IDS = "54333315" # По умолчанию возвращаются только 10000 строк отчета, # если не указать другое кол-во в параметре limit. # В отчете может быть больше строк, чем указано в limit # Тогда необходимо сделать несколько запросов для получения всего отчета. # Чтоб сделать это автоматически вы можете указать # параметр receive_all_data=True при инициализации класса. #Параметры запроса для библиотеки tapi_yandex_metrika api = YandexMetrikaStats( access_token=ACCESS_TOKEN, # Если True, будет скачивать все части отчета. По умолчанию False. receive_all_data=True ) #Параметры запроса для библиотеки tapi_yandex_metrika params = dict( ids = METRIC_IDS, metrics = "ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds", dimensions = "ym:s:date,ym:s:<attribution>TrafficSource,ym:s:<attribution>SourceEngine,ym:s:gender", date1 = "2daysAgo", date2 = "yesterday", sort = "ym:s:date", accuracy="full", limit = 200 ) #Получаем данные из Yandex.Metrika API result = api.stats().get(params=params) result = result().data result = result[0]['data'] #Создаем пустой dict (словать данных) dict_data = {} #Парсим исходный list формата Json в dictionary (словарь данных) for i in range(0, len(result)-1): dict_data[i] = { 'date':result[i]["dimensions"][0]["name"], 'traffic-source':result[i]["dimensions"][1]["name"], 'traffic-details':result[i]["dimensions"][2]["name"], 'users':result[i]["metrics"][0], 'visits':result[i]["metrics"][1], 'pageviews':result[i]["metrics"][2], 'bounceRate':result[i]["metrics"][3], 'pageDepth':result[i]["metrics"][4], 'avgVisitDurationSeconds':result[i]["metrics"][5] } #Создаем DataFrame из dict (словаря данных или массива данных) dict_keys = dict_data[0].keys() df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys) #Выгрузка данных из DataFrame в Excel df.to_excel("Трафик.xlsx", sheet_name='data', index=False)
Получается вот такого вида Excel (некоторые значения удалил):
Пример выгрузки данных из API Яндекс Метрики с помощью библиотеки Requests
Пусть у нас будет файл params.json
{"ACCESS_TOKEN": "AOUHOHOI89h9uohaAAZB-rXh-t-olkj98yhIII", "METRIC_IDS": { "site1.ru":"2342315", "site2.ru":"136443462", "site3.ru":"46465917"}, "PATH": "D:\\PythonETL\\Data\{"ACCESS_TOKEN": "AOUHOHOI89h9uohaAAZB-rXh-t-olkj98yhIII", "METRIC_IDS": { "site1.ru":"2342315", "site2.ru":"136443462", "site3.ru":"46465917"}, "PATH": "D:\\PythonETL\\Data\\0_Raw_Data\\YandexMetrika\\"}_Raw_Data\\YandexMetrika\\"}
Далее рассмотрим пример выгрузки данных по трафику по дням за последний год — файл 1_Трафик.py
# Импортируем библиотеку requests import requests import json import pandas as pd import sys from datetime import datetime from dateutil.relativedelta import relativedelta # Загружаем параметры из json config_variables = json.load(open('params.json')) # Устанавливаем переменные locals().update(config_variables) # Вычисляем дату начала и дату окончания DayStart = datetime.today() + relativedelta(years=-1) DayStart = DayStart.strftime('%Y-%m-%d') DayEnd = datetime.today().strftime('%Y-%m-%d') # Адрес api метода для запроса get url_param = "https://api-metrika.yandex.net/stat/v1/data" def get_data_to_excel(api_param,header_params,file_name): # Отправляем get request (запрос GET) response = requests.get( url_param, params=api_param, headers=header_params ) # Преобразуем response с помощью json() result = response.json() result = result['data'] # Создаем пустой dict (словать данных) dict_data = {} # Парсим исходный list формата Json в dictionary (словарь данных) for i in range(0, len(result)-1): dict_data[i] = { 'date':result[i]["dimensions"][0]["name"], 'traffic-source':result[i]["dimensions"][1]["name"], 'traffic-details':result[i]["dimensions"][2]["name"], 'users':result[i]["metrics"][0], 'visits':result[i]["metrics"][1], 'pageviews':result[i]["metrics"][2], 'bounceRate':result[i]["metrics"][3], 'pageDepth':result[i]["metrics"][4], 'avgVisitDurationSeconds':result[i]["metrics"][5] } #Создаем DataFrame из dict (словаря данных или массива данных) dict_keys = dict_data[0].keys() df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys) #Выгрузка данных из DataFrame в Excel df.to_excel(file_name,sheet_name='data',index=False) for (site_name,metric_id) in METRIC_IDS.items(): print("site_name: " + site_name) # Задаем параметры для API api_param = { "ids":metric_id, "metrics":"ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds", "dimensions":"ym:s:date,ym:s:<attribution>TrafficSource,ym:s:<attribution>SourceEngine", "date1":DayStart, "date2":DayEnd, "sort":"ym:s:date", "accuracy":"full", "limit":100000 } # Задаем параметры header_params header_params = { 'GET': '/management/v1/counters HTTP/1.1', 'Host': 'api-metrika.yandex.net', 'Authorization': 'OAuth ' + ACCESS_TOKEN, 'Content-Type': 'application/x-yametrika+json' } # Название файла Excel file_name = PATH + metric_id +"_Трафик.xlsx" # Вызываем функцию get_data_to_excel(api_param,header_params,file_name)
И для запуска из-под Windows создаем батник — 0_Run_All_Scripts.cmd. В этот файл друг за дружкой можно вписать несколько скриптов и затем cmd файл внести в Windows Sheduler для выгрузки по расписанию.
chcp 1251 "C:\Users\User\AppData\Local\Programs\Python\Python37-32\python.exe" "D:\PythonETL\Scriptschcp 1251 "C:\Users\User\AppData\Local\Programs\Python\Python37-32\python.exe" "D:\PythonETL\Scripts\0_Extract\YandexMetrika\1_Трафик.py"_Extract\YandexMetrika_Трафик.py"
11 Comments