bitflyer,zaifのpublicAPIを使って売値と買値を取得してみた

f:id:kirakira_rin:20171126095117j:plain

こんにちは、雑記ラビリンスです。

 

仮想通貨の取引所で扱っているビットコイン

いっぺんに表示したいなと思いましてbitflyerさんとzaifさんが

公開しているAPIから取得して表にしました。

 

 

1.取引所が公開しているAPIから値を取得

1-1.ターゲットとした値

bitflyer

best_ask: 最高買い価格
best_bid: 最低売り価格

zaif

bid : 買気配値
ask  : 売気配値

1-2.PHPcurl()でターゲットを取得

ターゲットが決まったらレスポンスでターゲットを返してくる

URLにcurlを使ってアクセスします。

 

$zaif_url = "ターゲットを返すURL";

//curlスタート
$ch = curl_init();

~いろいろ省略~

 

//データ取得
$response = curl_exec($ch);

//PHPの配列に変換
$zaifresult = json_decode($response, true);

 

//DB登録のために取得した配列を変数にセット
$bid = $zaifresult['bid'];
$ask = $zaifresult['ask'];

 

//curlおしまい

curl_close($ch);

取得した値をDBに登録したかったためJSON形式の値を

変換しています。

 

とりあえず値は無事に取得しました。

2.取得した値をDBに登録

curlで取得した値は配列の形ですので、それぞれの要素を

変数にセットして、その変数をINSERT文のVALUE句にセットです。

 ローカル環境で動かしているのでバインド変数をセットする必要があるかは

微妙ですが、お作法的に入れてみました。

3.1と2の処理をcronで定期実行

1と2の処理が入ったphpファイルはcronで実行です。

 

*/1 * * * *       php hogehoge.php

 

こんな感じの設定です。とりあえず1分おきに実行をかけています。

ちなみに「*/1」は1分おきに動かすという意味です。

5分おきで実行したい場合は「*/5」になります。

4.DBから最新の値を取得して値をJSON形式に変換

2の処理で登録した値をSELECT文で1レコードだけ取得します。

ORDEY BY句にレコード登録時間をDESCで降順に並び替えし

レコード数の制御にLIMIT句に1を設定しました。

 

レコードから取り出した値は

 $max_buy = $result['flyer_buy'];
 $min_sell = $result['flyer_sell'];
 $bid = $result['zaif_buy'];
 $ask = $result['zaif_sell'];

の様に変数にセットして配列に変換。

$datas =[$max_buy,$min_sell,$bid,$ask];

 

そしてajaxで取得できるようにJSON形式に変換。
$json_str = json_encode($datas);
echo $json_str;

 

5.ajaxを用いてJSONデータを取得

いよいよJSONデータの取得です。

取得したコードは

$.getJSON(
 "getjson.php",
 null,
 function(data){
  var max_buy = data[0];
  var min_sell = data[1];
  var bid = data[2];
  var ask = data[3];
  //セルにセット
  $('#max_buy').text(max_buy);
  $('#min_sell').text(min_sell);
  $('#bid').text(bid);
  $('#ask').text(ask);
 });

こうなりました。ざざっと書きましたが取得したいJSONデータが

おいてあるgetjson.phpにアクセスして、その結果dataを取得しています。

6.5の処理をjavascriptで定期実行

定期実行処理として使用した関数はsetIntervalです。

ざざっと書くと

setInterval(function(){
 5での処理
},60000);

こうなります。

行っている処理は5での処理を60000ミリ秒ごと

すなわち60秒ごとに処理を繰り返しています。

7.5で取得した値を所定のセルに出力

最後、取得した値のセットは

//セルにセット
  $('#max_buy').text(max_buy);
  $('#min_sell').text(min_sell);
  $('#bid').text(bid);
  $('#ask').text(ask);

です。セットしたい場所にIdを振っただけです。

これでようやく完成です。

8.終わりに

タイトルに示した処理を分割すると7つになりました。

そしてローカル環境ではありますが1分ごとに値を取得して

取得した値を表示する機能の実装ができました。

 

ときどきこういう記事も載せていこうと思います。

 

おしまい