@
akissoftware özel mesaj ile sormanıza lüzum yok, buradan daha özel cevap da yazabiliriz... Merak eden herkese faydası olsun...
*
Delphi 7 konusunda sıkıntı yaşamışlar. Bu nedenle
WinInet üzerinden
herhangi bir VCL kullanmadan web sorgu ve parse örneğidir.
* Bu şekilde tüm olası alternatif Web Sorgu örneklerini de bir başlıkta toplamış olduk...
Uses WinInet;
Type TDegerler = Record
highPrice, lowPrice : String;
End;
function ETHBTC: TDegerler;
Const
Url = 'https://api.binance.com/api/v3/ticker/24hr?symbol=ETHBTC';
var
aStream : TStringStream;
hService : HINTERNET;
hSession : HINTERNET;
lpBuffer : array[0..1023] of Byte;
dwBytesRead : DWORD;
dwBytesAvail : DWORD;
dwTimeOut : DWORD;
Sessionname : String;
aResponse : String;
aSrc, aTemp : String;
begin
Result := Default( TDegerler );
// Browse Url Section
Sessionname := 'ARMAN_Session_' + DateTimeToStr(now);
hSession := InternetOpen( PWideChar(Sessionname), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
if not Assigned(hSession) then Exit;
try
hService := InternetOpenUrl(hSession, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if hService = nil then
Exit;
aStream := TStringStream.Create;
try
dwTimeOut := 60000; // a minute
InternetSetOption(hService, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
if InternetQueryDataAvailable(hService, dwBytesAvail, 0, 0) then
while ( InternetReadFile(hService, @lpBuffer[0], SizeOf(lpBuffer), dwBytesRead) )
and ( dwBytesRead <> 0 )
do aStream.WriteBuffer(lpBuffer[0], dwBytesRead);
aStream.Position := 0;
aResponse := aStream.DataString;
finally
InternetCloseHandle(hService);
aStream.Free;
end;
finally
InternetCloseHandle(hSession);
end;
if pos('{"code":', aResponse) = 1 then Exit; // Error occurs...
// Parse Section
aTemp := aResponse;
aSrc := '"lowPrice":"';
if Pos(aSrc, aTemp) > 0 then begin
System.Delete(aTemp, 1, Pos(aSrc, aTemp) + Length(aSrc)-1 );
Result.lowPrice := Copy( aTemp, 1, Pos('"', aTemp ) -1 );
end;
aTemp := aResponse;
aSrc := '"highPrice":"';
if Pos(aSrc, aTemp) > 0 then begin
System.Delete(aTemp, 1, Pos(aSrc, aTemp) + Length(aSrc)-1 );
Result.highPrice := Copy( aTemp, 1, Pos('"', aTemp ) -1 );
end;
end;
Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
var
aDegerler : TDegerler;
begin
aDegerler := ETHBTC;
Showmessage( 'Low : ' + aDegerler.lowPrice + ' High : ' + aDegerler.highPrice );
end;