Python cкрипт выгрузки страниц входа из API Яндекс Метрики

# для получения токена заводим приложение на странице https://oauth.yandex.ru/
# берем ID приложения и подставляем в ссылку https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
# на экране покажется отладочный токен, который в этом скрипте token

Что потребуется

  • Список номеров счетчиков
  • Токен API метрики

Плюсы подхода

  • Позволяет выгрузить большое количество ключей  
  • Обходит ограничение в 100.000 запросов.

Функция для выгрузки всех страниц входа


def get_stata_url (site, date1, date2, limit, offset):
    
    API_URL = 'https://api-metrika.yandex.ru/stat/v1/data'
    params = {
            'date1': startDate,
            'date2': endDate,
            'id': site,
            'metrics': 'ym:s:visits',
            'dimensions': 'ym:s:startURL', #,ym:s:month
            'filters': "ym:s:startURLDomain=='site.ru' AND ym:s:trafficSourceName=='Переходы из поисковых систем'",
            'accuracy': 'full',
            'limit': limit,
            'offset': offset,
    }
    
    r = requests.get(API_URL, params = params, headers={'Authorization':token}, timeout=40)
    
    r = r.json()
    
    return r

Проходим в цикле и выгружаем страницы

offset=1 # начинаем забирать данные с первой строки
Flag = False # значение Flag=True будет означать выход из цикла выгрузки одного проекта

while Flag==False:
    print('Starting line ' + str(offset))
    
    sleep(random.randint(1,3))
    
    data = get_stata_url (author, startDate, endDate, limit, offset)
    
    try:
        if len(data['data']) != 0:
    
            for line in data['data']:

                url = line['dimensions'][0]['name']
                visits = line['metrics'][0]
                

                with open('visits_all_page.csv' , 'a') as file:
                    file.write(f'{url}\t{visits}\n')

            offset += limit
        
            sleep(10)
        
        else:
            break
        
    except Exception as e:
        print(e, type(e))
        Flag = True
        print ('Данных нет')
Добавить комментарий 0

Ваш электронный адрес не будет опубликован. Обязательные поля помечены *