От идеи до работающего автопостинга: как я перешёл с PHP на Python и что из этого вышло

Python против PHP

Написано

в

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

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

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

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

Сегодня я хочу подвести итог нашей с DeepSeek работы за последние недели. Расскажу, что мы сделали, с чем столкнулись, какие ошибки уже исправили и какие ещё остались. А главное — поделюсь мыслями о том, что этот проект дал мне как разработчику.


Часть 1. Почему я вообще начал это делать

Изначально я хотел создать систему, которая будет:

  • Парсить RSS-ленты ведущих мировых AI-ресурсов.
  • Переводить новости на русский.
  • Делать рерайт, чтобы они были уникальными.
  • Публиковать на моём сайте milyutin-codes.ru.
  • Всё это без моего участия — просто работает и приносит свежий контент.

Казалось бы, логично — я использую WordPress, значит, и плагин должен быть на PHP. Я написал его, настроил, запустил. И… понеслось.

С чем я столкнулся:

  • Настройки слетали после каждого обновления.
  • YandexGPT возвращал ошибки 404 из-за устаревшего формата запросов.
  • Хостинг блокировал частые запросы к API.
  • Плагин работал внутри WordPress и конфликтовал с другими плагинами.

Я потратил неделю, исправил более 20 ошибок, но плагин всё равно оставался нестабильным. И тогда я понял главное: я не хочу быть «администратором» своего плагина. Я хочу, чтобы он просто работал.


Часть 2. Переход на Python — точка бифуркации

Когда я задал DeepSeek вопрос: «Может, реализовать автопостинг на Python, если это проще?» — он ответил: «Да, на Python будет проще». И оказался прав.

Python — это язык для автоматизации. Он не привязан к WordPress, не зависит от версий PHP и не конфликтует с плагинами. Он просто делает свою работу и завершается.

Что изменилось после перехода:

  • Скрипт работает независимо от сайта.
  • Ошибки не валят WordPress.
  • Я могу запускать его по расписанию через cron.
  • Код стал проще и понятнее.

Вывод: Иногда правильное решение — не «починить» текущую систему, а «пересесть» на другую.


Часть 3. Эволюция плагина: хронология ключевых изменений

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

За время работы мы внесли множество доработок. Вот основные этапы:

📅 4 августа 2026 — Публикация дубликатов из-за неверной проверки

Проблема: Скрипт проверял дубликаты по переведённому заголовку, который при каждом новом запуске отличался из-за вариативности перевода. Это приводило к многократной публикации одной и той же новости.

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

Решение: Переработана логика проверки дубликатов. Теперь скрипт использует оригинальный заголовок из RSS и сохраняет RSS GUID в мета-поля поста. При повторной проверке сначала идёт поиск по GUID, затем по нормализованному заголовку (очищенному от кавычек и знаков препинания).

📅 5 августа 2026 — Ошибка 401 при создании тегов и публикации

Проблема: WordPress REST API не принимал обычный пароль пользователя, возвращая 401 – rest_cannot_create.

Решение: В инструкцию добавлено требование использовать пароль приложения (Application Password), создаваемый в профиле пользователя. В коде исправлена авторизация через базовую аутентификацию.

📅 6 августа 2026 — Парсинг дат работал нестабильно

Проблема: Скрипт не мог корректно распарсить даты в формате RFC 2822, из-за чего подставлял текущее время, и старые статьи публиковались повторно.

Решение: Внедрена функция normalize_date(), использующая встроенный парсер feedparser и email.utils. Добавлено извлечение даты из HTML-мета-тегов (article:published_time).

📅 7 августа 2026 — Логика очереди публикаций

Проблема: При ручном запуске или по расписанию публиковалась только самая свежая новость, а все остальные терялись.

Решение: Внедрена система очереди. Новые записи добавляются в список pending_entries в config.json, а затем публикуются по одной при каждом запуске.

📅 8 августа 2026 — Дублирование при первом запуске

Проблема: При первом запуске скрипт добавлял в очередь все записи из RSS, включая старые, и начинал их публиковать.

Решение: Добавлена логика «первого запуска»: если last_published_date отсутствует, публикуется только самая свежая запись, а остальные игнорируются.

