Delphi ดึง JSON ราคา bitcoin จาก API bitstamp.net/api
วันนี้มีโจทย์จาก พี่ๆคนเขียน Delphi ว่าอยากจะดึงข้อมูลจาก Bitstamp ด้วย Delphi ต้องทำอย่างไร ด้วย HTTPNetClient


ผมจึงเข้าไปดูเว็บต้นทางแล้วก็พบว่า มี api document อยู่ https://www.bitstamp.net/api/#ticker โดยโจทย์คือดึง ticker

รูปแบบการใช้คือ https://www.bitstamp.net/api/v2/ticker/{currency_pair}/
โดย {currency_pair} คือ parameter ที่เราต้องระบุส่งไป โดยเลือกซักตัวจาก รายการด้านล่าง ในกรณีนี้ผมจะเลือก btcusd หรือ ราคา bitcoin เป็น Us Dollar นั่นเอง
btcusd, btceur, btcgbp, btcpax, gbpusd, gbpeur, eurusd, xrpusd, xrpeur, xrpbtc, xrpgbp, ltcbtc, ltcusd, ltceur, ltcgbp, ethbtc, ethusd, etheur, ethgbp, ethpax, bchusd, bcheur, bchbtc, paxusd, xlmbtc, xlmusd, xlmeur, xlmgbp, linkusd, linkeur, linkgbp, linkbtc, omgusd, omgeur, omggbp, omgbtc, usdcusd, usdceur, btcusdc, ethusdc, eth2eth, aaveusd, aaveeur, aavebtc, batusd, bateur, umausd, umaeur, daiusd, kncusd, knceur, mkrusd, mkreur, zrxusd, zrxeur, gusdusd, algousd, algoeur, algobtc, audiousd, audioeur, audiobtc, crvusd, crveur, snxusd, snxeur, uniusd, unieur, unibtc, yfiusd, yfieur, compusd, compeur, grtusd, grteur, lrcusd, lrceur, usdtusd, usdteur, usdcusdt, btcusdt, ethusdt, xrpusdt, eurteur, eurtusd, manausd, manaeur, maticusd, maticeur, sushiusd, sushieur, chzusd, chzeur, enjusd, enjeur, hbarusd, hbareur, alphausd, alphaeur, axsusd, axseur, sandusd, sandeur, storjusd, storjeur, adausd, adaeur, adabtc, fetusd, feteur, sklusd, skleur, slpusd, slpeur, sxpusd, sxpeur, sgbusd, sgbeur, avaxusd, avaxeur, dydxusd, dydxeur, ftmusd, ftmeur, shibusd, shibeur, ampusd, ampeur, ensusd, enseur, galausd, galaeur, perpusd, perpeur, wbtcbtc, ctsiusd, ctsieur, cvxusd, cvxeur, imxusd, imxeur, nexousd, nexoeur, antusd, anteur, godsusd, godseur, radusd, radeur, bandusd, bandeur, injusd, injeur, rlyusd, rlyeur, rndrusd, rndreur, vegausd, vegaeur, 1inchusd, 1incheur, solusd, soleur, apeusd, apeeur, mplusd, mpleur, dotusd, doteur, nearusd, neareur, dogeusd, dogeeur
ให้เราเปิดมันด้วย browser ปกติ https://www.bitstamp.net/api/v2/ticker/btcusd ก็จะได้ Response เป็น JSON ออกมาดังนี้ครับ ให้เรา copy ข้อความที่ได้ไว้

เปิดเว็บ jsontodelphi.com แล้วนำข้อความที่ copy มาวางไว้ที่ช่อง Enter Json

JSON นั้นมีชื่อเต็มๆว่า JavaScript Object Notation โดยจะได้มาจากการเรียก API แล้ว ได้รับการตอบกลับผลลัพธ์มาเป็น JSON
แล้วกด Generate

web จะแสดงหน้า preview ขึ้นมาให้

ให้ติ๊กเลือก Pkg.Json.DTD.pas กด Download จะได้ไฟล์มาสองไฟล์

ดูตัวอย่างการใช้ได้จากการกดปุ่ม Sample Use


เปิด Delphi แล้ว Copy File ทั้งสองไปวางใน Path เดียวกับ Source code แล้ว Add เข้ามาใน Project

ทำการ Use .Pas เข้ามาใน Form


เราจะทำการดึงข้อมูลจาก JSON โดยกำหนดว่าจะดึงข้อมูลที่เป็น Response มาแสดง

โดยเราจะทำหน้า UI มารับดังนี้

เราก็จะเขียนโปรแกรมดังนี้

procedure TMainForm.Button1Click(Sender: TObject);
var
Res : IHTTPResponse;
BitCoin : TRoot;
begin
BitCoin := TRoot.Create();
Res:= NetHTTPRequest1.get(‘https://www.bitstamp.net/api/v2/ticker/btcusd');
BitCoin.AsJson := Res.ContentAsString;
TxtLastValue.Text := BitCoin.Last;
TxtHightValue.Text := BitCoin.High;
TxtLastValue.Text := BitCoin.Last;
TxtHightValue.Text := BitCoin.High;
TxtLowValue.Text := BitCoin.Low;
TxtVwapValue.Text := BitCoin.Vwap;
TxtValumeValue.Text := BitCoin.Volume;
TxtBidValue.Text := BitCoin.BId;
TxtAskValue.Text := BitCoin.Ask;
TxtTimeStampValue.Text:= BitCoin.Timestamp;
TxtOpenValue.Text := BitCoin.Open;
TxtOpen24Value.Text := BitCoin.Open24;
TxtPercentValue.Text := BitCoin.PercentChange24;
end;
เท่านี้ก็เรียบร้อย

ผมเอา code ขึ้นไว้ที่ https://github.com/piyanatn/DelphiBitstampAPI