通貨換算について
-
為替レートのAPIは、国内外問わず結構いろいろなところで提供されていますが、個人での提供(サービスがすぐ終わる可能性)や、商用利用不可、APIキーを取得する必要があるなど、使い勝手が悪かったりします。
なので、私が以前利用していたのは、ECB(欧州中央銀行)の xml ファイルです。
http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.htmlアジア・アフリカ通貨は、人民元、ウォン、シンガポールドル、フィリピンペソ、マレーシアリンギット、タイバーツ、南アフリカランド があります。
注意点としては…
・更新頻度が高くない(1日1回、日本時間の午前7時頃に更新される)ので、為替レートの変動が大きい日だと、実勢レートとの乖離が大きくなる場合がある。
・対ユーロでのレートである(1ユーロがいくらか。対円レートに再計算する必要)
例1)ドル円
ユーロ円÷ユーロドル例2)シンガポールドル円
ユーロ円÷ユーロシンガポールドルワードプレスでの表示
xmlファイルの取得後(a.都度アクセスするのか、b.自サーバーにxmlファイル保存するのか、c.対円レートに再計算後データベースに格納するのか)、ショートコードを使って表示、という流れがいいのではと思います。お教えくださいまして本当にありがとうございます。
ECBのxmlファイルに都度アクセスすると、回数が増加して迷惑をかけてしまうように思いますので、一日一度xmlファイルを保存し円をまずユーロに換算しショートコードやテンプレートで希望する通貨に換算表示出来れば理想的とおもいました。
”日に一度xmlを取得”、日本円の価格と外貨略号を引数にして換算表示するといった関数を組まないといけないのですが、私ごときにはまだ手に及ばないところです。
一度時間をかけて、取り組んでみます。こんにちは
cronで定時実行して、xmlを読み込み配列になんとか取り込めたとおもいます。$XML=simplexml_load_file("../new_eurofxref-daily.xml"); foreach($XML->Cube->Cube->Cube as $rate){ $rate=get_object_vars($rate); //print_r($rate); //echo'<br>'; }
只、ここから日本円価格を現地通貨に換算する式がわかりません。
(価格と通貨記号はカスタムフィールドで指定する予定です。)
お教えいただけませんでしょうか現地通貨への換算は、 日本円価格÷現地通貨/円 で計算できます。
例)香港の人に日本円で5,000円の商品を売りたい場合
1香港ドル=15.95円とする
5,000円÷15.95円 = HKD 313.479624なので、ECB から提供されているレートを、対円でのレートに変換して保存しておくと便利だと思います。
続きあり…
続き
// ECB の xml ファイルを読み込み配列に格納 // cronで定時実行なので、XMLファイルを保存する過程は必要ないかと… $XML=simplexml_load_file( 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml' ); $eur_rate = array(); // 必要な情報だけにする foreach( $XML->Cube->Cube->Cube as $rate ) { $eur_rate[current( $rate['currency'] )] = current( $rate['rate'] ); } // ユーロベースレートの連想配列 // print_r( $eur_rate ); // ユーロベースのレートから円ベースのレートに置き換え $eurjpy = $eur_rate['JPY']; foreach( $eur_rate as $currency=>$rate ) { // JPY となっている部分は EUR に置き換える if ( 'JPY' === $currency ) { $jpy_rate['EUR'] = $rate; } else { $jpy_rate[$currency] = $eurjpy / $rate; } } // 円ベースレートの連想配列 // print_r( $jpy_rate );
続きあり…
続きこの連想配列を、WPのデータベース options に保存(そのまま? or 通貨ペアごとに分けて?)
// 関数で書いていますが、ショートコードでの応用に function local_price( $jpyprice, $currency ) { // 円ベースレートの読み込み // データベースに入れたのなら get_option() などで global $jpy_rate; $jpy_rate = $jpy_rate; $local_price = $jpyprice / $jpy_rate[$currency]; $local_price = number_format( $local_price, 2 ); // 小数第二位までに丸める(必要に応じて調整) return '日本円で' . number_format( $jpyprice ) . '円の商品は、' . $currency . $local_price . ' です。'; } // echo local_price( 5000, 'HKD' ); // 日本円で5,000円の商品は、HKD313.12 です。
続きあり…
・小数点は「.」「,」の場合があるなあ。アジアは一緒?
・今は円安だから、将来の円高に備えて現地通貨表示の価格は割高に設定してお…
・連想配列は、通貨コード => レート だけど、通貨記号や国名(英語、日本語)もあった方が便利かな?( [HKD] => Array ( [rate] => 15.966032704049 [mark] => HK$ [name] => Hong Kong [jpname] => 香港 )
実際のWEBページ上での表示方法は分かりませんが、こんなことを想像しながら書いてました。
- トピック「通貨換算について」には新たに返信することはできません。