Denen blog

株式会社電縁の社員によるブログです。

Google Apps ScriptでBitcoin価格を取得してみた

こんにちは、イノベーションオフィスの吉田です。

先週から仮想通貨が値下がりしていまして、社内からは悲鳴にも似た叫び声が聞こえるとか聞こえないとか・・・なんて状況ですが、皆様いかがお過ごしでしょうか?

(このネタがどれくらいの方に伝わるのか・・・)

 

私も含め、社内では仮想通貨の取引をしている人間がチラホラ居るようでして、せっかくなので社内ポータル上でBitcoinの価格のグラフを見られるようなものを作ってみました。

弊社の社内ポータルはGoogleサイト(古い方)で作られており、Google Spreadsheetsのグラフが貼り付けられます。

Google Spreadsheetsの値を定期的に更新できれば実現できるのではないかと思い、調べてみるとGAS(Google Apps Script)でいけそうでした。

しかも今は Advent Calendar の季節で良さげな記事がまとまっていたりしました。

qiita.com

上記記事の「その7」「その8」辺りでほとんどやりたいことが実現出来そうなのでそちらを使わせていただく事にしました。

ただし、常に直近30分以内のデータを表示したかったので、グラフのデータ範囲を「A1:B30」(毎分取得して直近30件分)のように指定して先に作っておいてから、最新のデータを一番上に挿入するように対応してみました。

しかし、GASで1行追加すると、グラフのデータ範囲が自動でずれるようでうまくいきませんでした・・・

 

そこで次に、データの取得・挿入後にグラフのデータ範囲を変更してみようとしたのですが、それはGASでは出来ませんでした。

※微妙にかゆいところに手が届かない感じですね・・・

 

というわけで、苦肉の策ですが毎度毎度データを読み込んだらグラフ削除→グラフ作成という形で実現してみました。

それが以下のコードになります。

function myFunction() {
  var bitCoinData = getBitCoinData();
  var sheet = SpreadsheetApp.getActiveSheet();

  sheet.insertRows(1);
  sheet.getRange('A1:B1').setValues([[new Date(), bitCoinData['ltp']]]);
  
  var chart = sheet.getCharts()[0];
  sheet.removeChart(chart);
  
  var range = sheet.getRange("A1:B30");
  var newchart = sheet.newChart()
    .addRange(range)
    .setChartType(Charts.ChartType.LINE)
    .setPosition(1, 3, 0, 0);
  sheet.insertChart(newchart.build());
}

function getBitCoinData() {
  var url = 'https://api.bitflyer.jp/v1/getticker';
  var response = UrlFetchApp.fetch(url);
  var json = response.getContentText();
  return JSON.parse(json);
}

これならうまく動作したので、試しにGoogleサイトに貼り付けてみたところ、グラフが削除→作成されていても以下の様に問題なく表示されていました!

f:id:yasuaki-sakai:20171222162133j:plain

いい感じですね。

結構いろいろ使えそうな気がするので、また何か作ってみたらご紹介しようと思います。

それでは。

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain