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