Метка: Автоматизация

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

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

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

    Меня зовут Константин Милютин. Если ты читал мои предыдущие посты, ты знаешь: я больше месяца пытался довести до ума 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

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

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

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

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

    Как я перешёл с PHP на 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

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

  • Шестой день с DeepSeek: не забрасываю плагин — просто беру паузу, чтобы ускорить наполнение сайта

    Шестой день с DeepSeek: не забрасываю плагин — просто беру паузу, чтобы ускорить наполнение сайта

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

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

    Я честно признаюсь: PHP-плагин оказался сложнее, чем я думал. Мы уже пять дней боремся с багами, настройками, ошибками API и ограничениями хостинга. И хотя мы исправили больше 20 проблем, плагин всё ещё не работает идеально.

    Но я не сдаюсь. И не забрасываю плагин на PHP.

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

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


    Утро шестого дня: вопрос, который перевернул всё

    Я сидел и думал: «Плагин на PHP почти готов, но возни с ним ещё много. Может, есть способ быстрее начать публиковать новости?»

    Я открыл чат с DeepSeek и задал вопрос, который давно вертелся в голове:

    «Плагин на PHP не получается довести до ума, точнее я хочу довести до ума его, но много занимает времени. Может, реализовать автопостинг новостей по принципу как в плагине, но только через Python, если это проще?»

    DeepSeek ответил неожиданно честно: «Да, реализовать автопостинг на Python действительно проще». И объяснил почему.


    Почему Python проще, чем PHP-плагин?

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

    DeepSeek сравнил две задачи:

    PHP-плагинPython-скрипт
    Глубокое погружение в экосистему WordPressНезависимая программа
    Требует знания хуков, фильтров, WP-CronПросто общается с WordPress через REST API
    Код работает внутри системы — много ограниченийДелает только то, что вы ему скажете
    Сложно отлаживатьЛегко тестировать и изменять по частям

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


    Что может делать Python-скрипт для автопостинга?

    DeepSeek перечислил ключевые возможности:

    • Парсить RSS и получать новости.
    • Переводить контент с английского на русский (через YandexGPT).
    • Обрабатывать текст (рерайт, генерация заголовка, тегов).
    • Генерировать изображения через YandexART.
    • Публиковать посты через WordPress REST API.
    • Работать по расписанию через cron на сервере.

    И самое главное — всё это можно сделать в виде независимого скрипта, который не зависит от архитектуры WordPress.


    Архитектура Python-решения

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

    DeepSeek предложил создать не один монолитный скрипт, а несколько независимых компонентов:

    1. Скрипт-планировщик — запускается по cron каждый час.
    2. Парсер — подключается к RSS-лентам и забирает новости.
    3. Генератор — отправляет текст в YandexGPT и получает обработанный контент.
    4. Публикатор — через WordPress REST API создаёт посты, назначает рубрики, теги и обложки.

    Такой подход гораздо более модульный. Если что-то сломается (например, изменится API Яндекса), я легко найду и исправлю проблему.


    Что я решил сделать

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

    Я не отказываюсь от PHP-плагина. Он останется как долгосрочное решение — полноценный инструмент, который будет жить внутри WordPress.

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

    1. Создать Python-скрипт для автопостинга.
    2. Настроить его на работу с бесплатными RSS-источниками (Google News, The Verge, VentureBeat).
    3. Запустить его на VPS (выбрал Beget) по расписанию.
    4. Использовать его как временное решение, пока PHP-плагин не будет готов.

    Это даст мне:

    • Свежие новости на сайте каждый день.
    • Возможность тестировать разные форматы контента.
    • Понимание того, как работает автопостинг «снаружи» WordPress.
    • Опыт работы с Python, который пригодится в будущем.

    Какой продукт я купил на Beget

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

    Для запуска Python-скрипта мне нужен был не обычный хостинг, а VPS. На обычном хостинге:

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

    Я выбрал VPS на Beget с такой конфигурацией:

    • ОС: Ubuntu 22.04 LTS
    • Процессор: 2 ядра
    • Оперативная память: 4 ГБ
    • Диск: 40 ГБ NVMe

    Это стоит примерно 390–510 ₽ в месяц (плюс 150 ₽ за IPv4-адрес). Вполне приемлемо для стабильной работы скрипта.


    Что дальше?

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

    Я уже подготовил подробный промпт для DeepSeek, который поможет мне создать Python-скрипт с графическим интерфейсом. В нём будут:

    • Удобные поля для ввода настроек (API-ключи, RSS-ссылки, email).
    • Кнопки «Запустить сейчас» и «Запустить по расписанию».
    • Поле для вывода логов в реальном времени.
    • Сохранение настроек в файл config.json.

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

    А PHP-плагин я продолжу дорабатывать в фоновом режиме. Он станет моим «взрослым» решением, когда я буду полностью уверен в его стабильности.


    Что я понял за шесть дней

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

    Итог: я не забрасываю плагин — я беру паузу

    Плагин на PHP остаётся в разработке. Я вернусь к нему, когда у меня будет больше времени и сил. А пока я запускаю Python-скрипт, который будет автоматически наполнять сайт новостями.

    Это не отказ от мечты. Это стратегический манёвр.


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

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


    Контакты

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

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

    Продолжение следует. Теперь — с Python.

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

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

  • Третий день с DeepSeek: как мы победили 13 ошибок и приблизились к идеалу

    Третий день с DeepSeek: как мы победили 13 ошибок и приблизились к идеалу

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

    Меня зовут Константин Милютин. Если ты следишь за моим блогом, то знаешь: мы с DeepSeek уже второй день боремся с плагином «Autonews Publisher». Первый день мы создавали архитектуру, второй — ловили баги с сохранением настроек и ошибкой 404. А сегодня… сегодня мы разобрали 13 ошибок! Тринадцать! И каждая из них была маленьким кирпичиком в стене, которую мы упорно разбирали, чтобы построить работающий инструмент.

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

    Если ты не читал предыдущие части, вот ссылка: Второй день с DeepSeek. А сейчас — погнали!


    Утро третьего дня: список задач

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

    Я открыл чат с DeepSeek и сказал: «Сегодня мы проделали большую работу по исправлению ошибок. Давай систематизируем их для отчёта». И мы начали перебирать каждую проблему, которую обнаружили за предыдущие дни. Их оказалось 13. Тринадцать! Некоторые — крошечные, как лишние звёздочки в тексте, другие — серьёзные, как дублирование постов или неработающий Rank Math.

    Но вместо паники я почувствовал азарт. Каждая ошибка — это вызов, а с DeepSeek любой вызов превращается в увлекательное расследование. Мы взяли список и пошли по пунктам.


    1. Настройки слетали — галки не сохранялись

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

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

    Решение. DeepSeek предложил переписать sanitize_settings() так, чтобы он сохранял ВСЕ поля, даже те, которые не были переданы в запросе. Для чекбоксов, если галка отсутствует, мы явно ставим 0. Для остальных — берём старые значения или дефолтные.

    php

    foreach ( self::$fields as $key => $field ) {
        if ( array_key_exists( $key, $input ) ) {
            $value = $input[ $key ];
        } else {
            if ( $field['type'] === 'checkbox' ) {
                $value = 0; // отсутствие галки = 0
            } else {
                $value = isset( $old[ $key ] ) ? $old[ $key ] : $field['default'];
            }
        }
        // валидация и сохранение
    }

    Теперь настройки сохраняются все и сразу. Магия!


    2. RSS-источники не добавлялись / исчезали

    Проблема. Я добавлял RSS-ленту через кастомную форму, но после сохранения других вкладок список обнулялся. Виновник — стандартная кнопка «Сохранить» на вкладке RSS, которая отправляла пустой массив.

    Решение. Мы убрали стандартную кнопку на вкладке RSS и оставили только кастомное управление. Теперь добавление и удаление происходит напрямую через update_option(), без лишних сохранений.

    php

    if ( $active_tab === 'rss' ) {
        $this->render_rss_tab(); // без стандартной формы
    }

    И вот, RSS-источники стали жить своей жизнью — стабильной и предсказуемой.


    3. Ошибка 404 при запросе к YandexGPT

    Проблема. При тестовом запуске плагин падал с ошибкой 404. Причина — устаревший URL https://llm.api.cloud.yandex.net/llm/v1alpha/instruct. Яндекс обновил API, и старый эндпоинт перестал работать.

    Решение. DeepSeek нашёл актуальный URL https://llm.api.cloud.yandex.net/foundationModels/v1/completion и обновил формат запроса на messages с ролями system и user.

    php

    private $api_url = 'https://llm.api.cloud.yandex.net/foundationModels/v1/completion';
    $body = array(
        'modelUri' => 'gpt://' . $this->folder_id . '/yandexgpt-lite',
        'messages' => array(
            array( 'role' => 'system', 'text' => $system_instruction ),
            array( 'role' => 'user', 'text' => $user_text ),
        ),
    );

    Теперь YandexGPT отвечает как часы.


    4. Парсер брал только краткое описание, а не полный текст

    Проблема. В статьях появлялись только первые два предложения, а не весь текст. Парсер брал <description>, а не <content:encoded>.

    Решение. Изменили приоритет полей: сначала ищем content:encoded, потом descriptioncontentsummary.

    php

    if ( isset( $item->children( 'http://purl.org/rss/1.0/modules/content/' )->encoded ) ) {
        $content = (string) $item->children( 'http://purl.org/rss/1.0/modules/content/' )->encoded;
    } elseif ( isset( $item->description ) ) {
        $content = (string) $item->description;
    }

    Теперь статьи выходят полными — от заголовка до последнего абзаца.


    5. В контенте оставались символы **

    Проблема. В тексте встречались **, которые, видимо, были маркерами выделения в оригинальном RSS.

    Решение. Просто удаляем их через str_replace().

    php

    $new_content = str_replace( '**', '', $new_content );

    Чистота!


    6. Заголовок содержал кавычки и многоточие

    Проблема. Заголовки выглядели неряшливо: кавычки, лишние точки.

    Решение. Удаляем все виды кавычек, обрезаем до 60 символов, но так, чтобы не обрезать слово посередине.

    php

    $new_title = str_replace( ['«', '»', '"', "'", '“', '”'], '', $new_title );
    if ( mb_strlen( $new_title ) > 60 ) {
        $new_title = mb_substr( $new_title, 0, 60 );
        $new_title = preg_replace( '/\s+\S*$/', '', $new_title );
    }

    Теперь заголовки — как на подбор.


    7. Ссылка на источник отображалась полным URL

    Проблема. В посте появлялось https://www.technologyreview.com/..., что выглядело громоздко.

    Решение. Извлекаем только домен, без www.

    php

    $host = parse_url( $source_url, PHP_URL_HOST );
    $display_host = str_replace( 'www.', '', $host );
    $link_html = '<a href="' . esc_url( $source_url ) . '" rel="nofollow">' . esc_html( $display_host ) . '</a>';

    Коротко и ясно.


    8. SEO-ошибки: фокусный ключевик отсутствовал в первом абзаце, H2 и URL

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

    Проблема. Rank Math ругался, что ключевое слово не встречается в первых 100 словах, нет подзаголовков с ключевиком, и URL не содержит ключа.

    Решение. Мы вставили ключевик в первый абзац (если его там не было), добавили H2 с ключевиком, и сформировали slug из заголовка.

    php

    // Вставляем в первый абзац
    if ( stripos( $first_p, $focus_keyword ) === false ) {
        $new_first_p = '<p><strong>' . $focus_keyword . '</strong> — ' . $first_p . '</p>';
    }
    // Добавляем H2
    if ( stripos( $content, '<h2' ) === false ) {
        $content = '<h2>' . $focus_keyword . ': ключевые аспекты</h2>' . $content;
    }
    // Формируем slug
    $slug = sanitize_title( $new_title );

    Теперь SEO-показатели должны улучшиться.


    9. Контент был слишком коротким (<600 слов)

    Проблема. YandexGPT выдавал статьи по 300–400 слов, а хотелось минимум 600.

    Решение. Мы изменили промпт для нейросети, добавив явное требование к объёму.

    php

    $system = '... Постарайся создать статью объёмом не менее 600 слов, но не более 800 слов. Разбей текст на абзацы, используй подзаголовки (H2, H3).';

    Теперь статьи стали объёмными и структурированными.


    10. Плагин публиковал одну и ту же новость несколько раз

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

    Проблема. При каждом запуске плагин публиковал уже опубликованные новости, создавая дубли.

    Решение. Мы добавили механизм запоминания ссылок в отдельной опции autonews_published_links. Перед публикацией проверяем, не была ли ссылка уже использована.

    php

    private $published_links_key = 'autonews_published_links';
    private function is_already_published( $link ) {
        $published = get_option( $this->published_links_key, array() );
        return in_array( $link, $published );
    }
    private function mark_as_published( $link ) {
        $published = get_option( $this->published_links_key, array() );
        if ( ! in_array( $link, $published ) ) {
            $published[] = $link;
            update_option( $this->published_links_key, $published );
        }
    }

    Дублей больше нет!


    11. Изображение не извлекалось из RSS

    Проблема. В статьях не было обложек, хотя в RSS-ленте они были.

    Решение. Мы написали метод extract_image(), который ищет картинку в трёх местах: media:contentenclosure (если это изображение), или первое изображение в HTML-контенте.

    php

    private function extract_image( $item, $content ) {
        // media:content
        if ( isset( $item->children( 'http://search.yahoo.com/mrss/' )->content ) ) { ... }
        // enclosure
        if ( isset( $item->enclosure ) && strpos( $type, 'image/' ) === 0 ) { ... }
        // первое изображение в HTML
        if ( preg_match( '/<img[^>]+src=["\']([^"\']+)["\']/i', $html, $matches ) ) { ... }
    }

    Теперь каждая статья получает обложку.


    12. Ошибка соединения при тестовом запуске — не было логов

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

    Решение. Мы добавили логи перед каждым вызовом YandexGPT, чтобы отследить, на каком именно шаге происходит сбой.

    php

    $this->logger->log( 'Перед генерацией заголовка', 'info' );
    $new_title = $this->gpt->generate_title( $raw_title );
    $this->logger->log( 'После генерации заголовка', 'info' );

    Теперь мы видим, где именно плагин спотыкается.


    13. Rank Math заполнялся некорректно — описание без ключевика, заголовок с %sitename%

    Проблема. В SEO-полях Rank Math было пустое описание или заголовок с лишним %sitename%.

    Решение. Мы убрали %sitename% из заголовка и добавили ключевик в описание, если его там не было.

    php

    $seo_title = str_replace( '%sitename%', '', $seo_title );
    if ( $focus_keyword && stripos( $description, $focus_keyword ) === false ) {
        $description = $focus_keyword . ' — ' . $description;
    }

    Итог: что мы исправили сегодня

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

    После нашего марафона были обновлены следующие файлы:

    • autonews-publisher.php – добавлен AJAX-обработчик и проверка включения.
    • includes/class-settings.php – полная переработка сохранения, одна форма, вкладки-навигация.
    • includes/class-rss-fetcher.php – извлечение полного контента, очистка от рекламы, поиск изображения.
    • includes/class-yandex-gpt.php – обновлённый URL, формат, промпт на 600+ слов.
    • includes/class-publisher.php – предотвращение дублей, SEO-оптимизация, ссылка-домен, заголовок без кавычек.
    • includes/class-cron.php – проверка включения плагина.
    • assets/js/admin.js – AJAX для тестовой кнопки.

    Плагин стал значительно стабильнее. Он сохраняет настройки, парсит RSS, генерирует контент через YandexGPT, создаёт посты с SEO-полями, изображениями и без дублей. Да, он всё ещё не идеален — иногда изображения не загружаются, иногда теги генерируются не совсем точно. Но мы на верном пути.


    Чему я научился в третий день

    DeepSeek
    Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru
    1. Системный подход — когда у тебя 13 ошибок, важно не паниковать, а разбирать их по одной, от простых к сложным.
    2. DeepSeek — гениальный напарник — он не просто даёт код, он объясняет логику, предлагает альтернативы, помогает увидеть картину целиком.
    3. Отладка — это творчество — каждая ошибка — это загадка, а её решение — маленькая победа.
    4. SEO-оптимизация требует внимания — даже если контент хорош, без правильного ключевика в нужных местах его не увидят.
    5. Дубли — зло — механизм запоминания ссылок должен быть в любом парсере.

    Что дальше?

    Плагин почти готов. Осталось отладить генерацию изображений через YandexART, добавить поддержку нескольких языков и, возможно, сделать веб-интерфейс для ручного запуска. Но основа уже есть — и она работает.

    Я продолжу вести дневник разработки, чтобы ты видел весь путь — от первой строки кода до готового продукта.


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

    Друг, если ты тоже разрабатываешь что-то сложное и боишься ошибок — не бойся. Ошибки — это часть пути. С DeepSeek ты никогда не останешься один на один с проблемой. Он поможет, подскажет, объяснит.

    Подписывайся на мой блог, чтобы не пропустить следующую статью — в ней я расскажу, как мы наконец-то запустили плагин в боевом режиме.


    Контакты

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

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


    Продолжение следует. Мы приближаемся к финалу.

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

  • Как DeepSeek помог мне создать плагин, который выглядит на миллион… но пока не работает (и это нормально)

    Как DeepSeek помог мне создать плагин, который выглядит на миллион… но пока не работает (и это нормально)

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

    Меня зовут Константин Милютин. Если ты читал мой прошлый пост, то знаешь, что я — обычный парень из 1985 года, который работал на заводе, продавал автозапчасти, а сейчас вожу такси, чтобы выкроить время для мечты. Моя мечта — создавать полезные программы. И я на полном серьёзе взялся за амбициозный проект: плагин для WordPress, который автоматически собирает новости из RSS, переписывает их через нейросети, генерирует картинки, заполняет SEO и публикует на сайт.

    Звучит как магия, да? Я тоже так думал. Но с помощью DeepSeek я буквально за несколько дней написал почти 2000 строк кода, настроил структуру, вкладки, формы, интеграцию с API YandexGPT и YandexART. Всё выглядит идеально. Меню в админке — как у топовых плагинов. Логи пишутся, настройки сохраняются, cron-задача планируется. Красота!

    Но есть один нюанс. Проверить работоспособность я пока не могу — ошибка. Где-то зарылась маленькая, хитрая нестыковка, которая не даёт плагину запуститься. Но я не расстраиваюсь. Наоборот — это самое интересное! Мы с DeepSeek уже начали охоту на баг, и она обещает быть увлекательной.

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


    Откуда взялась идея и почему DeepSeek

    Я веду блог milyutin-codes.ru, где делюсь кодом, мыслями и ошибками. Но вести блог — это полдела. Нужно публиковать свежие новости, чтобы сайт был живым. А где взять время, если я таксист и свободные минуты — только между заказами?

    Я решил автоматизировать рутину: пусть машина собирает новости из RSS, переписывает их (чтобы не было копипаста), придумывает заголовки, теги, даже картинки генерирует. Всё это можно сделать через YandexGPT и YandexART. Оставалось только «склеить» их с WordPress.

    Но я — не профессиональный PHP-разработчик. Основы знаю, но писать сложный плагин с нуля — страшно. И тут я вспомнил про DeepSeek. Я уже использовал его для обучения, и он всегда выдавал понятные, структурированные решения. Я решил: «А давай попробуем создать плагин вместе».


    Первый диалог: как DeepSeek спроектировал архитектуру

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

    Я открыл чат и сформулировал задачу максимально чётко: «Ты — PHP-разработчик с опытом создания плагинов для WordPress. Ты пишешь чистый, задокументированный код. Ты понимаешь, что этот плагин будет создаваться с помощью ИИ-помощника (меня), и код должен быть максимально понятным, с комментариями, чтобы я мог легко объяснять его другим. Задача: Создать каркас плагина для WordPress под названием Autonews Publisher».

    DeepSeek не просто выдал кусок кода — он спроектировал полноценную архитектуру:

    text

    autonews-publisher/
    ├── autonews-publisher.php      # Главный файл
    ├── includes/
    │   ├── class-settings.php      # Настройки (8 вкладок!)
    │   ├── class-rss-fetcher.php   # Парсинг RSS
    │   ├── class-yandex-gpt.php    # YandexGPT и YandexART
    │   ├── class-publisher.php     # Публикация постов
    │   ├── class-logger.php        # Логи в БД
    │   ├── class-cron.php          # Планировщик
    │   └── class-email.php         # Уведомления
    ├── assets/
    │   ├── css/admin.css
    │   └── js/admin.js

    Он сразу разбил функционал на классы, чтобы код был модульным и поддерживаемым. Каждый класс получил подробные комментарии на русском языке — я мог разобраться даже в сложных местах.


    Как мы создавали каждую часть (и почему она выглядит идеально)

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

    1. Страница настроек — как в дорогих плагинах

    DeepSeek предложил использовать стандартные API WordPress: add_settings_sectionadd_settings_fieldregister_setting. Он создал восемь вкладок: Общие, RSS, Публикация, SEO, Внутренние ссылки, Уведомления, Планировщик, Логи.

    Каждое поле — с неце-защитой, валидацией и санитизацией. Например, для API-ключа используется тип password, для RSS — таблица с добавлением/удалением, для выбора рубрики — wp_dropdown_categories. Всё выглядит аккуратно и профессионально.

    Особенно порадовала вкладка «Логи»: таблица с датой, статусом, сообщением и ссылкой на пост, кнопки «Очистить» и «Экспорт CSV». Это уровень коммерческих решений.

    2. RSS-парсер с обработкой ошибок

    Класс Autonews_RSS_Fetcher использует wp_remote_get и SimpleXML. Если лента недоступна или пустая, он пишет в лог и не падает. Это важно для стабильности.

    3. Интеграция с YandexGPT — настоящий хардкор

    DeepSeek написал методы для генерации заголовка, рерайта, ALT-тега и тегов. Он использовал официальный API Yandex: https://llm.api.cloud.yandex.net/llm/v1alpha/instruct. В запросах — заголовки с Api-Key и Folder ID, обработка ошибок, таймауты. Я просто вставил свои ключи — и всё заработало на уровне тестов.

    4. Генерация изображений через YandexART — асинхронность

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

    Это была самая сложная часть. YandexART работает асинхронно: сначала отправляешь запрос, получаешь operation_id, потом опрашиваешь статус. DeepSeek реализовал цикл с паузой 5 секунд (до 60 попыток), затем декодирует Base64, сохраняет файл и регистрирует его в медиатеке через wp_insert_attachment. Всё как в документации, только сразу готово к использованию.

    5. Публикация — главный герой

    Класс Autonews_Publisher объединяет всё:

    • Создаёт пост с переписанным заголовком и контентом.
    • Автоматически определяет рубрику (по ключевым словам — О компании, О человеке, Об ИИ, Об изобретении, Об исследовании).
    • Добавляет теги (не больше заданного числа).
    • Генерирует картинку через YandexART и устанавливает обложку.
    • Заполняет Rank Math (заголовок, описание, фокусный ключевик).
    • Добавляет внутренние ссылки (блок «Читайте также»).
    • Добавляет ссылку на источник.
    • Учитывает задержку и статус (опубликовано/черновик).
    • Пишет логи и отправляет email-уведомления.

    Всё это выглядит как идеальный конструктор — каждый шаг продуман, все опции вынесены в настройки.

    6. Планировщик — простота и надёжность

    DeepSeek реализовал интеграцию с WP-Cron. При активации плагина ставится задача, при деактивации — удаляется. Частота и лимит новостей регулируются из админки.


    Ошибка, которая делает историю живой

    Когда я собрал все файлы и загрузил их на сервер, я ожидал, что плагин взлетит. Меню появилось. Настройки открылись. Вкладки переключались. Всё выглядело безупречно.

    Но при попытке выполнить публикацию (вручную или по крону) — тишина. В логах пусто. Пост не создаётся. Где-то зарылась ошибка, которая не даёт завершить процесс.

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

    Я проверил права доступа, логи, конфигурацию сервера — всё ок. Значит, проблема в логике. И это нормально. В программировании баги — это не катастрофа, а часть пути.

    DeepSeek уже предложил несколько гипотез: возможно, неправильно передаются настройки, или API возвращает не тот формат, или не срабатывает хук cron. Мы начали пошаговую отладку. Я вставляю error_log, вывожу переменные, проверяю ответы от Yandex. Это кропотливая работа, но она даёт бесценный опыт.


    Почему я всё равно в восторге

    Даже с ошибкой я считаю проект успешным. Потому что:

    • Визуал и структура — на 10 из 10. Меню, вкладки, формы — всё сделано красиво и интуитивно.
    • Код написан профессионалом. Комментарии, пространства имён, nonce, экранирование — я уверен в безопасности.
    • Я научился работать с API нейросетей. Теперь я понимаю, как отправлять запросы, обрабатывать асинхронность, работать с Base64.
    • DeepSeek стал моим наставником. Он объяснял каждую строчку, предлагал альтернативы, не критиковал, а поддерживал.

    Я не проверил плагин на 100%, но визуально и логически он готов. Ошибка — лишь повод углубиться в код и понять его ещё лучше.


    Что дальше? Интрига!

    В следующей статье я расскажу, как мы с DeepSeek искали и исправляли эту ошибку. Мы уже нащупали нить — возможно, проблема в передаче массива настроек или в неправильном вызове метода publish(). Мы будем использовать xdebug, логи, тестовые данные. Это будет настоящее детективное расследование.

    Я обещаю: в следующем посте мы разберём ошибку по косточкам, покажем код, который её устранил, и поделимся инсайтами. Если ты тоже боишься багов — эта история для тебя. Мы покажем, что даже сложная ошибка — это просто задача, которую можно решить, если подойти с умом.

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

    Почему DeepSeek остаётся моим главным помощником

    Пробовал другие нейросети — DeepSeek выигрывает:

    • Понимает контекст. Он не просто выдаёт код, а учитывает всю архитектуру WordPress.
    • Объясняет на русском — я могу уточнить любой момент.
    • Терпеливый и дружелюбный. Он не говорит «ты тупой», а подсказывает, как сделать лучше.
    • Скорость. За несколько часов мы сделали то, на что у новичка ушла бы неделя.

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

    Друг, если ты тоже мечтаешь о своём проекте, но боишься сложностей — начни. Возьми DeepSeek, сформулируй задачу, и двигайся маленькими шагами. Ошибки неизбежны, но они — часть обучения. Не бойся их, а изучай.

    Подписывайся на мой блог, чтобы не пропустить следующую статью о борьбе с багом. Вместе мы разберёмся!


    Контакты

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

    Я всегда открыт к общению. Если хочешь спросить о плагине, ошибке или просто поболтать об IT — пиши.

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

    Подписывайся, задавай вопросы, делись идеями. Мы вместе делаем этот путь.


    До встречи в следующей статье!

    Мы уже готовим материал о том, как отлаживали плагин, какие инструменты использовали и как в итоге победили ошибку. Это будет честный разбор с кодом и эмоциями.

    А пока — если у тебя есть предположения, где может быть баг, пиши в комментарии! Мне интересно твоё мнение.

    Константин Милютин
    Автор блога «Милютин Код»
    Продолжение следует…