Привет, друг!
Меня зовут Константин Милютин. Если ты читал мои предыдущие посты, то знаешь: я больше недели пытался довести до ума PHP-плагин для автопостинга новостей. Исправил 20+ ошибок, научил его работать с YandexGPT, генерировать картинки и заполнять SEO. Но плагин всё равно был капризным — то настройки слетали, то API возвращал 404, то хостинг блокировал соединения.
Я устал. Не физически, а морально. Каждый день я думал: «Ну сколько можно?» И в какой-то момент я понял, что не обязан биться головой об одну и ту же стену. Можно попробовать другой путь.
И я попробовал. Я перешёл на Python.

Сегодня я расскажу, как мы с DeepSeek за несколько дней создали полноценный Python-скрипт с графическим интерфейсом, который автоматически парсит RSS, переводит новости, публикует их в WordPress и заполняет SEO. Пока он работает на тестовом домене и не идеален — но прогресс есть, и я хочу поделиться этим опытом.
Если ты пропустил предыдущую часть, вот ссылка: Шестой день с DeepSeek: не забрасываю плагин — просто беру паузу, чтобы ускорить наполнение сайта. А сейчас — свежий отчёт о том, что мы сделали, с чем столкнулись и куда движемся дальше.
Почему Python, а не PHP?
Я не профессиональный PHP-разработчик. Я — самоучка, который учится на ходу. PHP-плагин требовал глубокого погружения в экосистему WordPress: хуки, фильтры, WP-Cron, правила безопасности. Каждая правка отнимала часы. А Python — это независимая программа. Она просто общается с WordPress через REST API и делает только то, что я ей скажу. Никаких ограничений ядра, никаких неожиданных сбоев из-за плагинов.
DeepSeek сразу сказал: «Да, на Python будет проще». И оказался прав.
Что мы сделали за это время
1. Графический интерфейс — для тех, кто не любит консоль
Я хотел, чтобы скриптом мог пользоваться даже человек, который никогда не видел командной строки. Поэтому мы создали GUI на tkinter. Три вкладки:
- Настройки — поля для API-ключа Yandex, Folder ID, URL сайта, логина, пароля приложения, RSS-лент, SMTP и словаря категорий. Всё сохраняется в
config.json. - Управление — кнопки «Запустить сейчас» (обрабатывает только одну новость), «Запустить по расписанию» (каждый час) и «Остановить». Там же — окно с логами в реальном времени.
- Статистика — общее количество опубликованных новостей и последние 5 постов.
Создать такой интерфейс с DeepSeek было просто: он предложил структуру окон, поля и привязку к сохранению настроек.
2. Парсинг RSS и статей — без headaches
Для RSS мы использовали feedparser. Он отлично парсит любые ленты — даже те, где кривая структура. А для извлечения полного текста и изображений из оригинальной статьи — newspaper3k. Эта библиотека умеет скачивать страницу, находить основной контент, удалять рекламу и собирать все изображения.
Правда, пришлось повозиться с зависимостями: на Windows newspaper3k требует lxml_html_clean и ресурсы NLTK (punkt_tab). DeepSeek подсказал, как это установить, и через пару команд всё заработало.
3. Интеграция с YandexGPT — перевод и рерайт

Самый важный этап — отправка текста в YandexGPT. Мы использовали актуальный эндпоинт:
text
https://llm.api.cloud.yandex.net/foundationModels/v1/completion
Формат запроса — messages с ролями system и user. Ключевой момент: в поле messages нужно использовать ключ text, а не content (я долго ловил эту ошибку 400). После исправления всё полетело.
Промпт для YandexGPT просит перевести текст на русский, сделать его уникальным, предложить новый заголовок и 5 тегов. Ответ парсится по маркерам ЗАГОЛОВОК:, ТЕГИ:, ТЕКСТ:. Всё просто и надёжно.
4. Сохранение структуры — изображения на своих местах
Одна из главных проблем была — как вставить изображения в те же позиции, где они были в оригинале. Мы решили это так:
- Извлекаем структурированный контент через
article.clean_top_node. - Проходим по нему, собирая последовательность текстовых блоков и изображений.
- Переведённый текст разбиваем на абзацы пропорционально количеству оригинальных текстовых блоков.
- Собираем финальный HTML, чередуя абзацы и изображения в нужном порядке.
Это даёт почти идеальное совпадение с оригиналом. И да, первое изображение становится миниатюрой поста (featured image) с правильным ALT-текстом.
5. SEO для Rank Math — автоматически

