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 — по-моему людям это удобно.