PDA

Просмотр полной версии : Нужна помощь


PuSh23
07.04.2011, 16:42
Вот решил написать бота для приложения вконтакте (тюряга). Вообщем я сделал так чтобы бот отправлял post запрос на сервер, получал ответ. Ответ я парсил. Например на кол-во папирос, рублей и т.п. С этим проблем не возникало. Но проблемы возникли в другом, в этом же запросе есть информация о победах над боссами, записанная так:
<playerWins>
<playerWin>
<bossId>1</bossId>
<droppedKeys>3</droppedKeys>
<winCount>12</winCount>
</playerWin>
<playerWin>
<bossId>2</bossId>
<droppedKeys>1</droppedKeys>
<winCount>1</winCount>
</playerWin>
</playerWins>

<bossId>1</bossId> - Это айди босса, <winCount>12</winCount> - колво побед данного босса. Мне необходимо кол-во побед над каждым боссов выводилось в label, но проблема в том что <winCount> везде одинаковый (Если бы они например писались <winCount1>, <winCount2>... то проблем бы у меня не возникло) Вообщем мне необходи помочь сделать так чтобы в каждом label'е выводилось кол-во побед над боссом, к примеру:
Кирпич: 12 (это <bossId>1</bossId>)
Сизый: 1 (это <bossId>2</bossId>)

Вот код как я получил запросы и попытался вывести победы:

procedure TForm1.Button5Click(Sender: TObject);
var
Http : Tid[Ссылки могут видеть только зарегистрированные и активированные пользователи]
CM : TidCookieManager;
Data : TStringList;
StrPage, UserID, UserName, pp, kp, : String;
i : integer;
begin
try
Http := TId[Ссылки могут видеть только зарегистрированные и активированные пользователи](Self);
Data := TStringList.Create;
CM := TidCookieManager.Create(Http);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := true;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := CM;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := true;

[Ссылки могут видеть только зарегистрированные и активированные пользователи]'109.234.156.250';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]'windows-1251,utf-8;q=0.7,*;q=0.7';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]'[Ссылки могут видеть только зарегистрированные и активированные пользователи]';

Data.Add('method=getInfo');
Data.Add('sig=4b4d194a083007aa538f49d2a0cd6b5c');
Data.Add('key=' + Edit2.Text);
Data.Add('user=' + Edit1.Text);
StrPage := [Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', Data);



finally
Data.Free;
CM.Free;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;



ListBox2.Items.Add('-Обновление статистики');
//Парсим Кол-во папирос
pp:=copy(StrPage,pos('<money>',StrPage)+length('<money>'),pos('</money>',StrPage)-pos('<money>',StrPage)-length('<money>'));
Label4.Caption:=pp;

//Парсим кирпича
kp:=copy(StrPage,pos('<bossId>1</bossId>',StrPage)+length('<bossId>1</bossId>'),pos('<bossId>1</bossId>',StrPage)-pos('<bossId>1</bossId>',StrPage)-length('<bossId>1</bossId>'));
kp:=copy(StrPage,pos('<winCount>',StrPage)+length('<winCount>'),pos('</winCount>',StrPage)-pos('<winCount>',StrPage)-length('<winCount>'));
Label21.Caption:=kp;

АзЕсмьЦарь
08.04.2011, 13:22
Странно, что программа вообще работает. На сколько я знаю у команды Copy - всего три параметра:
1) строка откуда копировать
2) с какой позиции
3) длина строки которую нужно скопировать
У тебя же этих параметров больше трёх. На да ладно - работает и фиг с ним.
Ну а непосредственно по вопросу могу посоветовать следующее. Благодаря уникальному ID босса - можно найти нужный кусок кода, дальше сместиться на нужную позицию - где идёт информация о победах и скопированное число поместить в свойство Caption у компонента Label. И всё это дело загнать в цикл, который будет выполняться до тех пор пока ID босса больше нуля - т.е. пока существует участок кода где можно скопировать нужную инфу.