📅 10 августа 2026 — Ошибка 403 от Wordfence при обновлении Rank Math

Проблема: Плагин безопасности Wordfence блокировал запросы к эндпоинту /rankmath/v1/updateMeta, возвращая 403 Forbidden.

Решение: Обновление SEO-мета-полей перенесено на стандартный REST API WordPress (/wp/v2/posts/{id}) с передачей данных в поле meta. Добавлен корректный User-Agent.

📅 11 августа 2026 — Иерархические категории

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

Проблема: Все новости публиковались в одну категорию, без структурирования по темам.

Решение: Реализована иерархическая система категорий:

  • Родительская категория: «Новости ИИ» (slug: novosti-ii).
  • Дочерние подрубрики: 9 штук + «Разное» для нераспознанных новостей.
  • Автоматическое создание недостающих категорий при первом запуске.

📅 12 августа 2026 — Определение компании и перевод длинных статей

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

Проблема:

  • Названия компаний переводились на русский, терялась идентичность.
  • Статьи длиннее 2500 символов обрезались или переводились с ошибками.

Решение:

  • Добавлена функция extract_company_name(), которая отдельным запросом к YandexGPT определяет главную компанию (на английском) и использует её в SEO-полях и alt-текстах.
  • Реализована разбивка длинных текстов на части (split_text_into_chunks()), каждая часть переводится отдельно, затем результаты склеиваются.

📅 17 августа 2026 — Очистка ответов YandexGPT

Проблема: В названиях компаний появлялись лишние слова («Amazon Вопрос», «Meta Вопрос»), а иногда скрипт не мог распарсить ответ.

Решение: Ужесточены промпты для YandexGPT, добавлена очистка ответов от стоп-слов и переносов строк. Введена повторная попытка генерации заголовка и тегов с альтернативным форматом.


Часть 4. Что мы получили в итоге

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

После всех доработок плагин:

✅ Публикует новости строго по очереди, без дубликатов.

✅ Корректно определяет компании и использует их в SEO.

✅ Автоматически создаёт иерархию категорий.

✅ Переводит статьи любого объёма (разбивка на части).

✅ Обновляет SEO-поля Rank Math через стандартный REST API.

✅ Работает 24/7 на сервере как systemd-служба.

✅ Извлекает изображения из оригинальных статей и вставляет их в пост.

✅ Очищает текст от рекламы и мусора.

✅ Добавляет ссылку на источник в виде аккуратного домена.


Часть 5. Что ещё осталось исправить

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

Плагин работает, но всё ещё есть мелкие ошибки, которые я исправляю в данный момент:

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

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


Часть 6. Мои главные выводы

1. Не бойтесь менять инструменты.

Если PHP-плагин не работает — напишите на Python. Это быстрее, чем пытаться «починить» то, что сломано по своей сути.

2. Качество контента — это не только текст.

Картинки, структура, категории — всё это влияет на восприятие. ИИ может помочь с текстом, но структуру и логику контента должен продумывать человек.

3. Автоматизация не заменяет человека.

Я автоматизировал сбор, перевод и публикацию новостей. Но я всё равно проверяю их, редактирую, если нужно, и думаю о том, как улучшить систему.

4. ИИ — это инструмент, а не волшебная таблетка.

YandexGPT помогает мне писать тексты, но я отвечаю за то, как они звучат. Python помогает мне автоматизировать рутину, но я отвечаю за то, как система работает.

5. DeepSeek — идеальный напарник.

Он объясняет, подсказывает, исправляет ошибки и не даёт опустить руки. Без него я бы не справился.


Часть 7. Что дальше?

Как только я исправлю все оставшиеся мелкие ошибки, я выложу код плагина в свободный доступ на своём сайте. Чтобы любой желающий мог скачать его, настроить под себя и использовать для своего WordPress-сайта.

В ближайших планах:

  • Добавить поддержку нескольких RSS-источников одновременно.
  • Реализовать более умное распознавание ключевых сущностей.
  • Внедрить логирование в базу данных для статистики.
  • Добавить пагинацию на страницах «Блог» и «Новости ИИ».
  • Настроить RSS-ленту для новостей.

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

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

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

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

Контакты

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

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

Продолжение следует. Скоро — открытый код.

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

Комментарии

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

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