- PVSM.RU - https://www.pvsm.ru -
В последнее время я стал делать много покупок в интернет-магазинах, и нередко ловлю себя на том, что очень часто проверяю статус своих посылок (с нашей почтой не беспокоиться не получится).
Поиск готовых решений приводил только к платным сервисам. В результате было принято решение сообразить что-нибудь свое.
Под катом список используемых сервисов и подробная инструкция.
Следующий шаг поисков был посвящен сервисам, предоставляющим возможность периодического выполнения различных скриптов за неимением (ах, какая досада) личного сервера. Выбор пал на Google Apps Script [1]. В качестве ЯП используется модификация хорошо знакомого мне Javascript.
В качестве SMS-гейта был выбран SMS.ru [2], предоставляющий возможность отправки неограниченного количества бесплатных SMS стандартной длины (180 символов латиницы, 60 юникода) на личный номер телефона.
Функцию трекинга было решено позаимствовать у [не знаю, насколько] универсального китайского сервиса 17track [3].
До того, как приступить к написанию… кода, нам нужны:
Подробно расписывать процесс регистрации, надеюсь, не нужно.
API ID для SMS.ru можно получить здесь: online.sms.ru/?panel=settings&subpanel=api [4]

Для создания скрипта в Google Apps Script требуется, как ни странно, пройти на сайт этого сервиса [1].
Там нас встретит следующее окно (если оно не было отключено ранее):

Нам нужен «Пустой проект».
Хеш для 17track придется получать путем некоторых извращений.
Для этого проходим на страницу с результатом трекинга (путем ввода трекинг-кода посылки на главной) и действуем по одному из двух путей:
javascript:alert(hs(["%ваш трекинг-код%", 0])); и копируем код из окна Alert'аhs(["%ваш трекинг-код%", 0]);, копируем результат из консоли.


Все нужные ингредиенты получены, можно приступать к коду.
var apiID = "%Ваш API ID%";
var phone = "%Ваш номер телефона%";
var num = [
["%Трекинг-номер 1%", "%Хеш 1%"],
["%Трекинг-номер 2%", "%Хеш 2%"],
...
["%Трекинг-номер n%", "%Хеш n%"]
];
function sendSMS(text){
UrlFetchApp.fetch("http://sms.ru/sms/send?api_id="+apiID+"&to="+phone+"&text="+encodeURI(text));
}
function checkStatus(){
for(i=0; i<num.length; i++){
var response = UrlFetchApp.fetch("http://s1.17track.net/Rest/HandlerTrackPost.ashx?lo=www.17track.net&num="+num[i][0]+"&hs="+num[i][1]);
var result = response.getContentText().match(/z":.*a":"(.*)".*b":"(.*)"}/i);
if(UserProperties.getProperty(num[i][0]) != result[1]){
var sendstring = num[i][0]+": "+result[2];
sendSMS(sendstring);
UserProperties.setProperty(num[i][0], result[1]);
}
}
}
Оговорюсь только о том, что в качестве флага, было оповещение по этому статусу или нет, используется дата последнего статуса, которая сохраняется в User Properties и сравнивается каждый раз.
В код остается подставить API ID, номер телефона и пары трекинг-номер/хеш. Теперь нужно настроить периодическое выполнение этого скрипта. Для этого идем в «Ресурсы->Триггеры текущего проекта», нажимаем «Добавить триггер» и настраиваем по образу и подобию (промежуток можно выбрать свой):

Результатом будут такие сообщения на мобильный телефон при обнаружении изменений в статусе:

Вопросы и предложения с альтернативами, исправлениями и оптимизациями принимаются.
P.S.: благодарю неизвестного (или это я просто не нашел?) читателя за предоставленный инвайт.
Автор: pavelsh111
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/38660
Ссылки в тексте:
[1] Google Apps Script: http://script.google.com
[2] SMS.ru: http://online.sms.ru
[3] 17track: http://17track.net
[4] online.sms.ru/?panel=settings&subpanel=api: http://online.sms.ru/?panel=settings&subpanel=api
[5] Источник: http://habrahabr.ru/post/186568/
Нажмите здесь для печати.