yandex_py
Python-клиент для Yandex API на базе httpx и pydantic.
Библиотека организована по продуктам и сейчас покрывает:
yandex_py.direct.reports- отчеты Yandex Directyandex_py.direct.campaigns- кампании Yandex Direct (campaigns.get)yandex_py.direct.ad_groups- группы объявлений Yandex Direct (ad_groups.get)yandex_py.direct.keywords- ключевые фразы Yandex Direct (keywords.get)yandex_py.direct.feeds- фиды Yandex Direct (feeds.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(...)ad_groups.get_sync(...)ad_groups.get(...)ad_groups.get_page_sync(...)ad_groups.get_page(...)keywords.get_sync(...)keywords.get(...)keywords.get_page_sync(...)keywords.get_page(...)feeds.get_sync(...)feeds.get(...)feeds.get_page_sync(...)feeds.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.11
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.11.tar.gz | 35.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yandex_py-0.0.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.7 kB
Release files / yandex_py-0.0.11.tar.gz
| Download URL | yandex_py-0.0.11.tar.gz |
|---|---|
| Size | 35.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7b0339cfde6c9502944b6f7303fbd3aa0e7296c0c08e3bb8246e8e8201a2bd3d
|
|
BLAKE2b-256 checksum How to use checksums |
58c75133bd6b1c7ef11c3ac192cac126b657965983a64e0761d4e94295a3a257
|
| 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.11-py3-none-any.whl
| Download URL | yandex_py-0.0.11-py3-none-any.whl |
|---|---|
| Size | 37.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef9690f9ee2971201c14bcc9df24ee8d3647559e340b09980b064a7411e54437
|
|
BLAKE2b-256 checksum How to use checksums |
d396c3ead483a3bfd8dafdbb3cfe59d9674c0023d65cdcc33fe154eeaee93535
|
| 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.11
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.