Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
получал HTML-код страницы своего города (Печора - city/legacy/3970) с сайта GISMETEO и выискивал на ней температуру. в общем, делал информер. Может, что-то возмёшь для работы. Если короче - искал нужные цифры в коде.
Код:
program GisMeteo;
{$R dialog.res}
function SetTimer(hWnd:LongWord;nIDEvent,uElapse:LongWord;lpTimerFunc:Pointer):LongWord;stdcall;external 'user32.dll' name 'SetTimer';
function KillTimer(hWnd:LongWord;uIDEvent:LongWord):LongBool;stdcall;external 'user32.dll' name 'KillTimer';
function InternetOpen(lpszAgent:PAnsiChar;dwAccessType:LongWord;lpszProxy,lpszProxyBypass:PAnsiChar;dwFlags:LongWord):Pointer;stdcall;external 'wininet.dll' name 'InternetOpenA';
function InternetConnect(hInet:Pointer;lpszServerName:PChar;nServerPort:Word;lpszUsername:PChar;lpszPassword:PChar;dwService:LongWord;dwFlags:LongWord;dwContext:LongWord):Pointer;stdcall;external 'wininet.dll' name 'InternetConnectA';
function HttpOpenRequest(hConnect:Pointer;lpszVerb:PChar;lpszObjectName:PChar;lpszVersion:PChar;lpszReferrer:PChar;lplpszAcceptTypes:PAnsiChar;dwFlags:LongWord;dwContext:LongWord):Pointer;stdcall;external 'wininet.dll' name 'HttpOpenRequestA';
function HttpSendRequest(hRequest:Pointer;lpszHeaders:PChar;dwHeadersLength:LongWord;lpOptional:Pointer;dwOptionalLength:LongWord):LongBool;stdcall;external 'wininet.dll' name 'HttpSendRequestA';
function HttpQueryInfo(hRequest:Pointer;dwInfoLevel:LongWord;lpvBuffer:Pointer;var lpdwBufferLength:LongWord;var lpdwReserved:LongWord):LongBool;stdcall;external 'wininet.dll' name 'HttpQueryInfoA';
function InternetReadFile(hFile:Pointer;lpBuffer:Pointer;dwNumberOfBytesToRead:LongWord;var lpdwNumberOfBytesRead:LongWord):LongBool;stdcall;external 'wininet.dll' name 'InternetReadFile';
function InternetCloseHandle(hInet:Pointer):LongBool;stdcall;external 'wininet.dll' name 'InternetCloseHandle';
procedure PostQuitMessage(nExitCode:Integer);stdcall;external 'user32.dll' name 'PostQuitMessage';
function SendMessage(hWnd:LongWord;Msg:LongWord;wParam:LongInt;lParam:LongInt):LongInt;stdcall;external 'user32.dll' name 'SendMessageA';
function SetWindowText(hWnd:LongWord;lpString:PAnsiChar):LongBool;stdcall;external 'user32.dll' name 'SetWindowTextA';
function DialogBoxParam(hInstance:LongWord;lpTemplateName:PChar;hWndParent:LongWord;lpDialogFunc:Pointer;dwInitParam:LongInt):Integer;stdcall;external 'user32.dll' name 'DialogBoxParamA';
function DialogBox(hInstance:LongWord;lpTemplate:PChar;hWndParent:LongWord;lpDialogFunc:Pointer):Integer;
begin
Result:=DialogBoxParam(hInstance,lpTemplate,hWndParent,lpDialogFunc,0);
end;
//----- глобальные константы и переменные --------------------------------------
var Handle:LongWord;
hInet,hCon,hReq:Pointer;
Status,StatusSize,Index:LongWord;
bytes,b,ps:Cardinal;
a,c:Byte;
tst,rst:string;
//----- функция обработки сообщений --------------------------------------------
function DlgProc(wnd:LongWord;msg:integer;wparam:LongInt;lparam:LongInt):LongInt;stdcall;
begin
case msg of
3: SendMessage(wnd,$0112,61472,0);
$0110:
begin
SetTimer(wnd,1,60000,nil);
end;
$0113:
begin
//SetWindowText(wnd,'загрузка');
bytes:=1;
hInet:=InternetOpen('My Agent',0,nil,nil,0);
hCon:=InternetConnect(hInet,'gismeteo.ru',80,nil,nil,3,0,0);
hReq:=HttpOpenRequest(hCon,'GET','city/legacy/3970','HTTP/1.0',nil,nil,$00400000 or $80000000,0);
HttpSendRequest(hReq,'',0,nil,0);
StatusSize:=SizeOf(Status);
Index:=0;
HttpQueryInfo(hReq,$20000000 or 19,@Status,StatusSize,Index);
ps:=1;
b:=1;
rst:='';
while(b>0)do
begin
SetLength(rst,Cardinal(Length(rst))+bytes);
InternetReadFile(hReq,@rst[Ps],bytes,b);
Inc(Ps,b);
end;
InternetCloseHandle(hReq);
InternetCloseHandle(hCon);
InternetCloseHandle(hInet);
tst:='';
Delete(rst,1,Pos('MG.Media.ad_top.start',rst)-1);
Delete(rst,Pos('new adfox',rst),Length(rst)-Pos('new adfox',rst));
a:=1;
c:=0;
while(a=1)do//and(c<8)do
begin
if(Pos('data-air=',rst)=0)then a:=0;
if(Pos('data-air=',rst)<>0)then
begin
inc(c);
Delete(rst,1,Pos('data-air=',rst)+Length('data-air='));
if(c mod 2=1)then tst:=tst+Copy(rst,1,Pos('"',rst)-1)+#176+#32;
end;
end;
Delete(tst,Length(tst),1);
SetWindowText(wnd,PChar(tst));
end;
$0002,$0010:
begin
KillTimer(Handle,1);
PostQuitMessage(0);
Result:=0;
Exit;
end;
end;
Result:=0;
end;
begin
DialogBox(hInstance,'MAIN_WINDOW',0,@DlgProc);
end.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|