こんにちは。ビットコおじさんだよ。

前回は、GAS(Google Apps Script)の使い方とコインチェックのAPIを使って、コインチェックの価格を表示したね。
関連記事→「API入門(1)取引所のリアルタイムレートをゲット!

今回は複数の取引所のAPIを使って、取引所の価格を比べてみるよ。
APIで最安値の取引所を調べてビットコインを買って、最高値の取引所で売れば差額で儲かっちゃうね!
APIなんて何に使えるんだよ?って思ってた人も、ちょっとAPI良いかもってなってきたでしょ?

さっそく取引所の価格比較ウェブアプリケーションを作ってみよう!
前回、細かく説明したので、今回からはざっくりいくね。


「Googleドライブ」から、「新規」→「Google Apps Script」を選択して、「無題のプロジェクト」を作ろう。

gas20
引用元:google.co.jp

次はファイルから「新規作成」→「HTMLファイル」で表示用のHTMLテンプレートを作るよ。名前は「index.html」にしておいた。

gas21
引用元:google.co.jp

HTMLの中身はこんな感じ。
ちょっと表示をきれいにするのにスタイルシートとかも入れてるから長くなっちゃったね。
コピペで行けるかな?
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
      .thcol {
        display: inline-block;
        width: 120px;
        border: solid 1px #909090;
        background-color: #eeeeee;
        text-align: center;
        font-weight: bold;
      }
      .tdcol {
        display: inline-block;
        width: 120px;
        border: solid 1px #909090;
        text-align: center;
      }
    </style>
  </head>
  <body>
    <?= date ?>
    <div>
      <div>
        <?!= exnames ?>
      </div>
      <div>
        <?!= bids ?>
      </div>
      <div>
        <?!= asks ?>
      </div>
      <div>
        <?!= spreads ?>
      </div>      
    </div>
    <?= top_ask ?>で買って<?= top_bid ?>で売れば<?= difference ?>の儲けだよ。
    <script>
      document.getElementById('<?= bid_id ?>').style.backgroundColor = "#ffa0a0";
      document.getElementById('<?= ask_id ?>').style.backgroundColor = "#a0ffa0";
    </script>
  </body>
</html>
次は「コード.gs」を編集するよ。
function doGet() {
  // 取引所のAPIを取得してJSONをパースする
  var cc_response = UrlFetchApp.fetch("https://coincheck.com/api/ticker");
  var cc_json = JSON.parse(cc_response.getContentText());
  var bf_response = UrlFetchApp.fetch("https://api.bitflyer.jp/v1/ticker");
  var bf_json = JSON.parse(bf_response.getContentText());
  var zf_response = UrlFetchApp.fetch("https://api.zaif.jp/api/1/ticker/btc_jpy");
  var zf_json = JSON.parse(zf_response.getContentText());
  var bt_response = UrlFetchApp.fetch("https://www.btcbox.co.jp/api/v1/ticker/");
  var bt_json = JSON.parse(bt_response.getContentText());
  var qn_response = UrlFetchApp.fetch("https://api.quoine.com/products/5");
  var qn_json = JSON.parse(qn_response.getContentText());
  var bi_response = UrlFetchApp.fetch("https://public.bitbank.cc/btc_jpy/ticker");
  var bi_json = JSON.parse(bi_response.getContentText());

  // 取引所のオブジェクトを作る
  const exchanges = [
    { name: 'Coincheck', bid: cc_json["bid"], ask: cc_json["ask"] },
    { name: 'bitFlyer', bid: bf_json["best_bid"], ask: bf_json["best_ask"] },
    { name: 'Zaif', bid: zf_json["bid"], ask: zf_json["ask"] },
    { name: 'BtcBox', bid: bt_json["buy"], ask: bt_json["sell"] },
    { name: 'Quoinex', bid: qn_json["market_bid"], ask: qn_json["market_ask"] },
    { name: 'bitbank', bid: bi_json["data"]["buy"], ask: bi_json["data"]["sell"] }
  ];
  
  var html = HtmlService.createTemplateFromFile('index.html');

  html.date = new Date();
  
  html.exnames = '取引所';
  html.bids = '売却';    
  html.asks = '購入';
  html.spreads = 'Spread';

  exchanges.forEach( function( value ) {
    html.exnames += '' + value.name + '';
    html.bids += '' + Math.floor(value.bid) + '円';    
    html.asks += '' + Math.floor(value.ask) + '円';
    html.spreads += '' + Math.floor(value.ask - value.bid) + '円'; 
  });
  
  // 一番高く売れる取引所を探す
  exchanges.sort(function(value1, value2) {
    return value2.bid - value1.bid;
  });
  var topBid = exchanges[0];
  
  // 一番安く買える取引所を探す
  exchanges.sort(function(value1, value2) {
    return value1.ask- value2.ask;
  });
  var topAsk = exchanges[0];

  html.top_ask = topAsk.name + "(" + Math.floor(topAsk.ask) + "円)";
  html.top_bid = topBid.name + "(" + Math.floor(topBid.bid) + "円)";
  html.difference = Math.floor(topBid.bid - topAsk.ask) + "円";
  html.bid_id = "bid_"+topBid.name;
  html.ask_id = "ask_"+topAsk.name;
  
  return html.evaluate();
}
編集ができたらプロジェクトをメニューの「編集」→「すべて保存」で保存してね。
プロジェクトの名前は適当でいいけど、おじさんは「取引所価格比較」にしておいた。

