Size aşağıdaki şekilde bir örnek hazırladım.
Deneyip içerik kontrolünden sonra (altın fiyatları mayıs 2006'da garip seyretmiş ya da veride sorun var) kodlarınızda revizyona gitmek de isteyebilirsiniz memnunum kalsın de diyebilirsiniz, tercih sizin.
Denemek için forma bir memo ve bir button koymanız kafi..
Deneyip içerik kontrolünden sonra (altın fiyatları mayıs 2006'da garip seyretmiş ya da veride sorun var) kodlarınızda revizyona gitmek de isteyebilirsiniz memnunum kalsın de diyebilirsiniz, tercih sizin.
uses System.Net.HttpClientComponent,
System.Net.HttpClient,
System.JSON,
System.Generics.Collections;
type
tGoldInfo = record
kur : currency;
date : string;
end;
tGoldArray = array of tGoldInfo;
function FetchGoldExchange( aDay:Integer = 1 ): tGoldArray;
const
LUrlFmt = 'https://altin.in/grafikur.asp?did=flash_grafik'
+ '&ca=1&islem=gunluk&sa=sat&kur=GA&banka=altin&k=&gun=%d';
var
LResponse : IHTTPResponse;
LText : String;
LJSONObject : TJSONObject;
LKurObject : TJSONObject;
LSatisArray : TJSONArray;
LTarihArray : TJSONArray;
i : Integer;
begin
finalize(result);
with TNetHTTPClient.Create(nil) do
try
LResponse := Get( format(LUrlFmt, [aDay]) );
if LResponse.StatusCode = 200 then
begin
LText := LResponse.ContentAsString;
if ( pos('{kur:', LText) > 0 ) then
begin
System.Delete(LText, 1, pos('{kur:', LText)-1 );
if pos( ';graf.yarat', LText ) > 0 then
begin
LText := Copy(LText, 1, pos(';graf.yarat', LText)-1 );
// JSON Format düzeltme... (başlıklar çift tırnak içine alınmalı...)
LText := StringReplace( LText, 'kur', '"kur"', [] );
LText := StringReplace( LText, 'satis', '"satis"', [] );
LText := StringReplace( LText, 'tarih', '"tarih"', [] );
// JSON parse et
LJSONObject := TJSONObject.ParseJSONValue(trim(LText)) as TJSONObject;
if LJSONObject <> nil then
try
LKurObject := LJSONObject.FindValue('kur') as TJSONObject;
if LKurObject <> nil then
begin
LSatisArray := LKurObject.FindValue('satis') as TJSONArray;
LTarihArray := LKurObject.FindValue('tarih') as TJSONArray;
for i := 0 to LTarihArray.Count-1 do
begin
SetLength(result, length(result)+1);
With Result[ high(result) ] do
begin
kur := TJSONNumber( LSatisArray.items[i] ).AsDouble;
date := LTarihArray.items[i].Value;
end;
end;
end;
finally
LJSONObject.Free;
end;
end
else
ShowMessage('Geçerli bir JSON bölümü bulunamadı.');
end;
end else
begin
MessageDlg('Failed...' + sLineBreak + LResponse.ContentAsString,
TMsgDlgType.mtError, [mbAbort], 0 );
end;
finally
free;
end;
end;
// Örnek kullanım
procedure TForm1.BitBtn1Click(Sender: TObject);
var
LResult : tGoldArray;
i : Integer;
begin
LResult := FetchGoldExchange( 7040 );
// Memo'yu dolduralım...
if Length(LResult) > 0 then
begin
Memo1.Lines.Clear;
Memo1.Lines.BeginUpdate;
for i := Low(LResult) to High(LResult)
do
Memo1.Lines.Add(
format( '%20s : %10s', [ LResult[i].date,
format('%0.4f', [LResult[i].kur]) ]) );
Memo1.Lines.EndUpdate;
end;
Finalize( LResult ); // Array boşalt..
end;
Denemek için forma bir memo ve bir button koymanız kafi..
Saygılarımla
Muharrem ARMAN

Muharrem ARMAN


