Статистика по Турбо-страницам из Яндекс.Метрики в сторонних отчетах

Турбо-страницы появились два года назад и за это время стали популярны. Особенно среди проектов, где есть проблемы с мобильной версией сайта; или в сфере услуг, где важно получать лиды.

Статистику по заявкам с турбо-страниц можно посмотреть только в Яндекс.Метрике вплоть до разреза ключевой фразы. Но многим клиентам не подходит предоставленная статистика эффективности в интерфейсе системы аналитики: отчет должен содержать статистику по затратам не только с Яндекс.Директа. Поэтому нужно искать решение для сбора статистики и агрегации её во вне.

Рассмотрим реализацию на примере отчета с конверсиями с турбо-страниц, который мы построили для нашего клиента sensat.ru.

1 этап: получение авторизационного токена

Для получения автоматизированного отчета есть два подхода: 

  1. Воспользоваться сторонним решением, например renta.im.
  2. Написать собственный скрипт подключения к API Метрики. 

Разберем второй вариант подробнее, т.к. он более полный, а общий смысл не отличается.

Для написания скрипта будем использовать Python 3, так как интерпретатор языка уже есть в Ubuntu, которая используется в качестве операционной системы почти на всех серверах.

Первым делом нам нужно получить авторизационный токен. Если нужен доступ к одному счетчику Метрики под вашим логином, воспользуйтесь «отладочным токеном». Его достаточно.

Когда у нас есть токен, можно писать скрипт. Если дальнейший код при запуске выдает ошибку о недостающих модулях, установите их

2 этап: пишем модуль для получения статистики из Яндекс.Метрики

Импортируем нужные библиотеки:

import requests

import pandas as pd

from io import StringIO

from time import sleep

Объявим класс, который назовем Metrika. При вызове мы будем помещать в него наш токен.

class Metrika(object):

     def __init__(self, token = None):

     super(Metrika, self).__init__()

     self.token = token

Затем внутри класса создадим метод GetStat, который и будет отвечать за скачивание статистики.

def GetStat(self, counter_id = None, date_from = None, date_to = None,

               dimensions = None, metrics = None, filters = None, attribution = None):

Расшифровка:

Теперь само тело метода:

stats_api = ‘https://api-metrika.yandex.ru/stat/v1/data.csv’

     token = self.token

     df = pd.DataFrame()

     check = True

     offset = 1

     try:

         while check:

             params = {  «date1»:date_from,

                            «date2»:date_to,

                            «dimensions»:’,’.join(dimensions),

                            «metrics»:’,’.join(metrics),

                            «ids»:counter_id,

                            «accuracy»:1,

                            «attribution»:attribution,

                            «group»:»day»,

                            «filters»:filters,

                         «offset»: offset,

                        «limit»:10000}

             headers = {«Authorization» : «OAuth » + token}

             r = requests.get(stats_api, params=params, headers = headers)

             tmp = pd.read_csv(StringIO(r.text), sep = ‘,’)

             df = df.append(tmp, sort = False)

             if len(tmp) == 0:

                 check = False

             offset += 10000

         return df

     except:

         print(‘Metrika: Error’)

         raise

Статистика будет отдаваться в csv, такой формат удобнее использовать при работе с pandas.

Используется get – запрос с параметрами и настройками, которые мы хотим получить из Метрики.

Мы задаем offset – отступ, т.е. с какой строки отбирать результат. Через цикл while мы проверяем данные, и, как только данные приходят пустые, выходим из цикла.

Этап 3: Создаем новый файл, на который будет ссылаться модуль

Импортируем модуль, а также модули работы с датой:

import metrika

from datetime import datetime as dt

from datetime import timedelta as td

Объявляем токен и номер счетчика:

token = ‘AQAAAAAh-AQAAAAAh-AQAAAAAh’

counter_id = ‘11111111’

Выбираем период дат. Чтобы статистика скачивалась за вчерашний день, используем такой вызов:

date_from = dt.now()-td(days = 2)

date_to = dt.now()-td(days = 1)

Поскольку заявки с турбо-страниц отправляются без визита на сайт, то брать UTM в качестве группировок нет смысла. Нужно использовать параметры отчетов Директа. 

Для среза по кампании и условию показа нужны такие ключи:

dimensions =[‘ym:s:date’,’ym:s:lastsignDirectClickOrder’,   ‘ym:s:lastsignDirectPhraseOrCond’]

Указываем номера целей вместо XXXXXXX. Вместо количества достижений цели используем целевые визиты:

metrics = [‘ym:s:goalXXXXXXXvisits’,’ym:s:goalXXXXXXXvisits’]

Создаем экземпляр нашего класса:

mk = metrika.Metrika(token)

И получаем отчет:

df = mk.GetStat(counter_id = counter_id, date_from = date_from, date_to = date_to,

             dimensions = dimensions, metrics = metrics, attribution = ‘lastsign’)

На выходе получим подобную таблицу:

Теперь полученный DataFrame можно импортировать в таблицы SpreadSheets, xlsx или в базу данных. Остается сопоставить его со статистикой из Директа, используя Функции ВПР или Join для баз данных.

Если нужно получить статистику из Метрики по другим конверсиям для разных источников, стоит использовать UTM-метки в качестве параметров. Полный список всех параметров можно найти здесь