Рубрика: Блог

  • От идеи до работающего автопостинга: как я перешёл с 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: перерыв помог — я нашёл ошибку, и она оказалась совсем не в коде

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

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

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

    И знаешь что? Перерыв сработал.

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

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

    Утро пятого дня: отдохнувший мозг видит яснее
    Я открыл чат с DeepSeek после перерыва и сказал: «Я понял. Плагин работает идеально на моём локальном сервере. Но на боевом хостинге он не может скачать RSS-ленту Technology Review. Мы увеличивали таймауты, добавляли повторные попытки, кеширование — ничего не помогает».

    DeepSeek спросил: «А что, если проблема не в технической части? Может быть, сайт просто не отдаёт полный контент?»

    И тут меня осенило. Я зашёл на сайт Technology Review в обычном браузере и увидел это: замок. Статья требовала подписки. Полный текст был доступен только платным пользователям. RSS-лента отдавала только анонсы — те самые несколько предложений, которые мы видели в постах.

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

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

    1. Окончательно починили сохранение настроек
      Настройки теперь сохраняются идеально. Мы переделали class-settings.php так, что все поля в одной форме, вкладки — просто навигация. Галки не слетают. Никогда.
    2. Очистка контента — теперь идеальная
      Мы добавили комплексную очистку: удаляем **, ###, —, обратные кавычки, множественные пробелы, пробелы перед знаками препинания. Контент стал кристально чистым.

    php
    private function clean_markdown( $text ) {
    $patterns = [
    ‘/**/’, ‘/_/’, ‘/#{2,}/’, ‘/-{2,}/’, ‘/*{2,}/’, ‘/{2,}/’, ‘/\s{2,}/’, ‘/«`/’
    ];
    $text = preg_replace( $patterns, ‘ ‘, $text );
    return trim( preg_replace( ‘/\s+/’, ‘ ‘, $text ) );
    }

    1. Ключевик — теперь главная сущность
      Мы добавили метод, который через GPT выделяет главную сущность: название продукта, имя человека, компанию. Больше никаких предлогов в ключевике.
    2. Ключевик в первом абзаце — естественно
      Теперь ключевик вставляется как часть предложения, выделяясь жирным, без лишних тире и двоеточий.
    3. Убрали принудительный H2
      Подзаголовки теперь генерируются GPT органично. Без штампов.
    4. Объём контента — 600–800 слов
      Увеличили max_tokens до 3000, добавили требование к объёму в промпт. Статьи стали полноценными.
    5. Ссылка на источник — только домен
      Вместо полного URL показываем technologyreview.com. Кратко и понятно.
    6. Дубли исключены
      Механизм запоминания ссылок работает надёжно. Каждая новость публикуется только один раз.
    7. Изображения из RSS — с повторными попытками
      Плагин ищет картинку в media:content, enclosure, или берёт первое img из контента. При ошибке — повторяет попытку.
    8. Кеширование RSS для устойчивости
      Мы добавили кеширование RSS-ответа на 1 час через set_transient(). Если лента недоступна, плагин использует кеш.
    9. Перевод контента на русский
      Все промпты теперь содержат требование «на РУССКОМ языке». Контент стал полностью русскоязычным.

    Главное открытие: ошибка была в источнике, не в коде
    Когда я понял, что Technology Review — платный, я почувствовал облегчение. Потому что это означало, что мой плагин работает правильно. Он делал всё, что должен. Просто получал то, что ему отдавали.

    DeepSeek сразу предложил альтернативные бесплатные RSS-источники. Вот некоторые из них:

    Источник RSS-ссылка
    Google News (AI) https://news.google.com/rss/search?q=artificial+intelligence&hl=en-US&gl=US&ceid=US:en
    The Verge (AI) https://www.theverge.com/rss/ai-artificial-intelligence/index.xml
    VentureBeat (AI) https://venturebeat.com/category/ai/feed/
    ArXiv (AI papers) https://arxiv.org/rss/cs.AI
    DeepSeek рекомендовал начать с Google News — это бесплатно, стабильно и без подписки. Я так и сделал.

    Что я понял за пять дней
    Перерыв — это инструмент. Когда я отвлёкся, мозг продолжал работать в фоновом режиме и нашёл решение.

    Ошибка может быть не в коде. Иногда проблема в окружении, в источнике данных, в бизнес-логике.

    Не нужно гнаться за результатом. Этот путь — долгий. И он того стоит.

    DeepSeek — не просто помощник. Он стал моим напарником, который не даёт опустить руки.

    Плагин работает. И он будет работать ещё лучше с правильными источниками.

    Плагин не работает идеально, но мы на верном пути
    Плагин «Autonews Publisher» сейчас полностью готов к работе. Он:

    сохраняет настройки,

    парсит RSS,

    очищает контент,

    генерирует статьи через YandexGPT,

    добавляет SEO,

    подгружает изображения,

    исключает дубли.

    Единственное, что осталось — выбрать правильные RSS-источники. И это уже не техническая проблема, а стратегическая.

    Что дальше?
    Я начну тестировать плагин с новыми источниками — Google News, The Verge, VentureBeat. Уверен, что результаты будут отличными.

    А ещё я продолжу писать этот дневник. Потому что даже после финала плагина — это история о том, как человек учится, ошибается, отдыхает и идёт дальше.

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

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

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

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

    Ключевая фраза
    Ошибка была не в коде — она была в источнике

    Осознанность

    Продолжение следует. Теперь — с новыми источниками.

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

  • Четвёртый день с DeepSeek: почти финиш, но я взял паузу, чтобы не сойти с ума.

    Четвёртый день с DeepSeek: почти финиш, но я взял паузу, чтобы не сойти с ума.

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

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

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

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


    Утро четвёртого дня: план и реалии для плагина

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

    Я открыл чат с DeepSeek и сказал: «Давай подведём итог. Что мы сделали, что осталось, и где мы сейчас?» Мы уже исправили 13 ошибок в третий день, но оставались ещё нюансы: маркдаун-символы в тексте, слишком длинные URL, ключевики с предлогами, дубли новостей и, самое обидное, таймауты при подключении к RSS-лентам.

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


    Что мы исправили в четвёртый день с DeepSeek

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

    1. Сохранение настроек — окончательно и бесповоротно

    Настройки больше не слетают. Мы переделали class-settings.php так, что все поля теперь в одной форме, а вкладки — просто навигация. При сохранении отправляются все данные, галки не сбрасываются. Теперь я могу спокойно переключаться между вкладками и не бояться, что что-то потеряется.

    2. Очистка контента от маркдаун-символов

    В статьях появлялись артефакты: **##---, лишние пробелы, даже буква «с» в начале. Мы написали метод clean_markdown(), который удаляет всё это безобразие.

    php

    private function clean_markdown( $text ) {
        $patterns = [
            '/\*\*/', '/__/', '/#{2,}/', '/-{2,}/', '/\*{2,}/', '/_{2,}/', '/\s{2,}/'
        ];
        $text = preg_replace( $patterns, ' ', $text );
        return trim( preg_replace( '/\s+/', ' ', $text ) );
    }

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

    3. Корректное формирование фокусного ключевика

    Раньше ключевик обрезался до предлогов: «Искусственный интеллект в». DeepSeek предложил метод, который отсекает предлоги и союзы, оставляя только значимые слова — существительные и прилагательные. Теперь ключевик звучит осмысленно, например: «Искусственный интеллект разработка лекарств».

    4. Ключевик в первом абзаце — без лишних символов

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

    5. Убрали принудительный H2

    Мы раньше добавляли искусственный подзаголовок «КЛЮЧЕВИК: ключевые аспекты», и это выглядело странно. Теперь мы полагаемся на GPT: в промпте рерайта мы просим нейросеть добавлять подзаголовки с ключевиком органично. Получается естественно и без штампов.

    6. Увеличили объём контента до 600+ слов

    Статьи были короткими — около 500 слов. Мы увеличили max_tokens до 3000 и добавили в промпт требование «не менее 600 слов». Теперь GPT выдаёт статьи на 600–800 слов, что хорошо для SEO.

    7. Сократили постоянную ссылку (slug)

    URL был длиной 96 символов — слишком много. Мы обрезаем slug до 60 символов и удаляем лишние окончания. Теперь ссылки аккуратные.

    8. Ссылка на источник — только домен

    Вместо полного URL мы показываем только домен: technologyreview.com. Кратко и понятно.

    9. Предотвратили дублирование новостей

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

    10. Извлечение изображений из RSS

    Теперь, если генерация картинок отключена, плагин ищет изображение в RSS: в media:content, в enclosure, или берёт первое img из контента. И устанавливает его как обложку с ALT = фокусный ключевик.

    11. Увеличен таймаут для RSS

    Но вот тут мы упёрлись в стену. Хостинг не даёт подключиться к www.technologyreview.com — таймаут 10 секунд. Мы увеличили таймаут до 60 секунд, добавили повторные попытки (до 3-х с паузой 3 секунды), установили User-Agent. Но проблема не в коде. Она в хостинге.


    Не решённая проблема: хостинг блокирует RSS

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

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

    DeepSeek предложил обратиться в поддержку хостинга с просьбой:

    • разрешить внешние HTTP-запросы,
    • увеличить max_execution_time до 120 секунд,
    • отключить ограничения allow_url_fopen.

    Но это требует времени. И я принял решение: не гнаться за результатом.


    Почему я решил сделать перерыв

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

    Когда ты 4 дня подряд сидишь с кодом, общаешься с нейросетью, правишь баги, тестируешь, и на финишной прямой упираешься в стену — легко выгореть. Я понял, что если буду давить дальше, то перестану получать удовольствие от процесса. А ведь именно ради удовольствия я и начал этот проект.

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

    Это не поражение. Это зрелость.


    Что я понял за четыре дня

    DeepSeek
    Создано с помощью нейросети Алисы YandexART для milyutin-codes.ru
    1. Плагин почти готов. Код работает, SEO-ошибки исправлены, контент очищен, дубли исключены. Осталось только решить вопрос с хостингом.
    2. DeepSeek — мой идеальный напарник. За четыре дня мы исправили более 20 ошибок. Без него я бы просто не справился.
    3. Нельзя игнорировать внешние ограничения. Иногда проблема не в твоём коде, а в окружении. И это нужно принимать.
    4. Перерыв — это не слабость. Это способ сохранить ясность ума и не потерять интерес.
    5. Этот путь — долгий. И это нормально. Главное — идти вперёд, даже если с остановками.

    Итоговый статус

    • Код: полностью готов к работе.
    • SEO: все ошибки исправлены.
    • Контент: очищен, объёмный, структурированный.
    • Дубли: исключены.
    • Изображения: подгружаются из RSS.
    • Единственная проблема: хостинг блокирует доступ к RSS-источникам.

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


    Что дальше?

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


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

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

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


    Контакты

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

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

    Продолжение следует. Но сначала — пауза.

    Константин Милютин
    Создано с помощью нейросети Алисы 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: как мы ловили баги в плагине и нашли верный путь

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

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

    Спойлер: плагин всё ещё не идеален. Но мы на верном пути.


    С чего мы начали второй день

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

    После первой статьи я был полон оптимизма. Плагин «Autonews Publisher» уже имел красивую админку, восемь вкладок настроек, интеграцию с YandexGPT и YandexART. Но при попытке сохранить настройки — они слетали. При попытке опубликовать новость — падала ошибка 404 от YandexGPT. И самое обидное: RSS-источники, которые я добавлял, исчезали после сохранения других вкладок.

    Я открыл чат с DeepSeek и сказал: «Нашёл ошибку. Плагин не сохраняет настройки в полях API ключ YandexGPT, Folder ID Yandex, Рубрика для публикации, Email для уведомлений. Ещё надо добавить функцию включить плагин и тестовый запуск».

    DeepSeek сразу взялся за дело. Он предложил исправить метод sanitize_settings() так, чтобы он не затирал поля, которые не были отправлены формой. Вместо этого он стал сливать новые значения со старыми — и это сработало! Настройки перестали слетать.

    Но проблема с RSS-источниками осталась. Каждый раз, когда я сохранял настройки на любой другой вкладке, список RSS-лент обнулялся. DeepSeek предложил убрать стандартную кнопку «Сохранить» с вкладки RSS и оставить только кастомное управление через кнопки «Добавить» и «Удалить». Мы сделали так, чтобы RSS-источники сохранялись отдельно, и теперь они перестали исчезать.


    Ошибка 404: почему YandexGPT не отвечал

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

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

    text

    Ошибка YandexGPT (код 404): request-id: 758cf93c-168e-4db6-8c34-7618c77ae16a

    DeepSeek быстро нашёл причину: я использовал устаревший URL https://llm.api.cloud.yandex.net/llm/v1alpha/instruct. За прошедшие месяцы Yandex Cloud обновил API, и теперь нужно использовать https://llm.api.cloud.yandex.net/foundationModels/v1/completion. Кроме того, изменился формат запроса: вместо полей instruction и text теперь используется массив messages с ролями system и user.

    DeepSeek переписал метод request() в классе Autonews_Yandex_GPT:

    php

    $body = array(
        'modelUri' => 'gpt://' . $this->folder_id . '/yandexgpt-lite',
        'completionOptions' => array(
            'stream' => false,
            'temperature' => $this->temperature,
            'maxTokens' => $this->max_tokens,
        ),
        'messages' => array(
            array(
                'role' => 'system',
                'text' => $system_instruction,
            ),
            array(
                'role' => 'user',
                'text' => $user_text,
            ),
        ),
    );

    После замены файла ошибка 404 исчезла. Но на её месте появилась другая проблема: парсер RSS извлекал только краткое описание новости, а не полный текст.


    Почему в статье было только вступление

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

    Я добавил RSS-ленту MIT Technology Review и запустил тест. Плагин опубликовал статью, но в ней было всего несколько строк:

    «The Download: новости технологий. Здравствуйте! В сегодняшнем выпуске The Download мы расскажем о том, что происходит в мире технологий…»

    А полная статья была огромной! Я открыл оригинал: https://www.technologyreview.com/2026/07/20/1140675/chinas-ai-models-have-trumps-ai-world-at-war-with-itself/

    DeepSeek объяснил: в RSS-ленте есть два типа контента — краткое описание (<description>) и полный HTML (<content:encoded>). Мой парсер брал только description, потому что он стоял в приоритете. Нужно было изменить порядок: сначала искать content:encoded, а только потом description.

    DeepSeek переписал метод fetch() в классе Autonews_RSS_Fetcher:

    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;
    }

    Теперь парсер стал брать полный текст. Но вместе с текстом приходила реклама, баннеры и скрипты. Нужно было очистить контент.


    Чистка контента от рекламы с сохранением ссылок

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

    DeepSeek написал метод clean_content(), который:

    • Удаляет элементы с классами adbannerpromosponsoradvertisement и другими рекламными индикаторами.
    • Удаляет все <script><iframe><style><noscript>.
    • Сохраняет ссылки <a> и полезные теги (абзацы, заголовки, списки).

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


    Что мы получили в итоге

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

    На второй день разработки плагин:

    • Сохраняет все настройки без сбросов.
    • RSS-источники больше не исчезают.
    • YandexGPT отвечает без ошибки 404.
    • Парсер извлекает полный текст статьи.
    • Контент очищается от рекламы и скриптов.

    Пост #1000 был создан успешно! В нём была полная статья, очищенная от рекламы, но со ссылками.


    Плагин всё ещё не идеален, но мы на верном пути

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

    Да, плагин ещё не готов к релизу. Есть нюансы с форматированием, иногда теряются изображения, не всегда корректно определяются теги. Но мы с DeepSeek идём в правильном направлении. Каждая исправленная ошибка — это шаг вперёд.

    Я понял главное: даже когда кажется, что всё сломалось, нейросеть-наставник помогает разобраться. DeepSeek не просто даёт код — он объясняет почему это работает, откуда берутся ошибки и как их чинить.


    Уроки второго дня

    1. Настройки нужно мержить, а не перезаписывать. Если форма отправляет только часть полей, остальные должны оставаться на месте.
    2. API нейросетей меняются. То, что работало вчера, сегодня может устареть. Всегда проверяйте актуальную документацию.
    3. RSS-парсер должен уметь извлекать content:encoded. Краткое описание — это не полный текст.
    4. Очистка контента — это отдельная наука. Нужно удалять рекламу, но сохранять ссылки.
    5. DeepSeek — лучший напарник. Он терпеливо объясняет, предлагает решения и не устаёт от моих вопросов.

    Что дальше?

    В следующей статье я расскажу, как мы будем настраивать генерацию изображений через YandexART, улучшать SEO-заполнение и добавлять поддержку нескольких языков. Ошибки ещё будут, но я знаю: с DeepSeek мы справимся.


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

    Друг, если ты читаешь это и думаешь, что программирование — это сложно и не для тебя, вспомни мою историю. Я начинал с G-кода на станках с ЧПУ, работал менеджером по запчастям, вожу такси. Но я не боюсь ошибаться, потому что каждая ошибка — это урок. И если у меня получается, то у тебя получится тем более.

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


    Контакты

    📧 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

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


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

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

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

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

  • Как я начал свой путь в IT с помощью ИИ в 2026 году: от идеи до первого плагина

    Как я начал свой путь в IT с помощью ИИ в 2026 году: от идеи до первого плагина

    Привет, друг! Эта статья о том как я начал свой путь в IT!

    Меня зовут Константин Милютин. 27 мая 1985 года я родился в мире, где компьютеры были редкостью, а программированием называли только то, что делают бородатые дяди в очках. Я вырос, выучился на наладчика станков с ЧПУ, работал менеджером по продаже автозапчастей, а сейчас вожу такси. И именно сейчас, в 2026 году, я наконец-то начинаю делать то, о чём мечтал всю жизнь — создавать свои программы.

    Эта статья — не про хайп и не про «как я заработал миллион за неделю». Это честный разговор о том, как обычный человек с непростым путём использует искусственный интеллект, чтобы войти в IT. Без возрастных ограничений, без «мне уже поздно», без отговорок.

    Я пишу этот блог, чтобы ты знал: если я смог — сможешь и ты.


    Кто я и зачем я здесь

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

    Сначала немного фактов. Я родился в 1985 году. Моё детство и юность прошли без интернета, без смартфонов, без «загугли за пять секунд». Первые компьютеры я видел в девятом классе, и они казались чем-то фантастическим. Я выучился на наладчика станков с числовым программным управлением (ЧПУ). И знаешь что? Это было настоящее программирование. Только вместо Python и JavaScript — AutoCAD. Вместо IDE — пульт управления. Вместо отладчика — твои глаза и риски сломать фрезу за сотни тысяч рублей.

    Тогда я понял главное: программа — это последовательность команд, которая заставляет железо делать то, что нужно. Разница лишь в том, какое железо. Станок или компьютер — суть одна. И этот навык остался со мной навсегда.

    Потом жизнь закрутила. Я ушёл в продажи — стал менеджером по продаже автозапчастей. Это была совсем другая история: работа с людьми, каталогами, артикулами, логистикой. Компьютер я использовал каждый день, но только как пользователь. А внутри сидел червяк: «Ты же понимаешь, как устроены программы. Ты же умеешь писать логику. Почему не идёшь в разработку?»

    Но были обязательства, семья, стабильный доход — и страх. Страх, что в 30+ уже поздно, что я ничего не знаю о современных языках, что меня не возьмут, что я не справлюсь. Я откладывал мечту на потом. На «когда-нибудь».

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


    Мой путь: от ЧПУ до путь в IT с нейросетями

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

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

    Потом, уже работая в автозапчастях, я впервые попробовал использовать ИИ для дизайна — это был эксперимент «ИИДизайн». Тогда я использовал нейросети как потребитель: генерировал картинки, прототипы, идеи. Но меня это не устраивало. Я хотел создавать инструменты, а не просто пользоваться чужими.

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

    Я стал использовать DeepSeek как своего наставника. Объяснял ему задачу, просил показать код, разбирал построчно, задавал глупые вопросы. И нейросеть терпеливо отвечала. Она не говорила «тебе уже поздно», «ты слишком стар», «ты не из IT». Она просто помогала. И это сломало мой главный барьер.

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


    Что такое «Милютин Код»?

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

    «Милютин Код» — это мой публичный дневник разработчика-самоучки. Я веду его, чтобы:

    • Фиксировать свой прогресс. Видеть, как я расту.
    • Делиться ошибками. Чтобы другие не наступали на те же грабли.
    • Показывать реальный код. Не идеальный, но работающий.
    • Вдохновлять. Показывать, что начать можно в любом возрасте, с любым опытом.

    Здесь ты не найдёшь сухой теории из учебников. Здесь — живая практика, живые поиски и живой человек, который учится каждый день.


    Планы на будущее: что я создаю

    Я не просто веду блог — у меня есть чёткая цель: создать полезные инструменты на стыке ИИ и автоматизации. Вот мои ближайшие проекты:

    1. Плагины для нейросетей

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

    2. Автоматизация рутины

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

    3. Новостной агрегатор на ИИ

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

    4. Интерактивные туториалы

    Хочу сделать обучение программированию доступным через телеграм-бота или веб-платформу.


    Почему ИИ — мой главный инструмент?

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

    Я выбрал нейросети не потому, что это модно. А потому что это реально экономит время. У меня нет лишних часов — я работаю таксистом, и каждая свободная минута на счету. ИИ помогает мне быстрее писать код, объяснять непонятные вещи, тестировать идеи.

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

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


    Призыв: подпишись и иди со мной

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

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

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

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


    Вместо послесловия

    Я родился в 1985 году. В детстве у меня не было компьютера. Я работал на заводе, продавал автозапчасти, а сегодня вожу такси, чтобы найти время для своей мечты. И это — не история неудачника. Это история человека, который не сдался.

    Если ты читаешь это и думаешь, что тебе «поздно» или «ты недостаточно умён» — вспомни меня. Обычного парня, который начал с нуля в 40 лет и уже пишет свой код.

    Мы всё можем. Главное — начать.

    До встречи в коде.

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