В этой статье распишу этот парсер в двух вариантах его исполнения. Думаю, статья будет актуальна, т.к. старые парсеры перестали работать…В этой статье распишу этот парсер в двух вариантах его исполнения. Думаю, статья будет актуальна, т.к. старые парсеры перестали работать из-за изменений в коде страниц на passport.webmoney.ru
Итак, рассмотрим вариант функции, парсящий с исходника сервера webmoney:
# Вункция парсер #
function return_wmid($wm)
{
$purse = file_get_contents("http://passport.webmoney.ru/asp/certview.asp?purse=".$wm);
$parser = explode("WMID#",$purse);
$parser = substr($parser[1],0,12);
if(ereg("^[0-9]{12}$", $parser))
{
RETURN $parser;
}else{
RETURN FALSE;
}
}
# ! Функция парсер #
?>
Он устарел. Даже вернее не он устарел, а изменился исходный код сервера. Изменился незначительно, просто исчез символ #. Вот вариант в принципе исправленной функции:
# Вункция парсер #
function return_wmid($wm)
{
$purse = file_get_contents("http://passport.webmoney.ru/asp/certview.asp?purse=".$wm);
$parser = explode("WMID",$purse);
$parser = substr($parser[1],0,12);
if(ereg("^[0-9]{12}$", $parser))
{
RETURN $parser;
}else{
RETURN FALSE;
}
}
# ! Функция парсер #
?>
Сохраните в файл returnwmid.php и влейте на хост
Теперь, как её использовать:
1. В register.php ищем в коде $pemail=$_POST[\»pemail\»];
2. Рядом с кодом ищем $wmid=$_POST[\»wmid\»];
3. Меняем на:
$wmid=return_wmid($pemail);
функция вернёт нам WMID. Значит следом в HTML коде можно просто убрать код поля для ввода WMID
Функция старая, взял копипастом с МФС\’а да и влом было накидывать парсер снова. Работать будет до тех пор, пока WM не поменяют исходник снова. Но это не дело — получать WMID по номеру кошелька с такими трудами вообще глупо, в частности, когда мы тупо парсим с HTML кода, имейте в виду — WM когда-нить психанут и запретят функцией парсить у них код.
А сейчас разберём более совершенный вариант. Даже наверное более быстрый. Использовать file_get_contents не будем. На денвере вариант не прокатит (прокатит на свежих версиях денвера, где есть CURL)
Итак, мы имеем URL: https://passport.webmoney.ru/xml/XMLGetWMIDInfo.aspx
Ну на неё нам надо отправить POST запрос с номером кошелька. Запрос будет передавать наши параметры. Имеет вид он:
Отправить POST запрос нам поможет в данном случае CURL.
Распишем функцию (комментарии имеются)
$request="<request><purse>$purse</purse></request>"; //запрос
$url="https://passport.webmoney.ru/xml/XMLGetWMIDInfo.aspx"; //URL куда мы его посылаем
$ch = curl_init($url); //CURL запустись.Ниже мы его настроим…
curl_setopt($ch, CURLOPT_HEADER, 0); //заголовки не отправляем
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //вернём ответ
curl_setopt($ch, CURLOPT_POST,1); //запрос у нас POST а не GET
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); //запрос то POST — но тут мы зададим что мы что либо передаём
$result=curl_exec($ch); //результат курлятской работы
$xmlres = simplexml_load_string($result); //симпл принимай эстафету
$wmid=$xmlres->certinfo->wmids->row[wmid];
return $wmid;
}
Что мы использовали:
1. simpleXML (в php 5 он выродился и о чудо — мы его использовали, правда всего лишь один раз, разобрав полученные XML теги в массив)
2. CURL — отправка запроса (ну на хостах без php 5 и курла вообще не вариант жить, поэтому у всех это есть.
3. Голову — если голова не варит — пьём ягуар. Если же не помогло — опустошаем вторую банку. Если вообще не помогает — кидаем пять банок мне (можно 3, смотря в каком состоянии я) и голова заработает у меня и работать будет на Вас.
Да и кстати, в скрипте использовать так же, как и использовали функцию с парсером из кода.
Всё… Чуток попозже распишу побольше функций, а сейчас напоследок можем внести изменения в функцию с курлом, это на сладкое, кто захочет…
Порядок изменения:
1. Переименуем функцию в её коде (для тех кто в танке) можно просто заменить return_wmid на return_bl или return_goods или же return_bads.
2. Переименовали функцию — ищем строку:
Возник вопрос — нахера нам это? В это нам не нужно. Хотя если кто-то захочет замудрить что-либо — тогда пожалуйста. К примеру, запрет реги пользователям с претензией.Так вот для этого и распишу, что мы можем выудить из всех плясок с шаманским бубном.
Итак, строку выше мы можем поменять на:
тогда обозванная новым именем(!) функция будет возвращать нам не WMID по кошельку, а BL.
Для записей в арбитраже уже повеселее.
Для положительных (зелёненьких):
Ну и для отрицательных та же самая строка, только posclaimscount меняем на negclaimscount, соответственно, для вывода даты последней записи в арбитраже можем posclaimscount поменять на claimslastdate.
Ну для аттестата тоже не скучно. Строку, над которой в функции экспериментируем меняем на:
Так мы получим название аттестата, но увы, оно без заглавных букв. Тут уже ковыряйтесь сами.
Хотим тип аттестата? Да не проблема:
А далее полученный после функции результат просто через switch прогоните. Это пригодится:
<tid id="110">формальный</tid>
<tid id="120">начальный</tid>
<tid id="130">персональный</tid>
<tid id="135">продавца</tid>
<tid id="136">capitaller</tid>
<tid id="140">разработчика</tid>
<tid id="150">регистратора</tid>
<tid id="170">гаранта</tid>
<tid id="190">сервиса wmt</tid>
<tid id="200">сервиса wmt</tid>
<tid id="300">оператора</tid>
Ну а для инфы о ФИО уже посложнее будет, т.к. если у WMID не показывается в passport.webmoney.ru, значит пользователь запретил показывать свои ФИО, следовательно XML вернёт нам пустоту.
Картинки аттестатов можно также спарсить, хотя хз зачем они нужны. Поэтому расписывать не буду, догадаться можно. Подсказка: либо парсим картинки с XML запроса, либо по tid аттестата тупо выводим через тот же свитч.
И на сладенькое — https://passport.webmoney.ru/asp/certcard.asp?id=WMID,вместо WMID вписать свой.
Можно запарсить и сделать в виде визитной карточки без надписи \»информация о WMID\», ну это уже чтобы не мучаться с XML парсерами.
В общем то всё, надеюсь, статья оказалась информативной… Ещё одну интересную и более познавательную получите позже, когда я уже решу, что она того стоит…
Отправить комментарий
Вы должны быть зарегистрированы чтобы оставить комментарий.
Вы должны быть зарегистрированы чтобы оставить комментарий.