Пилю отложенный постинг для DTF, часть 1
Привет, DTF! Решил выйти из уютного телеграм-блога и покорять просторы интернета. Среди площадок для своих мыслей (помимо ВК, Твиттера, LinkedIn) меня заинтересовали Пикабу и DTF.
Но с последним возникли проблемы...
Мотивация для создания проекта
Веду блог в Телеграме уже 2,5 года. Бывали ежедневные серии постов, но случались и перерывы. Их я легко компенсировал, создавая посты заранее с заданным временем публикации.
Кароче, на DTF я не нашел отложенного постинга. Поиск в интернете привел к теме «Отложенный постин», где лучшим советом оказался будильник с черновиками.
В комментариях я так же обнаружил бота для отложенной публикации от Andrei Apanasik. Но, увы, он оказался неактивен.
Так я решил создать свою версию отложенного постинга для DTF.
Обзор проекта и технический стек
Как фронтенд-разработчик, я выбрал TypeScript, так как другого выбора у меня не было.
Для автоматизации использовал Puppeteer. Это безголовый браузер (headless), который запускается в консоли. Он эмулирует работу обычного Google Chrome.
Для взаимодействия с этим Puppeteer нам нужен был интерфейс и тут на выбор 3 путя:
1. Плагин для Google Chrome
2. Полноценный сайт на Vue
3. Телеграм-бот
В теории самым простым оказался Телеграм бот. Для его создания использовал все тот же TypeScript и библиотеку GrammyJS.
Структура проекта и модули
За основу взял модульную структуру. Она намного проще всего остального (привет FSD) и проверена годами.
Сейчас реализованы два модуля:
1. DTFModule - для работы с DTF. Здесь происходит вся магия: селекторы с сайта, логика входа и получения черновиков. Всё находится тут.
2. TelegramModule - для работы с Telegram-ботом. Связывается с классом DTFModule, вызывая его методы.
Проблемы и решения
Главная проблема- необходимость отправлять личные данные боту. Без авторизации нельзя получить черновики.
Был вариант с плагином для Google Chrome, который бы собирал куки. Но ввод логина и пароля показался проще в реализации.
А есть ли API у DTF!?
API помог бы защитить пользователя. Но разобраться в нем оказалось сложнее, чем создать рабочий MVP за это же время.
Буду благодарен за подсказки, если вы разбираетесь в этом.
Планы и итоги
На создание MVP ушло 10 часов. Сейчас работают авторизация, получение и публикация черновиков по ID.
Осталось создать модуль отложенного постинга, который с помощью cron будет вызывать модуль публикации.
Ну а клиент-бот в Телеграме будет принимать дату и время постинга и отправлять на сервер ExpressJS для передачи времени в cron.
Об этом расскажу во второй части. Спасибо за внимание!