Files
yandex-api/README.md
T
2026-07-05 18:35:41 +05:00

7.6 KiB

Yandex API — локальные прокси-сервисы

API-ключ для работы в AI Studio AQVN0kCCdlt598SE87sP52uZYaG2tNP0OajDoC7B

Идентификатор API-ключа ajei8217cmrpuv289str

Два сервиса для работы с Яндекс.Директ API v5 и Яндекс.Вордстат (Yandex Cloud Search API v2), запущенные на 192.168.1.152 (nik).

Сервисы

Сервис Порт Назначение
Yandex Direct API 8456 Управление кампаниями, группами, объявлениями, ключевыми словами
Wordstat API 8457 Сбор частотности, топ-запросы, динамика, география

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

Подключение с другого компьютера в сети

С других машин локальной сети (192.168.1.x) сервисы доступны напрямую по HTTP:

# Проверка доступности
curl http://192.168.1.152:8456/
curl http://192.168.1.152:8457/health

# Простой запрос — без ключей (статус)
curl http://192.168.1.152:8456/
curl http://192.168.1.152:8457/health

Примечание: для запросов к реальному API (не /health) сервисы используют токены, захардкоженные в config.py на сервере. Ключи не нужно передавать в запросах.

Создание кампаний (Direct API)

# Получить статус сервера
curl http://192.168.1.152:8456/

# Список кампаний
curl http://192.168.1.152:8456/campaigns

# Создать кампанию
curl -X POST http://192.168.1.152:8456/campaigns \
  -H "Content-Type: application/json" \
  -d '{"name":"Моя кампания","daily_budget_rub":500,"strategy":"HIGHEST_POSITION"}'

# Создать группу объявлений
curl -X POST http://192.168.1.152:8456/adgroups \
  -H "Content-Type: application/json" \
  -d '{"name":"Группа 1","campaign_id":709606618,"region_ids":[225]}'

# Создать объявление
curl -X POST http://192.168.1.152:8456/ads \
  -H "Content-Type: application/json" \
  -d '{"adgroup_id":5747798281,"title":"Заголовок до 56 символов","text":"Текст объявления","href":"https://example.com"}'

# Добавить ключевые фразы
curl -X POST http://192.168.1.152:8456/keywords \
  -H "Content-Type: application/json" \
  -d '{"adgroup_id":5747798281,"keywords":[{"keyword":"купить слона","bid_rub":50}]}'

# Управляемые аккаунты (client_login)
curl http://192.168.1.152:8456/campaigns?client_login=casamebelads

# Регионы (с кириллицей — URL-кодировать!)
curl -s -G 'http://192.168.1.152:8456/dictionaries/regions' --data-urlencode 'search=Иглино'

Сбор частотности (Wordstat API)

# Получить частотность запроса
curl -X POST http://192.168.1.152:8457/top \
  -H "Content-Type: application/json" \
  -d '{"phrase":"деревянные дома"}'

# Получить динамику по времени
curl -X POST http://192.168.1.152:8457/dynamics \
  -H "Content-Type: application/json" \
  -d '{"phrase":"купить деревянный дом"}'

# Распределение по регионам
curl -X POST http://192.168.1.152:8457/regions \
  -H "Content-Type: application/json" \
  -d '{"phrase":"деревянные дома"}'

# Справочник регионов (бесплатно, без квоты)
curl http://192.168.1.152:8457/regions/tree

# Статус API-ключа
curl http://192.168.1.152:8457/oauth/status

# Сохранённые ключевые слова
curl http://192.168.1.152:8457/keywords

API-ключи и авторизация

Сервисы работают как локальный прокси — ключи хранятся на сервере 192.168.1.152:

Яндекс.Директ API (порт 8456)

  • OAuth-токен: захардкожен в config.py на сервере
  • Режим: production
  • Для переключения на управляемые аккаунты — параметр client_login

Wordstat API (порт 8457)

  • Yandex Cloud API Key: хранится в /home/neo/workspace/wordstat-api/.env
  • Folder ID: b1g666nmgcdb1j6e551t
  • Получить ключ: https://aistudio.yandex.ru/

Изменение API-ключей

Если нужно сменить ключи, подключись к nik@192.168.1.152 по SSH и отредактируй конфиги:

# SSH на сервер
ssh nik@192.168.1.152

# Яндекс.Директ API — токен в config.py
nano /home/neo/workspace/yandex-direct-api/config.py

# Wordstat API — ключ в .env
nano /home/neo/workspace/wordstat-api/.env

# Перезапуск сервисов
systemctl --user restart yandex-direct-api
systemctl --user restart wordstat-api

Удалённое подключение

С любого компьютера в сети 192.168.1.x:

import requests

# Яндекс.Директ
resp = requests.get("http://192.168.1.152:8456/")
print(resp.json())  # {"ok": true, "mode": "production", ...}

# Wordstat
resp = requests.get("http://192.168.1.152:8457/health")
print(resp.json())  # {"status": "ok", "api_key_set": true, ...}

Порты и фаервол

Порты 8456 и 8457 должны быть доступны в локальной сети. Проверить:

# На сервере nik
ss -tlnp | grep -E '845[67]'

# Если порты не слушаются — проверить systemd сервисы
systemctl --user status yandex-direct-api wordstat-api

Если фаервол (UFW/firewalld) блокирует — разрешить:

sudo ufw allow from 192.168.1.0/24 to any port 8456
sudo ufw allow from 192.168.1.0/24 to any port 8457

Ограничения и известное

  • Wordstat квота: 100 запросов/час, 10/сек. Легко сжечь за минуту.
  • Wordstat status: Preview — API может измениться.
  • Директ: бюджет кампании минимум 300₽.
  • Директ API: стратегия сетей MAXIMUM_COVERAGE не работает, использовать SERVING_OFF.
  • Директ API: поле DailyBudget: null после создания — кампания может работать без лимита.
  • Директ API: ads/get — допустимы ТОЛЬКО: AdCategories, AgeLabel, AdGroupId, CampaignId, Id, State, Status, StatusClarification, Type, Subtype. TextAd, MobileAppAd и т.д. НЕЛЬЗЯ.
  • Директ API: GeoRegion children часто пустые. Использовать client.get_regions(search=...) вместо get_dictionaries.
  • Директ API: активация кампании из DRAFT → ENABLED может требовать update_campaigns (множественное число) или веб-интерфейс.

Ссылки