Skip to main content

yandex_py

Pypi — Github

Python-клиент для Yandex API на базе httpx и pydantic.

Библиотека организована по продуктам и сейчас покрывает:

  • yandex_py.direct.reports - отчеты Yandex Direct
  • yandex_py.direct.campaigns - кампании Yandex Direct (campaigns.get)
  • yandex_py.metrika.stat - API статистики Yandex Metrika
  • yandex_py.metrika.management - API управления счетчиками и целями Yandex Metrika

Поддерживаются синхронные и асинхронные вызовы, таймауты, единый transport и типизированные модели запросов и ответов.

Установка

pip install yandex_py

Требуется Python >=3.10.

Быстрый старт

Yandex Direct

Асинхронный запрос отчета:

from yandex_py.direct import DirectClient
from yandex_py.direct.reports.types import (
    DateRangeType,
    FieldName,
    Page,
    ReportDefinition,
    ReportRequest,
    ReportType,
    SelectionCriteria,
)

request = ReportRequest(
    params=ReportDefinition(
        selection_criteria=SelectionCriteria(),
        field_names=[FieldName.Date, FieldName.Clicks, FieldName.Cost],
        report_name="weekly-performance",
        report_type=ReportType.CUSTOM_REPORT,
        date_range_type=DateRangeType.LAST_7_DAYS,
        page=Page(limit=1000),
    )
)

async with DirectClient(
    token="your_token",
    client_login="your_client_login",
) as client:
    rows = await client.reports.fetch(request)

for row in rows:
    print(row[FieldName.Date], row[FieldName.Clicks], row[FieldName.Cost])

Синхронный вариант использует client.reports.fetch_sync(request).

Yandex Direct: кампании

from yandex_py.direct import DirectClient

with DirectClient(token="your_token", client_login="your_client_login") as client:
    campaigns = client.campaigns.get_sync(states=["ON", "SUSPENDED"])

for campaign in campaigns:
    print(campaign.id, campaign.name, campaign.state, campaign.daily_budget)

Агентство: токен представителя агентства + client_login клиента-рекламодателя; use_operator_units=True тратит баллы агентства. client_login можно не указывать (например, для сервиса AgencyClients).

Пагинация по LimitedBy выполняется автоматически. Ошибки в теле ответа с HTTP 200 ({"error": {...}}) тоже поднимаются как исключения (например, код 53 - AuthenticationError, 152 - RateLimitError). get_page_sync(...).units - баллы из заголовка Units (spent, remaining, limit). Асинхронный вариант: await client.campaigns.get(...).

Yandex Metrika Stat API

Синхронный запрос табличной статистики:

from datetime import date

from yandex_py.metrika import MetrikaClient
from yandex_py.metrika.stat.types import TableQuery

with MetrikaClient(token="your_token") as client:
    response = client.stat.table_sync(
        TableQuery(
            ids=[12345678],
            metrics=["ym:s:visits", "ym:s:users"],
            dimensions=["ym:s:trafficSource"],
            date1=date(2024, 1, 1),
            date2=date(2024, 1, 31),
            limit=100,
        )
    )

for row in response.data:
    print(row.dimensions[0].name, row.metrics)

Асинхронные методы:

  • await client.stat.table(query)
  • await client.stat.by_time(query)

Yandex Metrika Management API

Получение целей счетчика:

from yandex_py.metrika import MetrikaClient

with MetrikaClient(token="your_token") as client:
    goals = client.management.get_goals_by_counter_sync(12345678)

for goal in goals:
    print(goal.id, goal.name, goal.type, goal.status)

Асинхронный вариант использует await client.management.get_goals_by_counter(counter_id).

Структура API

from yandex_py.direct import DirectClient
from yandex_py.metrika import MetrikaClient

DirectClient:

  • reports.fetch_sync(...)
  • reports.fetch(...)
  • campaigns.get_sync(...)
  • campaigns.get(...)
  • campaigns.get_page_sync(...)
  • campaigns.get_page(...)

MetrikaClient:

  • stat.table_sync(...)
  • stat.table(...)
  • stat.by_time_sync(...)
  • stat.by_time(...)
  • management.get_goals_by_counter_sync(...)
  • management.get_goals_by_counter(...)

Обработка ошибок

Библиотека поднимает единые исключения из yandex_py.core.errors, например:

  • AuthenticationError
  • RequestValidationError
  • RateLimitError
  • NotFoundError
  • ServerError
  • YandexTimeoutError

У исключений доступны поля product, http_status, code, request_id и raw.

Интеграционные тесты для Direct sandbox

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

  • YANDEX_DIRECT_API_TOKEN
  • YANDEX_DIRECT_CLIENT_LOGIN

Запуск тестов:

uv run pytest tests

Metadata

Release files for yandex_py 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yandex_py 0.0.7
File Size Uploaded Provenance
yandex_py-0.0.7.tar.gz 23.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for yandex_py 0.0.7
File Interpreter ABI Platform
yandex_py-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 47.3 kB

Release files / yandex_py-0.0.7.tar.gz

Download URL yandex_py-0.0.7.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a6436bbc2a5f6cca818d3e682e05431bf7916fcdd65438385a533d2fc0c4404d
BLAKE2b-256 checksum
How to use checksums
3728f0788709f0efddf81fac1a89cc31ec62807975a69a8709159cd926a855e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / yandex_py-0.0.7-py3-none-any.whl

Download URL yandex_py-0.0.7-py3-none-any.whl
Size 23.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9936652c06944ce64521f69c7c39c1d672b06e05067b589c3f03ca36f042b76d
BLAKE2b-256 checksum
How to use checksums
0dead4ff51669afceb1a299ac5249b3dc5f42b2576c605d806a6d0ffc31ff6dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for yandex_py 0.0.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page