Пилю отложенный постинг для DTF, часть 1

Привет, DTF! Решил выйти из уютного телеграм-блога и покорять просторы интернета. Среди площадок для своих мыслей (помимо ВК, Твиттера, LinkedIn) меня заинтересовали Пикабу и DTF.
Но с последним возникли проблемы...

Картинка для привлечения внимания
Картинка для привлечения внимания

Мотивация для создания проекта

Веду блог в Телеграме уже 2,5 года. Бывали ежедневные серии постов, но случались и перерывы. Их я легко компенсировал, создавая посты заранее с заданным временем публикации.

Пруф создания канала
Пруф создания канала

Кароче, на DTF я не нашел отложенного постинга. Поиск в интернете привел к теме «Отложенный постин», где лучшим советом оказался будильник с черновиками.
В комментариях я так же обнаружил бота для отложенной публикации от Andrei Apanasik. Но, увы, он оказался неактивен.

Пруф от Andrei Apanasik
Пруф от 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.

Об этом расскажу во второй части. Спасибо за внимание!

44
22
3 комментария

в теории это очень круто звучит

Ответить

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

Ответить

Увы, но других вариантов нет.

Думаю попробовать вариант с куками, но это после релиза уже.

Делал в первую очередь для себя, массовый потребитель на втором месте:)

Ответить