<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Yandex metrika api - Сбор поисковых запросов]]></title><description><![CDATA[<p dir="auto">На днях встала задача как вытащить все поисковые запросы из метрики по сайту, начал думать… В принципе можно скачать эксельник в отчетах метрики, но она либо не даст сделать сразу за большой период либо начнет тормозить то еще чего - одним словом Яндекс))</p>
<p dir="auto">Вообщем решил покопаться в API яши и о чудо это можно легко реализовать при помощи кода. Так как с недавнего времени я постепенно начинаю плотно работать с языком Python решил написать скрипт на нем.</p>
<p dir="auto">И так что нам понадобится создать само приложение в яндекс - <a href="https://oauth.yandex.ru/client/new" target="_blank" rel="noopener noreferrer">https://oauth.yandex.ru/client/new</a><br />
А в запрашиваемых данных выбрать Яндекс.Метрика - получение статистики.<br />
<img src="/assets/uploads/files/92/b7/c5/1771425951021-%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2026-02-18-%D0%B2-17.45.41.webp" alt="Снимок экрана 2026-02-18 в 17.45.41.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">После нам требуется получить токен, его можно получить программно, но проще взять его по url так как они выдаются и действую почти год или даже больше. Для этого берем из нашего приложения где мы создали выше <code>ClientId</code>, и подставляем в ссылку:<br />
<code>https://oauth.yandex.ru/authorize?response_type=token&amp;client_id=ВАШ_CLIENT_ID</code><br />
После даем разрешение, видим токен и копируем его.</p>
<p dir="auto">Теперь перейдем к самому коду:</p>
<pre><code>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()

</code></pre>
<p dir="auto">А теперь объясню как это работает, посмотрим внимательно на <code>params</code> там есть две <code>date1</code> и <code>date2</code>. Первая - это с какой мы начинаем, а вторая на какой заканчиваем. Я сделал доп функцию которая возвращает вчерашнюю дату (практично так как сегодняшние данные еще в процессе сбора).</p>
<p dir="auto">Более подробно о параметрах можно найти в документации и самим потестировать различные данные - <a href="https://yandex.ru/dev/metrika/ru/stat/presets/preset_sources" target="_blank" rel="noopener noreferrer">https://yandex.ru/dev/metrika/ru/stat/presets/preset_sources</a></p>
<p dir="auto">После параметров делаем запрос и передаем аргументы - <code>response = requests.get(url, params=params, headers=headers)</code>. полученные данных преобразоываем в json, используем встроенную либу <code>csv</code> проходимся циклом по каждому ответу и записываем в файлик с новой строки - готово! Теперь мы можем делать с запросами что угодно.</p>
<blockquote>
<p dir="auto">Кстати между делом если кому-то интересно я пишу довольно короткий (по сравнению с учебниками) курс по Python. Подробнее тут - <a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/6" target="_blank" rel="noopener noreferrer">https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/6</a></p>
</blockquote>
]]></description><link>https://forum.exlends.ru/topic/554/yandex-metrika-api-sbor-poiskovyh-zaprosov</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 09:13:46 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/554.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Feb 2026 14:56:31 GMT</pubDate><ttl>60</ttl></channel></rss>