Доброго времени суток, недавно написал заметку о том, как можно определить находится ли сайт в той или иной бирже ссылок. После чего реализовал всё это дело в delphi написав небольшую утилиту проверяющую сайт в ротапост/ротабан и nolix.
Собственно, захотелось поработать и с сапой, мысля, была такая — авторизоваться в бирже и искать там проверяемый сайт. Сразу же пришла в голову мысль, что у сапы должна быть реализована система АПИ, по работе с биржей. Полез в гугл, вбил запрос и очутился на api.sape.ru/xmlrpc/ . Где говорится о том, что можно использовать xml-rpc. Ну хорошо, только вот решения своей проблемы, да и простейших примеров работы с интерфейсом xml-rpc sape на delphi нарыть мне так и не удалось. А с xml-rpc я, скажем так не особо дружу .
Первым делом скачал библу (название не помню) для delphi которая реализовывала xml-rpc, но поработав с ней, понял — что это очень глючная вещь, да и к тому же много чего не реализовано. Например, не понял, как работать с куками. Лазил в исходниках библиотеки, что-то химичил, но так и не получилось даже авторизоваться в sape (метод ‘sape.login‘) — тупею наверное =(.
Тупил я полдня с этим xml-rpc, потом забил. Но сегодня опять решил этим заняться и о чудо, получилось отправить запрос к sape используя idhttp без левых библиотек + реализовать всё что мне нужно (работа с куками и разбор ответа, с чем с собственно я сейчас и поделюсь).
Авторизация в sape и получение баланса
Пока что мне удалось реализовать отправку простых запросов, такие как авторизация, получение баланса, сайтов текущего пользователя и т.п. Но, к сожалению, не нашёл нужного метода для поиска площадок в системе = ( по-моему, его вообще там нету. Если я не прав, то прошу сообщить мне. В общем, переходим к кодинку.
На форму кидаем idhttp, 2 memo и 2 батона. В первом текстовом поле будет содержаться ответ сервера, во втором будем формировать запросы (для теста необходимых методов…). В обработчик onclick первой кнопки пишем следующее
var s:TStringStream; begin ts:= TStringList.Create; ts.add('<?xml version="1.0"?>'); ts.add('<methodCall>'); ts.add('<methodName>sape.login</methodName>'); ts.add('<params>'); ts.add('<param><value><string>ЗДЕСЬ ВАШ ЛОГИН</string></value></param>'); ts.add('<param><value><string>ЗДЕСЬ ВАШ ПАРОЛЬ В MD5 ХЕШЕ</string></value></param>'); ts.add('<param><value><boolean>1</boolean></value></param>'); ts.add('</params></methodCall>'); s:=TStringStream.Create(ts.text); IdHTTP1.Request.Accept:= '*/*'; IdHTTP1.Request.ContentType:= 'text/xml'; IdHTTP1.Request.Connection:= 'Keep-Alive'; memo1.lines.text:=IdHTTP1.Post('http://api.sape.ru/xmlrpc/',s); s.Free;
Собственно что тут я накарябал? всё просто, сначала составляем нужные данные в xml, пихаем всё это дело в stringlist а потом передаём все данные в stringstream. Честно говоря, не понимаю, зачем это шаманство, но когда попробовал отправить просто составленный запрос, сапа выдала ерор, мол, неправильно создан запрос. Так что вот так ) Важно — пароль нужно передавать в качестве хеша md5, для преобразования пароля в md5 можно использовать готовые библы, но я воспользовался онлайн сервисом. Дальше мы с помощью инди передаём данные на интерфейс xml-rpc сапы (api.sape.ru/xmlrpc/). Ответ получим в первое memo. Так же система частенько выдаёт ероры (если слишком часто подключатся), как вариант можно просто делать реконнект инета или же прикрутить к idhttp прокси, я беру бесплатные прокси на best-proxies.ru, там же можно купить и анонимные прокси которые подойдут лучше всего.
Вторая же кнопочка у нас будет содержать код, который, по сути, аналогичен первому коду, с тем лишь отличием, что xml данные будут браться из memo а не из памяти
var s:TStringStream; begin ts.AddStrings(memo2.Lines); s:=TStringStream.Create(ts.text); memo1.lines.text:=utf8toansi(IdHTTP1.Post('http://api.sape.ru/xmlrpc/',s)); ts.Clear; s.Free;
Вот и всё, теперь компилим, запускаем программу и играемся с различными методами, которые можно посмотреть тут: http://api.sape.ru/xmlrpc/ . К слову, переменная ts делаем глобальной переменной
var Form1: TForm1; ts:tstringlist; implementation
Теперь вы узнали, как работать с xml-rpc sape на delphi, дальше можно написать какие-нибудь утилитки. И ещё раз — если кто знает, как через xml-rpc осуществить поиск определённого сайта в системе, то прошу отписаться. На этом у меня всё, удачи