Раньше я заполнял SEO вручную. Теперь всё автоматически:
- Фокусный ключевик выделяется через YandexGPT (или извлекается из заголовка).
- Мета-описание генерируется отдельным запросом к YandexGPT.
- Формируется SEO-заголовок вида
{focus_keyword} - {post_title}. - Дополнительные ключевики (до 4) добавляются через запятую.
Все эти данные обновляются через REST API Rank Math (/wp-json/rankmath/v1/updateMeta). После публикации поста достаточно одного запроса — и все поля Rank Math заполнены.
6. Проверка дубликатов — чтобы не было повторов
Чтобы не публиковать одну и ту же новость дважды, мы реализовали умную проверку:
- Нормализуем заголовок (убираем кавычки, лишние пробелы, пунктуацию, приводим к нижнему регистру).
- Ищем посты с таким же нормализованным заголовком через REST API.
- Если находим — пропускаем публикацию.
Это работает даже если в RSS заголовок немного отличается от сохранённого в WordPress. Теперь дубликатов нет.
7. Ссылка на источник — только домен
Вместо громоздкого URL мы показываем только домен (без www.). Это делает ссылку аккуратной и читаемой.
8. Расписание — каждый час
Скрипт можно запускать по расписанию через schedule. Каждый час он проверяет RSS-ленту, берёт самую свежую новость и публикует её (если она ещё не опубликована). Если новостей нет — просто ждёт следующего часа.
Что мы получили на данный момент
На тестовом домене скрипт уже работает. Он:
- парсит RSS,
- извлекает полный текст и изображения,
- переводит и рерайтит через YandexGPT,
- сохраняет структуру абзацев и позиции изображений,
- публикует посты в WordPress,
- заполняет SEO-поля Rank Math,
- устанавливает миниатюру с ALT-текстом,
- проверяет дубликаты,
- отправляет дайджест на email,
- работает по расписанию.
Но идеально пока не всё. Есть ошибки, которые я исправляю.
Какие ошибки мы сейчас исправляем
- Проблемы с NLTK на сервере — пришлось вручную скачивать
punkt_tabи указывать путь к данным. - Иногда YandexGPT возвращает 400 — если промпт слишком длинный или формат нарушен. Добавил обрезку текста до 3000 символов и логирование ответа.
- Изображения не всегда загружаются — если URL картинки битый или сайт блокирует запросы. Пока просто пропускаем, но планирую добавить повторные попытки.
- SEO-поля Rank Math обновляются не всегда — иногда API возвращает 404, если пост только что создан. Добавил задержку перед обновлением мета-полей.
- На тестовом домене иногда слетают настройки — потому что я часто перезапускаю скрипт и меняю конфиг. Это не критично, но нужно будет исправить.
Но я не отчаиваюсь. Каждая ошибка — это урок. И я исправляю их одну за другой.
Что дальше?
Я продолжу тестировать скрипт на тестовом домене, пока не уберу все ошибки. Планирую:
- Улучшить обработку изображений (добавить повторные попытки загрузки).
- Настроить более гибкое расписание (можно будет выбирать интервал).
- Добавить поддержку нескольких RSS-лент с разными категориями.
- Оптимизировать запросы к YandexGPT, чтобы экономить токены.
А когда скрипт будет стабилен — перенесу его на боевой сайт и запущу в полноценную работу.
Что я понял за эти дни
- Не бойся пробовать новое. Если что-то не идёт — попробуй другой путь. Это не поражение, это стратегия.
- Python — это не замена PHP, а дополнение. У каждого инструмента своя ниша. Для внешней автоматизации Python — лучший выбор.
- DeepSeek — не просто помощник, а наставник. Он объясняет, подсказывает, исправляет ошибки и не даёт опустить руки.
- Графический интерфейс — это круто. Даже если ты не программист, приложение с GUI делает настройку и запуск интуитивно понятными.
- Этот путь — долгий. И в нём есть место для обходных путей, экспериментов и пауз. Главное — не останавливаться.
Призыв к действию
Друг, если ты тоже разработчик-самоучка и иногда чувствуешь, что застрял — вспомни мою историю. Иногда правильнее не биться головой о стену, а найти обходной путь. Взять паузу. Сделать шаг назад, чтобы потом прыгнуть дальше.
Подписывайся на мой блог, чтобы не пропустить следующую главу. Я расскажу, как настраивал скрипт на VPS и решал последние проблемы с хостингом.
Контакты
📧 Email: milyutinkv@gmail.com
🌐 Сайт: milyutin-codes.ru
💬 Группа ВК: vk.ru/milyutin_codes
Задавай вопросы, делись идеями, пиши свои истории. Мы вместе.
Продолжение следует. Следите за обновлениями.

Константин Милютин
Автор блога «Милютин Код»

Добавить комментарий