Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. Python
  5. Yandex metrika api - Сбор поисковых запросов

Yandex metrika api - Сбор поисковых запросов

Запланировано Прикреплена Закрыта Перенесена Python
pythonyandexapi
1 Сообщения 1 Постеры 3 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано
    #1

    На днях встала задача как вытащить все поисковые запросы из метрики по сайту, начал думать… В принципе можно скачать эксельник в отчетах метрики, но она либо не даст сделать сразу за большой период либо начнет тормозить то еще чего - одним словом Яндекс))

    Вообщем решил покопаться в API яши и о чудо это можно легко реализовать при помощи кода. Так как с недавнего времени я постепенно начинаю плотно работать с языком Python решил написать скрипт на нем.

    И так что нам понадобится создать само приложение в яндекс - https://oauth.yandex.ru/client/new
    А в запрашиваемых данных выбрать Яндекс.Метрика - получение статистики.
    Снимок экрана 2026-02-18 в 17.45.41.png

    После нам требуется получить токен, его можно получить программно, но проще взять его по url так как они выдаются и действую почти год или даже больше. Для этого берем из нашего приложения где мы создали выше ClientId, и подставляем в ссылку:
    https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID
    После даем разрешение, видим токен и копируем его.

    Теперь перейдем к самому коду:

    import csv
    from datetime import datetime, timedelta
    
    import requests
    
    # --- НАШИ ДАННЫЕ ---
    TOKEN = "Наш токен"
    COUNTER_ID = "№ метрики"
    # -------------------
    
    
    def get_yesterday():
        return (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
    
    
    def main():
        url = "https://api-metrika.yandex.net/stat/v1/data"
        params = {
            "id": COUNTER_ID,
            "date1": "2021-01-01",
            "date2": get_yesterday(),
            "dimensions": "ym:s:searchPhrase",
            "metrics": "ym:s:visits",
            "accuracy": "medium",
            "limit": 100000,
        }
        headers = {"Authorization": f"OAuth {TOKEN}"}
    
        try:
            response = requests.get(url, params=params, headers=headers)
    
            if response.status_code != 200:
                print(f"❌ Ошибка API: {response.status_code}")
                print(response.text)
                return
    
            result = response.json()
    
            data = result.get("data", [])
    
            filename = f"metrika_{get_yesterday()}.csv"
            with open(filename, "w", newline="", encoding="utf-8") as f:
                writer = csv.writer(f)
                writer.writerow(["Search_phrase"])
    
                for row in data:
                    phrase = row["dimensions"][0]["name"]
    
                    # Записываем, даже если фраза None (будет пустая ячейка)
                    writer.writerow([phrase])
    
        except Exception as e:
            print(f"Критическая ошибка: {e}")
    
    
    if __name__ == "__main__":
        main()
    
    

    А теперь объясню как это работает, посмотрим внимательно на params там есть две date1 и date2. Первая - это с какой мы начинаем, а вторая на какой заканчиваем. Я сделал доп функцию которая возвращает вчерашнюю дату (практично так как сегодняшние данные еще в процессе сбора).

    Более подробно о параметрах можно найти в документации и самим потестировать различные данные - https://yandex.ru/dev/metrika/ru/stat/presets/preset_sources

    После параметров делаем запрос и передаем аргументы - response = requests.get(url, params=params, headers=headers). полученные данных преобразоываем в json, используем встроенную либу csv проходимся циклом по каждому ответу и записываем в файлик с новой строки - готово! Теперь мы можем делать с запросами что угодно.

    Кстати между делом если кому-то интересно я пишу довольно короткий (по сравнению с учебниками) курс по Python. Подробнее тут - https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/6

    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы