Оповещение о новых заявках в Sape

SAPE.RU XML-RPCSAPE.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 хэша можете воспользоваться полем:

Здесь будет отображать md5 хэш

Хочу заметить одну вещь, связанную с sape.get_messages(). Рассмотрим пример, допустим появилась новая заявка, наш скрипт выполняется по расписанию и генерирует письмо на эту заявку, спустя какое-то время (в этот же день) появляется еще заявка, скрипт выполняется вновь и уже генерирует письмо, в котором будут фигурировать обе заявки. Некрасиво, одна и та же заявка фигурирует в 2-х письмах, чтобы этого избежать скрипт проверяет “новизну” заявки :-)(строки 27-30). Если время ее появления приходится на предыдущие запуски скрипта, то она игнорируется (предполагаем, что на нее уже было сгенерировано письмо).

Заливаем скрипты из архива (см. ссылку в конце поста) на хостинг и задаем расписание запуска с помощью cron, указывая с какой частотой выполнять скрипт, я на своем хостинге настроил на выполнение через каждый час.

Добавляем в cron скрипт рассылки писем о новых заявках в SAPE

Готово! Скрипт будет отсылать на почту уведомления о появлении заявок за текущую дату. Можно при желании сделать так чтобы присылались сообщения на моб. телефон или же приходили по ICQ. Если кого это заинтересовало, пишите в комментариях.

Скачать скрипт

Комментарии:

  1. gooody

    Каззырно!

  2. Tolstyi

    Класс. Большинство даже не знаю что такое XML-RPC. А вы уже создаете таки сервисы. Мне интересно, а можно реализовать такую вещь. Допустим когда приходят новые заявки что б приходила смска. Это вещь действительно будет очень удобно. Но насколько это реализуемо неизвестно.

  3. Diz

    Спасибо за отзыв. Оповещение о новых заявках через смс сделать можно. Тут всплывает следующая проблема: бесплатной отсылки смс через инет у оператора нету (Life Украина), отправка блокирована пока абонент не отошлет смс о разблокировке (KyivStar Украина), тот кто рассылает смс должен заключить некий договор, тем самым подтвердить что он не спаммер (МТС Украина). Как обстоят дела с российскими операторами я не знаю :-(
    То есть я бы с удовольствием реализовал подобный скрипит в рамках следующей статьи, если бы кто-то поделился информацией о способах бесплатной отправки сообщений через инет.

  4. Truth Hunter

    А как реализовать подобный скрипт, который не уведомляет о заявках по почте, а просто проверяет их наличие каждый час и подтверждает их сам?

  5. Diz

    А смысл? На бирже есть режим автоматического подтверждения заявок – в настройках ставится галка “Автоматический режим”.

разметочные конусы