Думаю все знают про биржу ссылок 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'; } } |
Все. Успехов вам на ниве линкоторговли…
Здорово а я и не знал, что можно через XML-RPC.
У SAPE видимо доходы перевалили… легализвались.
Что будет если выбрать “Не резидент России”. Не будет ли проблем с выводом денег?
Вывести можно будет только на WebMoney (WMR или WMZ). Другие формы рассчетов будут недоступны.
С текущей версией не работает. пишет not well formed.
Наверно поменяли что-то
А подскажите как работать с sape.get_messages все перепробовал, но ничего не получилось!
Привет. Пришли, пожалуйста, библиотеку The Incutio XML-RPC Library for PHP на адрес vovanmozg@gmail.com. Не могу скачать с официального сайта, гугл тоже не помог.
аааа….афигитительно…
Я даже и не подозревал, что у сапы есть доступ такой…
XML-RPC даже не знал что эт такое…а оказалось проще пареной репы…Автор спасибо тебе…
кста есть один вопрос: А возможно вообще с помощью этой штуки редактировать допустим список ссылок оптимизатора…т.е. посылать запросы на изменение чего-то в акаунте?
было бы ваще круто…
–
Ещё раз респект…эт лучше и проще, чем парсить html
Хех интересненько, а почему CURL вы считаете дырявым?
Не я, а хостер, который просто не хотел его ставить…
Спасибо за готовое решение :)
Очень помогло.
[...] тому же у Сапы есть вкусный XML-RPC интерфейс, о котором я уже писал. Вот и пришло его время [...]
Цели
Автомобиль
В процессе
Планштный ПК
В процессе
Разделы
Популярные записи
Свежие комментарии
Архив
Друзья