Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 21:50   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию Разбор таблицы на сайте 2ip.ru

всем привет!

Как правельно разобрать такие данные?
Код HTML:
<div id="content" class="wide-column">
	<div class="ip-info"><div class="ip-info-entry">
		<div class="ip" >
<span>Ваш IP адрес:</span> <big>93.125.26.32</big>		
<table>
<tr><th>Имя вашего компьютера:</th><td>
<img src="http://img.2ip.ru/icon-pcname.png"  alt="" />93.125.26.32</td></tr>
<tr><th>Операционная система:</th><td>
<img alt="Microsoft Windows XP" src="/images/os/winxp.png"/>Microsoft Windows XP</td></tr>

<tr><th>Ваш браузер:</th><td>
<img  alt="" src="/img/Opera.png"/>Opera 11.00</td></tr>

<tr><th>Откуда вы:</th><td>
<img alt="Belarus" src="/img/flags/BY.gif"/>Belarus<</td></tr>
<tr><th>Ваш провайдер:</th><td>
<img  src="/isp_logos/262520_favicon.ico" alt=""/>
<a href="">
AltoLan </a></td></tr>
		
<tr><th>Прокси:</th><td>
<img src="http://img.2ip.ru/proxy.png"  alt="" />Не используется</td>
</tr>	
     </table>
   </div>
</div>
получаю все это так:
получение текста межде тегами:
Код:
function ParseStr(str, sub1, sub2: string): string;
var
  st, fin: Integer;
begin
  st := Pos(sub1, str);
  if st > 0 then
  begin
    str := Copy(str, st + length(sub1), length(str) - 1);
    st := 1;
    fin := Pos(sub2, str);
    Result := Copy(str, st, fin - st);
    str := Copy(str, fin + length(sub2), length(str) - 1);
  end;
end;
код:
Код:
unit GetDataThreadUnit;

interface

uses
  Classes,Windows,IdHTTP,SysUtils;

type
  TGetDataThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

const
  WhoIsHost='http://2ip.ru';

implementation

uses MainUnit,MiscUnit;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TGetDataThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TGetDataThread }

procedure TGetDataThread.Execute;
var
  http:TidHTTP;
  ReturnData:string;
  Valid:Integer;
begin
  http:=TidHTTP.Create(nil);
  try
  ReturnData:=Utf8ToAnsi(http.Get(WhoIsHost));

  //IP adress
  Valid:=AnsiPos('Ваш IP адрес:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserIPEdit.Text:=ParseStr(ReturnData,'<big>','</big>')
  end else
  begin
  MainForm.UserIPEdit.Text:='Не удалось получить данные';
  end;

  //domain name
  Valid:=AnsiPos('Имя вашего компьютера:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserDomainNameEdit.Text:=ParseStr(ReturnData,'icon-pcname.png"  alt="" />','</td>');
  end else
  begin
  MainForm.UserDomainNameEdit.Text:='Не удалось получить данные';
  end;

  //User OS
  Valid:=AnsiPos('Операционная система:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserOSEdit.Text:=ParseStr(ReturnData,'.png"/>','</td>');
  end else
  begin
  MainForm.UserOSEdit.Text:='Не удалось получить данные';
  end;

  //User from
  Valid:=AnsiPos('Откуда вы:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserFromEdit.Text:=ParseStr(ReturnData,'>','</a></td>');
  end else
  begin
  MainForm.UserFromEdit.Text:='Не удалось получить данные';
  end;

  //User inthernet provider
  Valid:=AnsiPos('Ваш провайдер:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserInetProviderEdit.Text:=ParseStr(ReturnData,'">','</a>&nbsp;');
  end else
  begin
  MainForm.UserInetProviderEdit.Text:='Не удалось получить данные';
  end;

  //user allow proxy server
  Valid:=AnsiPos('Прокси:',ReturnData);
  if not (Valid = 0) then
  begin
  MainForm.UserUseProxyEdit.Text:=ParseStr(ReturnData,'proxy.png"  alt="" />','</td></tr></table>');
  end else
  begin
  MainForm.UserUseProxyEdit.Text:='Не удалось получить данные';
  end;
  finally
  FreeAndnil(http);
  end;
end;
Получить свой интернет IP получается а вот осталтные данные из <table> </table> я не знаю как..

результат всего этого можно глянуть в примере который прикреплён к сообщению...

если нужен точный рельтат, то программа может скопировать всё что получила в буфер обмена..

P.S. exe ужат upx'ом если что.
VirusTotal Report
Вложения
Тип файла: zip MyInternetIP.zip (500.7 Кб, 26 просмотров)
Человек_Борща вне форума Ответить с цитированием
Старый 23.01.2011, 23:46   #2
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

Код:
function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp,ss:string;
begin
  Memo1.Clear;
  tmp:=UTF8Decode(idhttp1.Get('http://2ip.ru/'));
  tmp:=Pars('<div class="ip-info-entry">',tmp,'<script type="text/javascript">');
  Memo1.Lines.Add('Ваш IP адрес: '+Pars('<big>',tmp,'</big>'));
  Memo1.Lines.Add('Имя вашего компьютера: '+Trim(Pars('<img src="http://img.2ip.ru/icon-pcname.png"  alt="" />',tmp,'</td>')));
  Memo1.Lines.Add('Операционная система: '+trim(pars('<td>',Pars('<th>Операционная система:</th>',tmp,'<th>Ваш браузер:</th>'),'</td>')));
  Memo1.Lines.Add('Ваш браузер: '+trim(pars('.png"/>',Pars('<th>Ваш браузер:</th>',tmp,'<th>Откуда вы:</th>'),'</td>')));
  Memo1.Lines.Add('Откуда вы: '+pars('<img alt="',Pars('<th>Откуда вы:</th>',tmp,'src="'),'"'));
  Memo1.Lines.Add('Прокси: '+trim(pars('proxy.png"  alt="" />',tmp,'</td>')));
end;
кою даже не смотрел, вот мой говнокод парса с 2ip.ru
dosha вне форума Ответить с цитированием
Старый 24.01.2011, 02:10   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

примного благодарен!!!! Работает! +

вопрос решён!
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить столбец из таблицы на сайте... 1221 Работа с сетью в Delphi 8 22.11.2010 16:58
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
разбор строк Djeka(c) Общие вопросы Delphi 20 13.09.2010 18:09
Разбор dll PanGolin Фриланс 13 26.05.2008 01:56