Twitter уже для многих людей стал повседневным средством общения и получения информации. Лично я каждый день открываю его по несколько раз с телефона, да и на десктопе клиент запущен постоянно.
Возникла идея, что неплохо бы получать через него какие-то напоминания, раз уж я пользуюсь им каждый день.
За вечер был написан небольшой бот для напоминаний.
Само собой первая мысль была найти аналоги. Несколько таких сервисов можно найти после недолгого гугления.
Но меня они не устроили по нескольким причинам.
Некоторые такие сервисы предлагают заполнить форму на сайте и чуть ли не создать на нём аккаунт. Многие на английском языке, что не всем удобно (хотя кому-то это покажется плюсом). Многие предлагают отправить уведомление только в определённый день, без привязки ко времени.
Конечно, есть множество способов настроить себе уведомления и напоминания — множество календарей, как онлайн-сервисов с смс-напоминаниями, так и программы для десктопов и телефонов (например, календарь от Apple, который синхронизируется между устройствами по iCloud). Но всё это заставляет делать лишние действия — открыть календарь, добавить событие, заполнить… Но всё ведь можно сделать гораздо проще, простой текстовой строкой (любители работать в консоли, думаю, понимают, о чём я).
Уж коли Twitter-клиент открыт постоянно на десктопе, да и мобильный клиент открывается несколько раз в день — почему бы просто не написать твит, который вернётся в нужное время. Не нужно открывать что-то ещё, или вспоминать сайт/искать его в закладках, на котором можно сделать напоминалку.
За вечер был написан, скажем так, бот. Не знаю, чего хотелось больше — сделать удобный для себя сервис или попрактиковаться в работе с API Twitter. Зарегистрировал для него аккаунт — слово «напоминаю» на транслите, чтобы было легко запомнить.
Пользоваться им просто, нужно просто отправить твит формата:
@napominau день.месяц час: минута сообщение с напоминанием
Например:
Бот реализован в виде php-скрипта на серверной стороне. Общение с Twitter API на PHP я опущу, немало статей об этом написано. В общем выглядит всё так:
- раз в минуту скрипт забирает последние mentions через API Twitter, при этом запоминая id последнего полученного ранее твита. Это позволяет нам в параметрах запроса использовать параметр since_id, чтобы не гонять лишние данные.
- Полученные твиты разбираются регуляркой. Если формат неверный — отправителю посылается об этом печальный твит.
Если формат верный — твит складируется в базу, ожидая, когда придёт его время. - Раз в минуту другой скрипт проходит по базе в поисках напоминаний, время которых пришло. Если таковые имеются — они отправляются владельцу и стираются из базы.
Таким образом в указанное время пользователь получает написанное им же напоминание:
На мой взгляд, к плюсам такого «бота» можно отнести:
- удобство создания напоминаний — просто отправка твита, не надо совершать лишние действия;
- привязка напоминаний не только ко дню, но и ко времени;
- напоминания прямо в Twitter, что удобно, если вы смотрите ленту по несколько раз в день или вовсе не закрываете клиент;
- создание напоминаний через свой Twitter-аккаунт исключает использование бота для розыгрышей :) (напоминания отправляются владельцу) ;
- Twitter-клиентов очень много под разные платформы и устройства, даже в телевизоры уже встраивают клиенты, то есть можно использовать повсеместно;
- современные телефоны позволяют использовать уведомления о новых твитах, если владелец разрешил их. Например, владельцы iPhone могут получать PUSH-уведомления о новых твитах с упоминаниями владельца. Владельцы Android-девайсов тоже могут получать уведомления от клиента. Это делает напоминания ещё более удобными.
Технических сложностей было не много — запросы гоняются через CURL по REST API, данные в формате JSON. Были проблемы при запоминании id твитов — на сервере большое число преобразовывалось в формат вроде 1.0542197938321E-081, а т.к. последний id используется для последующих запросов — это вызывало проблемы при отправке запроса с параметром since_id — API возвращал ошибку. Правда потом в возвращаемых данных было обнаружено поле id_str — тот же ID только в виде текстовой строки, а не числа, это решило проблему.
У API Twitter есть ограничения на число обращений к API — 150 неавторизованных запросов в час, 350 авторизованных в час. Однако на POST-запросы это не распространяется. Забирая твиты раз в минуту мы используем лишь 60 запросов в час, этого с лихвой хватает. А отправка твитов — без ограничений. Поэтому упереться в лимиты по идее бот не должен.
На сервере стоит московское время, поэтому надо указывать его. Если вы указали время раньше текущего — то проверяется разница между текущим и указанным временем — если она меньше 24 часов — то твит с напоминанием отправится сразу. Если больше 24 часов — то переносится на следующий год.
Буду рад, если кому-то бот покажется полезным. Способ использования вынесен в описание аккаунта @napominau (время, нужно указывать московское).
P.S. Я бы на месте многих сервисов задумался насчёт своих ботов — принимать какие-нибудь заявки/заказы через Twitter — по-моему людям это удобно.