Вот моя функция: Code: function Pars(st,st_begin,st_end:WideString):WideString; begin if pos(st_begin,st)<>0 then Delete(st,1,pos(st_begin,st)+length(st_begin)) else begin Pars:='not str pars'; exit; end; if pos(st_end,st)<>0 then Delete(st,pos(st_end,st),length(st)) else begin Pars:='not str pars'; exit; end; Pars:=st; end; вот сам ГЕТ запрос сразу после пост: Code: StrPars:=HTTP.Get('http://m.mail.ru/cgi-bin/gosearch?q_query='+form1.edit3.text); StrPars:=('</option><option value="0" >Входящие (.*?)</option></select>'); Delete(StrPars,1,pos('>',StrPars)); st:=copy(StrPars,1,pos('<',StrPars)-1); form1.Memo2.Lines.Add(Acc+';'+Pas + ' | ' +St); Дело в том что мне нужно спарсить количество сообщений по запросу: Code: http://m.mail.ru/cgi-bin/gosearch?q_query=[COLOR=Navy]@em.ea.com[/COLOR] Но дело в том что оно мне выводит вот с этой строки: StrPars:=('</option><option value="0" >Входящие (.*?)</option></select>'); в мой мемо Входящие (.*?) - в прямом смысле.... Точне оно не парсит со страницы. а тупо выводит Входящие (.*?)
А можно спросить? ЧТО ЭТО - "(.*?)". Лично на мой взгляд в данный момент это просто строка вида - "(.*?)" никак не кусок регулярного выражению. Если ты конечно прочитал регулярки и пытаешься спарсить регуляркой какое-то выражения без создания этой регулярки. Иначе я всё же я не понял, что это такое! Неужели так сложно написать код из 12 строк. Используя стандартные функции Windows? Code: function ParseInv(S : String): String; begin if Pos('Входящие (', S) <> 0 then begin Result := Copy(S, Pos('Входящие (', S) + 10, Length(S)); Result := Copy(Result, 0, Pos(')</option', Result) - 1); end else begin Result := 'ERROR'; end; end;
Во-первых надо авторизоваться через программу. Во-вторых посмотреть кодировку. P.S. Сами ничего не хотите делать как я понимаю!
а ты посмотрел, в какой кодировке тебе приходит ответ от сервера? Просто кириллистические символы могут прити в виде какозябр и естесственно ты не спарсишь ничего )) вставь мемо на форму и до строки Code: [B] StrPars:=('</option><option value="0" >Входящие (.*?)</option></select>');[/B] напиши Code: memo1.text := StrPas
Ну наверное надо поменять кодировку, тебе так не казалось никогда? Code: procedure ParseMessageMailRU; Login : String = ''; // логин Pass : String = ''; // пароль Domen : String = 'mail.ru'; // mail.ru, list.ru, bk.ru и т.д. var S : String; HTTP : TIdHTTP; Response : TStringStream; begin HTTP := TIdHTTP.Create(nil); HTTP.AllowCookies := True; HTTP.HandleRedirects := True; HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'; HTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; HTTP.Request.AcceptLanguage := 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'; Response := TStringStream.Create(''); try try Response.Clear; HTTP.Get('http://m.mail.ru/cgi-bin/auth?Login=' + Login + '&Password=' + Pass + '&Domain=' + Domen + '&level=1', Response); except end; if Pos('выход', Utf8ToAnsi(Response.DataString)) <> 0 then begin try Response.Clear; HTTP.Get('http://m.mail.ru/cgi-bin/gosearch', Response); except end; if Pos('tab">Папки', Utf8ToAnsi(Response.DataString)) <> 0 then begin S := Copy(Utf8ToAnsi(Response.DataString), Pos('tab">Папки', Utf8ToAnsi(Response.DataString)) + 12, Length(Utf8ToAnsi(Response.DataString))); S := Copy(S, 0, Pos(')</a></td', S) - 1); if S = '' then S := 'Всего входящих: 0' else S := 'Всего входящих: ' + S; MessageBox(0, PChar(S), 'Info', MB_OK + MB_ICONINFORMATION); end else begin MessageBox(0, 'Ошибка!', 'Error', MB_OK + MB_ICONSTOP); end; end else begin MessageBox(0, 'Авторизация не удалась :( ', 'Error', MB_OK + MB_ICONSTOP); end; finally FreeAndNil(HTTP); FreeAndNil(Response); end; end; P.S. 5 минут делов, когда включаешь голову и руки!