Оповещение о новых заявках в Sape
SAPE.RU предоставляет программистам набор api функций, использующих протокол XML-RPC и позволяющих разрабатывать скрипты для сбора статистики, изменения параметров, автоматизации действий, таких например как одобрение на размещение ссылок!!! В процессе изучения информации на эту тему я наткнулся на статью SAPE Stat v.1.0, где автор реализовал скрипт сбора статистики, советую с ней ознакомиться. Я же решил познакомить читателей с api интерфейсом на своем примере. Итак, поехали.
Цель:
Реализуем скрипт, который будет проверять наличие новых заявок на размещение ссылок в sape и если таковые имеются, он разошлет письма на указанные адресаты. Добавим написанный скрипт в cron на хостинге. Разумеется, использовать его имеет смысл, если не включен автоматический режим подтверждения.
Реализация:
Для взаимодействия через XML-RPC возьмем на вооружение библиотеку The Incutio XML-RPC Library, которая будет заниматься формированием, отправкой, приемом и разбором xml пакетов. Из саповского списка функций нам понадобятся: sape.login() – для авторизации и sape.get_messages() – для получения списка заявок. Исходник скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php require('xml.php');// Подключаем библиотеку XML-RPC ini_set("date.timezone","Europe/Moscow"); $login="test"; //Ваш логин в SAPE.RU $pass="c46424119ed6b2c28dcadb193d5cc859"; //Хэш вашего пароля в SAPE.RU $admin_email="your_email@domain.com"; //e-mail куда направлять письма о появлении новых заявок $period=3600; //периодичность вызова скрипта cron в секундах $ljClient = new IXR_Client('www.sape.ru', '/api_xmlrpc.php'); //Авторизируемся в Sape $ljClient->query("sape.login", $login, $pass, true); $filter["dates"] = explode (" ",date("Y-m-d")); // массив, содержащий только один элемент - сегодняшнюю дату $filter["types"] = array (2); // Новая заявка на размещение на странице * ссылки * на URL * //Отсылаем запрос на получение новых заявок $ljClient->query("sape.get_messages",$filter,1,100); $ljResponse = $ljClient->getResponse(); $body=""; if ($ljResponse["messages"]) { $now_time=time(); while (list ($key1,$value1) = each ($ljResponse["messages"])) { $tmp = (array)$value1["date"]; //Если завка "старая", т.е. на нее уже в течение дня высылалось уведомление, то пропустим ее if ($now_time-mktime($tmp["hour"],$tmp["minute"],$tmp["second"],$tmp["month"],$tmp["day"],$tmp["year"]) > $period) continue; $body.=$value1["body"]."\r\n\r\n"; } //Если есть новые заявки - отправляем уведомление if ($body != "") { $body.= "Перейти к http://sape.ru\r\n"; $body = htmlspecialchars(strip_tags(stripslashes($body))); $subject = "=?utf-8?B?" . base64_encode("Уведомление о новых заявках на SAPE.RU") . "?="; $headers = "Content-Type: text/plain; charset=\"utf-8\"\r\nFrom:from@from.com\r\nReply-to:reply@reply.com"; mail($admin_email,$subject,$body,$headers); } } ?> |
Вам необходимо подкорректировать строки 4,5,6, указав свои рег. данные (внимание! в 5-й строке указывается не пароль, а его хэш), а также 7-ю, установив периодичность вызова скрипта в секундах. Для генерации md5 хэша можете воспользоваться полем:
Хочу заметить одну вещь, связанную с sape.get_messages(). Рассмотрим пример, допустим появилась новая заявка, наш скрипт выполняется по расписанию и генерирует письмо на эту заявку, спустя какое-то время (в этот же день) появляется еще заявка, скрипт выполняется вновь и уже генерирует письмо, в котором будут фигурировать обе заявки. Некрасиво, одна и та же заявка фигурирует в 2-х письмах, чтобы этого избежать скрипт проверяет “новизну” заявки
(строки 27-30). Если время ее появления приходится на предыдущие запуски скрипта, то она игнорируется (предполагаем, что на нее уже было сгенерировано письмо).
Заливаем скрипты из архива (см. ссылку в конце поста) на хостинг и задаем расписание запуска с помощью cron, указывая с какой частотой выполнять скрипт, я на своем хостинге настроил на выполнение через каждый час.

Готово! Скрипт будет отсылать на почту уведомления о появлении заявок за текущую дату. Можно при желании сделать так чтобы присылались сообщения на моб. телефон или же приходили по ICQ. Если кого это заинтересовало, пишите в комментариях.
Каззырно!
Класс. Большинство даже не знаю что такое XML-RPC. А вы уже создаете таки сервисы. Мне интересно, а можно реализовать такую вещь. Допустим когда приходят новые заявки что б приходила смска. Это вещь действительно будет очень удобно. Но насколько это реализуемо неизвестно.
Спасибо за отзыв. Оповещение о новых заявках через смс сделать можно. Тут всплывает следующая проблема: бесплатной отсылки смс через инет у оператора нету (Life Украина), отправка блокирована пока абонент не отошлет смс о разблокировке (KyivStar Украина), тот кто рассылает смс должен заключить некий договор, тем самым подтвердить что он не спаммер (МТС Украина). Как обстоят дела с российскими операторами я не знаю
То есть я бы с удовольствием реализовал подобный скрипит в рамках следующей статьи, если бы кто-то поделился информацией о способах бесплатной отправки сообщений через инет.
А как реализовать подобный скрипт, который не уведомляет о заявках по почте, а просто проверяет их наличие каждый час и подтверждает их сам?
А смысл? На бирже есть режим автоматического подтверждения заявок – в настройках ставится галка “Автоматический режим”.