Как казаки бота писали
Предыстория: стрельнуло меня заняться своей эффективностью, смотреть куда трачу время и во что в итоге вырасту, если потрачу пресловутые 10 000 часов жизни на какое-то дело. Стала искать приложения с графиками для наглядности, но такие попадались либо сильно неудобные, либо не объединяли статистику за день со статистикой за все время, либо были платные, так что я выбрала гугл-таблицы. Там и статистику можно наглядно представить, и формулы одноклеточные для подсчета сделать, только вот неудобно вводить данные по сто раз за день. Так родилась идея привязать бота к доку, чтобы через телеграм отправлять информацию и получать статистику.
С чем столкнулась:
-> Неочевидные подвязки отдельного гугловского инструмента Apps Script с языком JavaSrcipt, частные консультации начинающего JS программиста не решали возникших проблем, из чего вытекает следующая сложность
-> Мизерное количество гайдов по теме. Ролики на ютюбе есть, но со старой версией Apps Script, т.е. еще сломала голову над тем, как адаптировать под себя(приходилось каждое изменение разворачивать приложение, затем менять ссылку на развернутое приложение и перезапускать Webhook, иначе новые команды просто не работали)
-> Картинка. Нет, не так. КАРТИНКА!! Здесь неочевидным для было все. Сначала как в принципе получить диаграмму из таблицы в картинке (есть понятный метод парса в html, но телеграм не поддерживает ссылку <img>), потом как закинуть эту картинку в sendPhoto, затем как настроить удаление картинки с гугл дока, чтобы не выхлестнуть память для получения картинок каждые 30 секунд.))) В итоге на псевдокоде выглядит так: открываем нужный лист через SpreadsheetApp - берем с него диаграмму методом getCharts()[номер диаграммы]. getAs() - создаем файл через DriveApp - даем разрешение на доступ к файлу для всех через setSharing() - получаем URL файла и делаем UrlFetch на апи нашего бота со ссылкой на картинку - DriveApp setTrashed() в помощь для удаления созданного файла.
-> Доступ к моему боту открыт для всех, но работать он будет, только если сообщения приходят с моего ID, вот такая privat policy :D А вот еще неочевидная штука, связанная с политикой безопасности гугл доков - метод getUrl(), использованный выше, обрезает фотографию. Пришлось шаманить в таблице с формой и расположением диаграммы, чтобы легенда влезла в обрезаемую область, лень было переписывать метод получения URL.
-> До этого не работала с JSON и не знала, что тот не любит "\". Пришлось использовать %0A для записи с новой строки.
Выводы: работать с классическими вариантами ботов через библиотеки намного приятнее, легче найти информацию и адаптировать код. Но теперь у меня есть сущность, с которой могу работать как с обычным документом, а могу и в телеграме вносить данные и получать статистику. Мой бот записывает дату, продолжительность и вид деятельности в таблицу и тащит диаграммы по общему количеству потраченного времени и времени за сегодня, основанные на сводной таблице. В общем я потратила на создание бота 8 человеко-часов, 6 из которых гуглила, как получать и передавать картинки в телеграм. Теперь буду вся такая продуктивная, чего и вам желаю.
#путь_дао_саентиста #сбор_информации