Главная Используем XML-RPC для работы с SAPE и пара слов про cookie

Используем XML-RPC для работы с SAPE и пара слов про cookie

Раздел: PHP, Sape, XML, 4 мая 2008 12 комментариев

Думаю все знают про биржу ссылок sape.ru. Кто-то знает что такое XML-RPC (кто не знает, прошу сюда и сюда). И лишь немногие знают, что с Сапой можно работать через XML-RPC-интерфейс.

Интерфейс подробно описан тут. Особенностью работы является необходимость получать, хранить и передавать cookie на протяжении все работы.

Этот момент у меня вызвал пару трудностей. Библиотека с которой я работаю (The Incutio XML-RPC Library for PHP) не поддерживает такую возможность. Можно, конечно, работать через cURL. Но, в силу дырявости этого модуля, он на хостинге не стоит.

Надо искать выход.

Пара слов про cookie

Все общение между браузером и сервером происходит посредством заголовков. В частности, чтобы установить cookie, сервер посылает такой заголовок (в самом просто случае):

1.
Set-Cookie: NAME=VALUE

Теперь браузер, получив такой заголовок, при каждом запросе к серверу будет посылать заголовок:

1.
Cookie: NAME=VALUE

В случае нескольких cookie, все выглядит так.

Сервер:

1.
2.
Set-Cookie: NAME1=VALUE1
Set-Cookie: NAME2=VALUE2

Браузер

1.
Cookie: NAME1=VALUE1; NAME2=VALUE2

Значит нам нужно сделать 2 вещи: поймать заголовки с cookie, запомнить их и посылать в заголовках при каждом запросе.

Открываем файл IXR_Library.inc.php, находим строку 460, после var $timeout; дописываем var $cookie = array();

1.
2.
3.
4.
var $timeout;
var $cookie = array();
// Storage place for an error message
var $error = false;

Тут будем хранить cookie.

Далее нужно их поймать. Идем на 521 строку:

1.
2.
3.
if (trim($line) == '') {
	$gettingHeaders = false;
}

Перед этим добавляем:

1.
2.
3.
4.
5.
6.
7.
// check cookie
if (strstr($line, 'Set-Cookie:') !== false) {
	$tmp = explode(': ', $line);
	$tmp = explode(';', $tmp[1]);
 
	$this->cookie[] = $tmp[0];
}

Знаю, что криво, что надо через рег-экспы. Не суть :)

Далее передача cookie, строка 492, ищем $request .= “User-Agent: {$this->useragent}$r”;. После нее добавляем передачу cookie. Должно получится так:

1.
2.
3.
4.
5.
$request .= "User-Agent: {$this->useragent}$r";
if (count($this->cookie) > 0) {
	$request .= "Cookie: " . implode('; ', $this->cookie) . "$r";
}
$request .= "Content-length: {$length}$r$r";

Все. Можно работать.

Пример

Авторизуемся и получаем список площадок:

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.
require('IXR_Library.inc.php');
 
// Создаем xml-rpc клиента
$ljClient = new IXR_Client('www.sape.ru', '/api_xmlrpc.php');
 
// Посылаем запрос
if (!$ljClient->query('sape.login', 'Ваш логин', md5('Ваш пароль'), true)) {
	echo 'Ошибка запроса ['.$ljClient->getErrorCode().'] '.$ljClient->getErrorMessage();
}
else {
	// Получаем ответ
	$ljResponse = $ljClient->getResponse();
	if ($ljResponse == 1) {
		// Посылаем еще запрос
		if (!$ljClient->query('sape.get_sites')) {
			echo 'Ошибка запроса ['.$ljClient->getErrorCode().'] '.$ljClient->getErrorMessage();
		}
		else {
			// Получаем ответ
			$ljResponse = $ljClient->getResponse();
			print_r($ljResponse);  // <- тут будет массив с описание всех площадок
		}
	}
	else {
		echo 'Bad response';
	}
}

Все. Успехов вам на ниве линкоторговли…

Смотрите также:

Теги:

12 комментариев

  1. LiveStalker пишет:

    Здорово а я и не знал, что можно через XML-RPC.

  2. WEB-мастер пишет:

    У SAPE видимо доходы перевалили… легализвались.
    Что будет если выбрать “Не резидент России”. Не будет ли проблем с выводом денег?

    1. Knave пишет:

      Вывести можно будет только на WebMoney (WMR или WMZ). Другие формы рассчетов будут недоступны.

  3. Anonymous пишет:

    С текущей версией не работает. пишет not well formed.

    1. Knave пишет:

      Наверно поменяли что-то

  4. WayMan пишет:

    А подскажите как работать с sape.get_messages все перепробовал, но ничего не получилось!

  5. Вован пишет:

    Привет. Пришли, пожалуйста, библиотеку The Incutio XML-RPC Library for PHP на адрес vovanmozg@gmail.com. Не могу скачать с официального сайта, гугл тоже не помог.

  6. EnShTeIn пишет:

    аааа….афигитительно…
    Я даже и не подозревал, что у сапы есть доступ такой…
    XML-RPC даже не знал что эт такое…а оказалось проще пареной репы…Автор спасибо тебе…
    кста есть один вопрос: А возможно вообще с помощью этой штуки редактировать допустим список ссылок оптимизатора…т.е. посылать запросы на изменение чего-то в акаунте?
    было бы ваще круто…

    Ещё раз респект…эт лучше и проще, чем парсить html

  7. Михаил пишет:

    Хех интересненько, а почему CURL вы считаете дырявым?

    1. Knave пишет:

      Не я, а хостер, который просто не хотел его ставить…

  8. ibabushka пишет:

    Спасибо за готовое решение :)
    Очень помогло.

  9. [...] тому же у Сапы есть вкусный XML-RPC интерфейс, о котором я уже писал. Вот и пришло его время [...]

© 2008–2010 Копилефт и все такое...