【PHP】curlで為替情報を取得してアメリカドルを日本円に変換する

前回,【PHP】暗号通貨のローソク足を取得する方法をはじめからで,curl という仕組みを用いて暗号通貨の価格のローソク足を取得する方法を学びました。しかし,取得できる情報は米ドル建てです。

今回は,同様に curl を利用して米ドルを日本円に換算する方法を学びます。

コードの説明

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="utf-8"></head>
<body>
<?php
//Bitcoinの1時間足を取得する
$url = "https://api.cryptowat.ch/markets/binance/btcusdt/ohlc?periods=3600";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //URLを指定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //データを文字列で受け取る
$res = curl_exec($ch);
curl_close($ch);
$candlestick = json_decode($res, true);
//為替を取得する
$url = "https://www.gaitameonline.com/rateaj/getrate";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
$exchange = json_decode($res, true);
$usdjpy = $exchange["quotes"][20]["open"];
?>
<p>ローソク足(1時間足)</p>
<?php
for($i=0;$i<=3;$i++){
    $unixtime = $candlestick["result"][3600][$i][0];
    echo date('Y/m/d H 時 ', $unixtime);
    echo "始値", $candlestick["result"][3600][$i][1] * $usdjpy;
    echo " 高値", $candlestick["result"][3600][$i][2] * $usdjpy;
    echo " 安値", $candlestick["result"][3600][$i][3] * $usdjpy;
    echo " 終値", $candlestick["result"][3600][$i][4] * $usdjpy;
    echo "<BR>";
}
?>
</svg>
</body>
</html>

ビットコインの1時間足を取得し,画面に出力する部分については前回の記事を参照してください。

$url = "https://www.gaitameonline.com/rateaj/getrate";

URL を指定します。ここでは,外為オンラインというサイトが提供している API を利用します。上のアドレスをブラウザのアドレス欄に直接入力すると

{"quotes":[{"high":"1.9486","open":"1.9463","bid":"1.9475","currencyPairCode":"GBPNZD",
"ask":"1.9492","low":"1.9386"},{"high":"86.79","open":"86.59","bid":"86.40",
"currencyPairCode":"CADJPY","ask":"86.45","low":"86.35"},{"high":"1.8911",
"open":"1.8870","bid":"1.8896","currencyPairCode":"GBPAUD","ask":"1.8905","low":"1.8838"},

・・・

のような文字列が表示されます。これは JSON 文字列です。前回と同様にこれを配列に格納して必要なデータを取得しましょう。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
$exchange = json_decode($res, true);

この辺りの作業は前回とまったく同じです。curl で取得した JSON 文字列を json_decode() で配列に格納します。

$usdjpy = $exchange["quotes"][20]["open"];

配列から米ドルと日本円の為替レートの始値を取り出し,$usdjpy に格納します。為替レートは常に変動していますが,短時間で極端に変わるものではないので始値を用いても大丈夫でしょう。

for($i=0;$i<=3;$i++){
    $unixtime = $candlestick["result"][3600][$i][0];
    echo date('Y/m/d H 時 ', $unixtime);
    echo "始値", $candlestick["result"][3600][$i][1] * $usdjpy;
    echo " 高値", $candlestick["result"][3600][$i][2] * $usdjpy;
    echo " 安値", $candlestick["result"][3600][$i][3] * $usdjpy;
    echo " 終値", $candlestick["result"][3600][$i][4] * $usdjpy;
    echo "<BR>";
}

始値,高値,安値,終値の値は米ドルなので,これに $udsjpy をかけ算することで日本円に変換します。

結果は以下のようになります。

ローソク足(1時間足)

2021/08/05 22 時 始値4466671.8937 高値4522449.5 安値4432547.36 終値4450510.2888
2021/08/05 23 時 始値4450510.2888 高値4500575.5 安値4450510.2888 終値4471044.5063
2021/08/06 00 時 始値4471044.5063 高値4515888.3937 安値4447651.357 終値4474439.3511
2021/08/06 01 時 始値4474710.5887 高値4487719.0565 安値4456827.5 終値4476229.738

それぞれの価格が日本円で出力されています。

まとめ

ここでは,curl を用いて為替レートの情報を取得し,米ドルを日本円に変換する方法を学びました。curl で取得できるデータにはユーロなど他の通貨のレートも含まれているので,これらの情報を利用してさまざまな為替相場の最新情報を出力することもできるでしょう。

ここでは民間企業が提供するデータを利用しているため,将来的にはこの情報が得られなくなる可能性があることに注意してください。