Иногда может потребоваться определить этот небезызвестный показатель в своей программе.

Задавшись этим вопросом, полез смотреть, с каких страниц его можно спарсить. Первое, что попадается, это картинка, которая показывается при просмотре аттестата WebMoney (например, вот эта). Далее в заметке буду использовать wmid 000000000000 для примера. Можно и картинку распознать — не вопрос, но зачем так сложно?

Побродив немного по форумам и прочим ссылкам из выдачи, нашёл ещё пару возможностей определить WebMoney BL. Пара скриптов с https и, о чудо, простой скрипт, выдающий основную информацию о сертификате.

Итак, наша цель сводится к простой задаче парсинга html-страницы.

Что парсим? http://passport.webmoney.ru/asp/certcard.asp?id=000000000000 — вот ссылка. Зайдя на неё, видим информацию о: типе аттестата, фио, бизнес-уровне (тот самый BL), дате регистрации и количестве претензий. Мы спарсим только BL, но ничего не стоит потом изменить программу и для парсинга остальных значений.

Для простоты поставим на форму TIdHTTP, TEdit и TButton. В процедуре Button1Click создадим переменные:

var
 resp: string;
 bl, err: integer;

В resp получим код страницы:

 resp:=IdHTTP1.Get('http://passport.webmoney.ru/asp/certcard.asp?id='+Edit1.Text);

Теперь присмотримся к коду страницы: нужное нам значение бизнес-уровня находится сразу после [BL]:</span> и пробела. Чтобы получить это число, скопируем 10 символов после этого фрагмента и используем процедуру Val:

Val(Copy(resp ,Pos('[BL]:</span>',resp)+13,10), bl, err);

Если всё сработало правильно (то есть WebMoney не поменяли формат вывода того скрипта), то в bl окажется так нужный нам Business Level, а в err — 0, если длина BL 10 символов (что вряд ли возможно), 1 в случае ошибки или число от двух до десяти, которое показывает позицию первой «не цифры».

То есть, в случае err=1 мы имеем ошибку, иначе bl получен верно. Весь код:

procedure TForm1.Button1Click(Sender: TObject);
var
 resp: string;
 bl, err: integer;
begin
 resp:=IdHTTP1.Get('http://passport.webmoney.ru/asp/certcard.asp?id='+Edit1.Text);
 Val(Copy(resp ,Pos('[BL]:</span>',resp)+13,10), bl, err);
 if err<>1 then
 ShowMessage('WebMoney BL: '+inttostr(bl))
 else
 ShowMessage('error retrieving WebMoney BL');
end;

Порой ощутимо важно узнать рейтинг продавца, чтобы решить, стоит ли с ним связываться, покупать товар, или его миллионные обороты каждый день – выдумка. Да и в реальной жизни так: если покупаешь что-то дорогое, например, машину, всегда нужно читать будь то отзывы Hyundai от самих владельцев или тест-драйвы независимых фирм.

(c) crystalbit, http://parsers.info