В последнее время я стал делать много покупок в интернет-магазинах, и нередко ловлю себя на том, что очень часто проверяю статус своих посылок (с нашей почтой не беспокоиться не получится).
Поиск готовых решений приводил только к платным сервисам. В результате было принято решение сообразить что-нибудь свое.
Под катом список используемых сервисов и подробная инструкция.
Выбор вспомогательных сервисов
Следующий шаг поисков был посвящен сервисам, предоставляющим возможность периодического выполнения различных скриптов за неимением (ах, какая досада) личного сервера. Выбор пал на Google Apps Script. В качестве ЯП используется модификация хорошо знакомого мне Javascript.
В качестве SMS-гейта был выбран SMS.ru, предоставляющий возможность отправки неограниченного количества бесплатных SMS стандартной длины (180 символов латиницы, 60 юникода) на личный номер телефона.
Функцию трекинга было решено позаимствовать у [не знаю, насколько] универсального китайского сервиса 17track.
Приготовления
До того, как приступить к написанию… кода, нам нужны:
- аккаунты на Google (вдруг у кого нет) и SMS.ru
- API ID от SMS.ru
- созданный пустой проект на Google Apps Script
- хеш, без которого 17track откажется нам выдавать статус, для каждого трек-номера
Подробно расписывать процесс регистрации, надеюсь, не нужно.
API ID для SMS.ru можно получить здесь: online.sms.ru/?panel=settings&subpanel=api
Для создания скрипта в Google Apps Script требуется, как ни странно, пройти на сайт этого сервиса.
Там нас встретит следующее окно (если оно не было отключено ранее):
Нам нужен «Пустой проект».
Хеш для 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
постоянно приходит error message: abN
в чём проблема?
У меня та же проблема. Через браузер заходит, но скрипт работает на хостинге, а там – выдает ошибку. Похоже, забанили