О пошлом не пошло. Просим нейросети программировать скрипт постинга в Telegram за вас

Практическое руководство по созданю простого скрипта постинга в Телеграм с помощью ChatGPT

О пошлом не пошло. Просим нейросети программировать скрипт постинга в Telegram за вас

Родилась у меня идея, что я хочу постить фото в Telegram-канал по расписанию. Наверное не самая новая идея, но реализовать было нужно достаточно быстро, просто и со стеком, который есть у меня в наличии (программистского опыта мало). Так как у меня только PHP-сервер, то решил, что буду использовать именно его. У проекта оказалось 3 задачи:

1. Бот, который будет постить фото из папки 3 раза в день в группу телеграм

  • Исходная папка с изображениями /images/
  • Нужно чтобы названия файла хранились на русском
  • После постинга фото должно перемещаться в папку /done/
  • В Тг должен осуществляться постинг фото и из названия файла должно поститься описание
  • К описанию дописывается 2 перехода на новую строку и название канала

2. Скрипт массового переименования файлов

  • Открываем текстовый файл
  • Берем первую фразу
  • Открываем папку и переименовываем файл
  • Стираем фразу которую уже использовали

3. Задание крон

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

Создание бота

Просим нейроночку написать нам ботика по ТЗ. Вверху я написал 3 пункта ТЗ, но на входе этого ТЗ у меня не было, поэтому текст запроса я формулировал как мог :)

Запрос на создание скрипта постинга
Запрос на создание скрипта постинга

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

По итогу уточнений нейронка выдала вот такой результат:

<?php $apiToken = "Ваш токен API Telegram"; $chat_id = "@название_вашего_канала"; $imgDirectory = '/img/'; $doneDirectory = '/done/'; echo "Начинаем проверку наличия изображений в директории {$imgDirectory}<br>"; $images = glob($imgDirectory . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); if(count($images) > 0) { echo "Найдено изображений: ". count($images) ."<br>"; $randomIndex = array_rand($images); $image = $images[$randomIndex]; echo "Выбранное изображение: {$image}<br>"; // Заголовок с большой буквы $caption = ucfirst(pathinfo($image, PATHINFO_FILENAME)); // Добавляем приписку $caption .= "\n\n@название_канала"; echo "Заголовок: {$caption}<br>"; $data = [ 'chat_id' => $chat_id, 'photo' => new CURLFile(realpath($image)), 'caption' => $caption ]; $ch = curl_init('https://api.telegram.org/bot'.$apiToken.'/sendPhoto'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if(curl_errno($ch)){ echo 'Ошибка запроса: ' . curl_error($ch) ."<br>"; } else { echo "Ответ от API Telegram: {$response}<br>"; } curl_close($ch); $moveResult = rename($image, $doneDirectory . basename($image)); if($moveResult) { echo "Изображение успешно перемещено в {$doneDirectory}<br>"; } else { echo "Не удалось переместить изображение в {$doneDirectory}<br>"; } } else { echo "В директории {$imgDirectory} не найдено изображений<br>"; }

Пришлось помучиться с путями сайта. У меня Debian, поэтому пути я прописал относительно корневой папки сервера и тогда всё завелось.

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

Контент

Главное - это определиться с тематикой, верно? Что самое популярное из контента в интернете? То что помечено 18+.

Не так давно мне сообщили об одном тренде в интернете — верблюжье копытце. Если вы не знаете что это такое, то лучше не гуглите :)

Я бы очень хотел "раззабыть" это знание, но раз оно у меня есть, почему бы не применить?

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

В общем я скачал плагин для хрома, открыл какую-то страницу из выдачи интернета и скачал массово кучу изображений, которые как мне показались не превышают мой нравственный порог, но при этом находятся на грани дозволенного и будут интересны супер большой массе, хотя и не факт :)

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

Что делать дальше? Переназывать полторы сотни картинок русскими названиями вручную? Ну уж нет!

Массовое переименование файлов

Я обратился за помощью к той же нейронке:

Запрос на скрипт массового переименования изображений
Запрос на скрипт массового переименования изображений

И в итоге получил это, предварительно попросив перемещать переименованные изображения и чистить текстовый файл от уже использованных строк:

<?php $dir = './directory'; // Замените на вашу директорию $textFile = 'names.txt'; // Замените на ваш текстовый файл $destinationDir = './images'; // Замените на вашу целевую директорию if (!file_exists($textFile) || !is_readable($textFile)) { echo "Файл $textFile не найден или недоступен для чтения.\n"; exit(1); } $newNames = file($textFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if (empty($newNames)) { echo "Файл $textFile пуст.\n"; exit(1); } if (!file_exists($destinationDir) || !is_dir($destinationDir)) { if (!mkdir($destinationDir, 0755, true)) { echo "Не удалось создать директорию $destinationDir.\n"; exit(1); } } if ($handle = opendir($dir)) { while (false !== ($fileName = readdir($handle))) { if ($fileName === "." || $fileName === "..") { continue; } if (!empty($newNames)) { $ext = pathinfo($fileName, PATHINFO_EXTENSION); $newName = array_shift($newNames); if ($ext) { $newName .= ".$ext"; } rename("$dir/$fileName", "$destinationDir/$newName"); echo "Файл $fileName переименован в $newName и перемещен в $destinationDir\n"; } else { echo "В файле $textFile недостаточно новых имен для всех файлов.\n"; break; } } closedir($handle); file_put_contents($textFile, implode("\n", $newNames)); } else { echo "Не удалось открыть директорию $dir\n"; } ?>

Потестив результат, я остался доволен и запросил у нейронки генерацию описаний файлов. Сгенерировав 150 (мне опказалось для начала этого достаточно), я запулил все на сервак. Осталось настроить расписание.

Крончик (Cron)

Если не знаете что это такое, почитайте, очень полезное знание :)

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

0 0 * * * /usr/bin/php /путь/к/вашему/bot.php > /путь/к/вашему/logfile.html Здесь /путь/к/вашему/logfile.html - это путь, куда вы хотите сохранить вывод скрипта.

Данный крон будет логировать последний вывод PHP скрипта постинга в файл (только последнее действие, чтобы файл лога не расбухал).

Заключение

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

Сам скрипт я буду использовать для своего нового проекта по менторству Junior Project Manager-ов, для постинга мемчиков в ТГ канал, возможно еще для нескольких каналов и проектов, и если буду его развивать, то возможно напишу продолжение.

Обо всех своих проектах тоже планирую написать статью и поделиться. Буду благодарен за комменты, лайки, подписки, очень важно понимать, что мой опыт кому-то интересен :) Хейтеры, вэлком, ожидаю всплеск возмущения от девчонок :)

33
3 комментария

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

1
Ответить

Может тебе написать статью тут как именно потом списки использовал? :)))))

Ответить

Да толком не использовал. Это был эксперимент, который не принес полезных результатов

Ответить