Как я перешёл с PHP на Python для автопостинга: первые шаги и текущие ошибки

Python

Написано

в

Привет, друг!

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

Я устал. Не физически, а морально. Каждый день я думал: «Ну сколько можно?» И в какой-то момент я понял, что не обязан биться головой об одну и ту же стену. Можно попробовать другой путь.

И я попробовал. Я перешёл на Python.

Python
Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru

Сегодня я расскажу, как мы с 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
Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru

Самый важный этап — отправка текста в YandexGPT. Мы использовали актуальный эндпоинт:

text

https://llm.api.cloud.yandex.net/foundationModels/v1/completion

Формат запроса — messages с ролями system и user. Ключевой момент: в поле messages нужно использовать ключ text, а не content (я долго ловил эту ошибку 400). После исправления всё полетело.

Промпт для YandexGPT просит перевести текст на русский, сделать его уникальным, предложить новый заголовок и 5 тегов. Ответ парсится по маркерам ЗАГОЛОВОК:ТЕГИ:ТЕКСТ:. Всё просто и надёжно.

4. Сохранение структуры — изображения на своих местах

Одна из главных проблем была — как вставить изображения в те же позиции, где они были в оригинале. Мы решили это так:

  1. Извлекаем структурированный контент через article.clean_top_node.
  2. Проходим по нему, собирая последовательность текстовых блоков и изображений.
  3. Переведённый текст разбиваем на абзацы пропорционально количеству оригинальных текстовых блоков.
  4. Собираем финальный HTML, чередуя абзацы и изображения в нужном порядке.

Это даёт почти идеальное совпадение с оригиналом. И да, первое изображение становится миниатюрой поста (featured image) с правильным ALT-текстом.

5. SEO для Rank Math — автоматически

Rank Math
Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru

Раньше я заполнял 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,
  • работает по расписанию.

Но идеально пока не всё. Есть ошибки, которые я исправляю.


Какие ошибки мы сейчас исправляем

  1. Проблемы с NLTK на сервере — пришлось вручную скачивать punkt_tab и указывать путь к данным.
  2. Иногда YandexGPT возвращает 400 — если промпт слишком длинный или формат нарушен. Добавил обрезку текста до 3000 символов и логирование ответа.
  3. Изображения не всегда загружаются — если URL картинки битый или сайт блокирует запросы. Пока просто пропускаем, но планирую добавить повторные попытки.
  4. SEO-поля Rank Math обновляются не всегда — иногда API возвращает 404, если пост только что создан. Добавил задержку перед обновлением мета-полей.
  5. На тестовом домене иногда слетают настройки — потому что я часто перезапускаю скрипт и меняю конфиг. Это не критично, но нужно будет исправить.

Но я не отчаиваюсь. Каждая ошибка — это урок. И я исправляю их одну за другой.


Что дальше?

Я продолжу тестировать скрипт на тестовом домене, пока не уберу все ошибки. Планирую:

  • Улучшить обработку изображений (добавить повторные попытки загрузки).
  • Настроить более гибкое расписание (можно будет выбирать интервал).
  • Добавить поддержку нескольких RSS-лент с разными категориями.
  • Оптимизировать запросы к YandexGPT, чтобы экономить токены.

А когда скрипт будет стабилен — перенесу его на боевой сайт и запущу в полноценную работу.


Что я понял за эти дни

  1. Не бойся пробовать новое. Если что-то не идёт — попробуй другой путь. Это не поражение, это стратегия.
  2. Python — это не замена PHP, а дополнение. У каждого инструмента своя ниша. Для внешней автоматизации Python — лучший выбор.
  3. DeepSeek — не просто помощник, а наставник. Он объясняет, подсказывает, исправляет ошибки и не даёт опустить руки.
  4. Графический интерфейс — это круто. Даже если ты не программист, приложение с GUI делает настройку и запуск интуитивно понятными.
  5. Этот путь — долгий. И в нём есть место для обходных путей, экспериментов и пауз. Главное — не останавливаться.

Призыв к действию

Друг, если ты тоже разработчик-самоучка и иногда чувствуешь, что застрял — вспомни мою историю. Иногда правильнее не биться головой о стену, а найти обходной путь. Взять паузу. Сделать шаг назад, чтобы потом прыгнуть дальше.

Подписывайся на мой блог, чтобы не пропустить следующую главу. Я расскажу, как настраивал скрипт на VPS и решал последние проблемы с хостингом.


Контакты

📧 Email: milyutinkv@gmail.com
🌐 Сайт: milyutin-codes.ru
💬 Группа ВК: vk.ru/milyutin_codes

Задавай вопросы, делись идеями, пиши свои истории. Мы вместе.

Продолжение следует. Следите за обновлениями.

YandexGPT
Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru

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

Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *