PDA

Просмотр полной версии : [Помогите!] Помогите пожалуйста с парсом


=PaLeTiZaToR=
10.09.2012, 17:54
Имеется сайт "фор гейм". Надо зайти на него и спарсить данные с загруженного списка аккаунтов в мемо. Все бы хорошо ,но почему то 2,3,4,5 и тд аккаунтам присваивается информация первого. ну выглядит это как то так


Аккаунт [Ссылки могут видеть только зарегистрированные и активированные пользователи];******
----------------
Point Blank - последний вход в игру: 17 марта 2012 в 23:30
RF Online - последний вход в игру: 1 февраля 2012 в 21:04
Aion - последний вход в игру: 5 октября 2011 в 20:24. <span><span>Оплачено до 4 июня 2012</span> года.


Аккаунт [Ссылки могут видеть только зарегистрированные и активированные пользователи];*******
----------------
Point Blank - последний вход в игру: 17 марта 2012 в 23:30
RF Online - последний вход в игру: 1 февраля 2012 в 21:04
Aion - последний вход в игру: 5 октября 2011 в 20:24. <span><span>Оплачено до 4 июня 2012</span> года.

Тут должны быть другие данные а берутся из первого.



Код захода и парса

procedure TForm1.Button1Click(Sender: TObject);
var
v,g,login,pass:string;
i:Integer;
SSLIO : TIdSSLIOHandlerSocketOpenSSL;
begin
//
SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create( id[Ссылки могут видеть только зарегистрированные и активированные пользователи] );
SSLIO.SSLOptions.Method := sslvSSLv3;
id[Ссылки могут видеть только зарегистрированные и активированные пользователи] := SSLIO;
id[Ссылки могут видеть только зарегистрированные и активированные пользователи]'Mozilla/5.0 (Windows; U; Windows NT 6.0; rv:1.9.2.11) Gecko/20101012 MRA 5.5 (build 02842) Firefox/3.6.11 GTB7.1 ( .NET CLR 3.5.30729; .NET4.0E)';
reg:=tregexpr.Create;
//

for I := 0 to memo2.lines.count -1 do //В мемо 2 будут строки с акками
begin
Login:= Copy(memo2.lines[i],1,Pos(';',memo2.lines[i])-1); //Копируем логин в "Login"
Pass:= Copy(memo2.lines[i],Pos(';',memo2.lines[i])+1,Length(memo2.lines[i])); //Копируем пароль в "Pass"

//Посылаем запрос на авторизацию
id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]'+Login+'&passwordField='+Pass+'&serviceId=0&jsonp&callback=jsonp123123');
//Отделяем аккаунты друг от дурга в мемо 1
memo1.lines.Add('Аккаунт '+Login+';'+Pass);
memo1.lines.Add('----------------');
//Переходим на главную страницу акка
s:=id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]');
//Переводим с каракуль на русский
setLength(c, length(s));
g:=utf8decode(c);
//Парсим какие игры есть на аккаунте
Reg.expression:='<p><a href="/subscription/service/(.*?).html">(.*?)</a> &mdash; последний вход в игру (.*?) </p>';
if reg.exec(g) then
repeat
form1.memo1.lines.Add(reg.Match[2]+' - последний вход в игру: '+reg.Match[3]);
until not Reg.ExecNext ;
end;
end;
end.


Добавил комментарии что бы было удобнее разобраться.
P.s вариант что программа авторизуется дважды под одними данными отпадает. данные со сниффера:

ht tps: //ru.4game.com:443/widgetjson/signin?&loginField=[Ссылки могут видеть только зарегистрированные и активированные пользователи]&passwordField=******&serviceId=0&jsonp&callback=jsonp123123

ht tps: //ru.4game.com:443/widgetjson/signin?&loginField=[Ссылки могут видеть только зарегистрированные и активированные пользователи]&passwordField=*******&serviceId=0&jsonp&callback=jsonp123123

Вопрос: В чем может быть проблема ?
Счас проверил , программа показывает в сниффере , что авторизуетс под вторыми данными , а на самом деле почему то получает опять страницу первого...

CyberNEŦik
10.09.2012, 18:41
у тебя там кукисы стоят на тру

=PaLeTiZaToR=
10.09.2012, 21:31
Проблема решилась добавлением в коне цикла c:=' ';