Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Программирование на Lua _ smssend.lua & smsrulib

Автор: Saymon21 19.5.2013, 12:04

Собственно думаю раздел подходящий, для пиара публикации сие проекта (Кода, не сервиса. )). Пусть даже не имеет отношение к DC++, но зато имеет прямое отношение к нашему любимому Lua.
Утилита командной строки:


Модуль:

Репозиторий: http://mydc.ru/r/?https://github.com/dkhabarov/smssend.lua
Лицензия: GNU GPLv3
Описание: Примитивный модуль для работы с API сервиса SMS.ru. А так-же "утилита" командной строки *nix, которая по большей части пример работы данного модуля.
У меня используется например для отравки некоторых уведомлений из систем мониторинга IT-инфраструктуры, HelpDesk, 2-step authentication etc.


Документация утилиты командной строки

Опции:

  • --help — Показать справку по опциям
  • --version — Показать версию утилиты
  • --login — Устанавливает логин на сервисе sms.ru
  • --password — Устанавливает пароль на сервисе sms.ru
  • --action — Выбрать действие для запуска. (Подробности ниже)
  • --to — Адрес, куда слать сообщения
  • --message — Не читать стандартный поток ввода. Будет отправлено сообщение, которое указано в качестве значения данного аргкумента.
  • --from — Имя отправителя (Должно быть согласованно с администрацией сервиса sms.ru
  • --time — Время отправки, указывается в формате UNIX TIME.
  • --translit — Переводить все русские символы в латинские.


Действия

Основная часть построена на действиях. Допустим, если вы хотите получить баланс, нужно указать действие:
--action=balance

Доступные действия:

  • send – Отправка сообщения. (Если вы хотите просто отправить сообщение, указывать не обязательно.
  • status – Статус отправленного сообщения.
  • cost – Возвращает стоимость сообщения на указанный номер и количество сообщений, необходимых для его отправки.
  • balance – Получение баланса.
  • limit – Получение текущего состояния вашего дневного лимита.
  • stoplistadd – На номера, добавленные в стоплист, не доставляются сообщения (и за них не списываются деньги)
  • stoplistdel – Удаляет один номер из стоплиста


Примеры

Практически всегда надо указывать аргументы login и password.
Отправка сообщения, без указания агрумента message на номер 79099999999:

Код
$ lua ./smssend.lua --login=79030000000 --password=mysuperpassord --to=79099999999
Hello. This is test sms message. Sent from smssend.lua (New version).

Мы будем должны получить сообщение:
Цитата
Hello. This is test sms message. Sent from smssend.lua (New version).

Ещё один пример, используя stdin:
Код
$ echo "Hello. This is test sms message. Sent from smssend.lua (New version)." |lua ./smssend.lua --login=79030000000 --password=mysuperpassord --to=79099999999

Отправка сообщения используя агрумент message:
Код
$ lua ./smssend.lua --login=79030000000 --password=mysuperpassord --to=79099999999 --message='Hello. This is test sms message. Sent from smssend.lua (New version).'

Однако, мы посторались придумать варианты, когда в агрументах явно не надо указывать логин и пароль.
Первый вариант, возможно записать их в ~/.smssendrc:
Код
echo '79030000000:mysuperpassord' | tee ~/.smssendrc > /dev/null
chmod 600 ~/.smssendrc

После любой из приведённых примеров, без агрументов login & password.
Ещё один вариант:
Код
$ lua ./smssend.lua --to=79099999999 --message='Hello. This is test sms message. Sent from smssend.lua (New version).'
Enter login: 79030000000
Enter password:
Retype password:

Вводимый пароль видно не будет.
Проверка статуса отправленного сообщения.
Сервис возвращает идентификатор каждого отправленного сообщения. Порой мы можем захотетить проверить, доставлено ли оно:
Код
$ lua ./smssend.lua --action=status --message='0000-99'
0000-99: Сообщение не найдено.

С реальным сообщением выводимая информация конечно будет по другому…
Проверка стоимости сообщения, и кол-во сообщений, необходимых для его отправки:
Код
$ lua ./smssend.lua --action=cost --message='Hello. This is test sms message. Sent from smssend.lua (New version).' --to=79099999999
Cost: 0.22
SMS Count: 1

Проверка баланса:
Код
$ lua ./smssend.lua --action=balance
Balance: 6.43

Получение лимитов:
Код
$ lua ./smssend.lua --action=limit
Day limit: 10
Messages (Count) sent today: 0

Добавление номера 89093000000 в stop-list:
Код
$ lua ./smssend.lua --action=stoplistadd --to=89093000000 --message=test

Удаление номера из stop-list:
Код
$ lua ./smssend.lua --action=stoplistdel --to=89093000000


Возвращаемые коды
Как и большинство утилит командной строки UNIX, утилита smssend.lua обычно завершается с определёнными кодами.
  • 0 – Успешно
  • 1 – API сервиса верунул ошибку
  • 2 – Ошибка использования утилиты.



Краткая документация модуля

Подключение модуля:
Код
smsrulib = require"smsrulib"

Инициализация модуля:
Код
sms_client = smsrulib.init(login, password)

Проверка аутентификации. (Происходит при инициализации на уровне модуля):
Код
sms_client:test_auth()

Получение хэша sha512(password+token)
Код
sms_client:get_crypt_key()

Получение токена:
Код
sms_client:get_token()

Отправка сообщения:
Код
sms_client:send(to, text[, from, time, translit, test])

Получение статуса отравленного сообщения:
Код
sms_client:status(id)

Получение стоимости сообщения на указанный номер и количество сообщений, необходимых для его отправки:
Код
sms_client:cost(to, message)

Получение баланса:
Код
sms_client:balance()

Получение текущих лимитов:
Код
sms_client:limit()

Добавление номера to в stop-list c причиной reason:
Код
sms_client:stoplist_add(phone, reason)

Удаление номера из stop-list:
Код
sms_client:stoplist_del(phone)