Содержание страницы
Начало работы с 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