保存ができたら動かしてみよう!
「公開」→「ウェブアプリケーションとして導入」をクリック。

gas22
引用元:google.co.jp

「ウェブアプリケーションとして導入」のウィンドウは1回目はボタンが「導入」になっているね。ボタンが「導入」になっていればそのまま進んで大丈夫。
2回目からはボタンが「更新」になるよ。気を付けないといけないのは、プロジェクトバージョンを「新規作成」にしないと、公開用のページには更新が反映されないよ。

gas23
引用元:google.co.jp

「ウェブアプリケーションとして導入しました。」って出るので、「現在のウェブアプリケーションのURL」っていうのをコピペでブラウザのアドレスに入れれば、公開用のページが開くよ。

ひとつ前の画面で「アプリケーションにアクセスできるユーザー」を「全員(匿名ユーザーを含む)」にしておけば誰でも公開用のページにアクセスできるようになるよ。スマホとかで見たり、誰かと共有したいときはアクセスできるユーザーを変更しよう。

gas24
引用元:google.co.jp

「最新のコードをテストします。」っていうほうのリンクはテスト用。URLをよく見ると、テスト用は最後に「dev」ってついていて、公開用は「exec」になってるね。
テスト用は常に最新のソースが反映されるけど、さっきも書いたように公開用の方はプロジェクトバージョンを「新規作成」にしないと最新のソースが反映されないので注意してね。

動いたかな?

gas25

(=゚ω゚)人(゚ω゚=)ぃょぅ!

えー!Coincheckで買ってbitbankで売るだけで8267円も利益がでるの?!
(※相場によって変わるよ。)

どう?GASとAPI使ったら簡単にできちゃうでしょ?
色の付け方とかCSSとかは、おじさんもCSSの入門サイトとか見ながらやってみたよ。
一番安い価格を緑背景、一番高い価格を赤背景にしてみた。

今のところは手動で取引するしかないけど、これで取引用のボタンとか付けたらアービトラージアプリケーションが作れるんじゃない?

( ̄ー ̄)ニヤリッ

でも、ウォレットの内容を見たり、注文を出して取引をするAPIには「プライベートAPI」っていうのを使わないといけないね。「プライベートAPI」を使うには、取引所にAPIキーを発行してもらう必要があるよ。
うっかりプライベートのAPIキーを公開しちゃったりすると悪用されたりするから気を付けようね。

今使っているのは取引所の公開している「パブリックAPI」っていうやつだから誰でも使えるよ。
とりあえず、パブリックAPIでAPIに慣れたら、プライベートAPIをいじってみるのがいいんじゃないかな。

じゃあまた。

← 応援ポチっとお願いします。

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

bitFlyer ビットコインを始めるなら安心・安全な取引所で