yandex_py
Python-клиент для Yandex API на базе httpx и pydantic.
Библиотека организована по продуктам и сейчас покрывает:
yandex_py.direct.reports- отчеты Yandex Directyandex_py.direct.campaigns- кампании Yandex Direct (campaigns.get)yandex_py.metrika.stat- API статистики Yandex Metrikayandex_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)
Настройки стратегий (значения уходят в запрос как есть, без параметров ключ не отправляется):
campaigns = client.campaigns.get_sync(
types=["TEXT_CAMPAIGN"],
text_campaign_field_names=["BiddingStrategy"],
text_campaign_placement_types_field_names=["SearchResults", "ProductGallery"],
)
print(campaigns[0].text_campaign.bidding_strategy.search.placement_types)
Для единых кампаний: unified_campaign_field_names и
unified_campaign_placement_types_field_names (дополнительно Maps, SearchOrganizationList).
Агентство: токен представителя агентства + 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, например:
AuthenticationErrorRequestValidationErrorRateLimitErrorNotFoundErrorServerErrorYandexTimeoutError
У исключений доступны поля product, http_status, code, request_id и raw.
Интеграционные тесты для Direct sandbox
По умолчанию интеграционные тесты отключены. Для запуска нужны:
YANDEX_DIRECT_API_TOKENYANDEX_DIRECT_CLIENT_LOGIN
Запуск тестов:
uv run pytest tests
Metadata
Release files for yandex_py 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| yandex_py-0.0.8.tar.gz | 25.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yandex_py-0.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.7 kB
Release files / yandex_py-0.0.8.tar.gz
| Download URL | yandex_py-0.0.8.tar.gz |
|---|---|
| Size | 25.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6a471be3e05bf7a81cc41cecc734274415cdfa1be6864322209d8d1f6b5d739
|
|
BLAKE2b-256 checksum How to use checksums |
39cc1dffbac20b6880040cfba7f9afbee3453260f627c585a003dbe92339b4a3
|
| 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.8-py3-none-any.whl
| Download URL | yandex_py-0.0.8-py3-none-any.whl |
|---|---|
| Size | 24.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a844dcc1c08d587e367b0e41f6d793ecc96d3b96e187ea3dcc8f8dbc7f79136
|
|
BLAKE2b-256 checksum How to use checksums |
15eb59be376dced8fee86adfb7cea693930c1bcf946d66fdfd59ff8898e0e901
|
| 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.8
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.