【Google Apps Script】Symbolの価格を取得し、Googleスプレッドシートに入力する(初心者向け)

image

前回やったこと

前回Google App Scriptを使ってLINEメッセージを送信することができました。 今回はその続きとなります。

今回やりたいこと

Zaifという仮想通貨交換所のAPIサービスから、Symbolという仮想通貨の価格を取得してGoogleSpreadsheetに入力し、LINEメッセージで送ります。
Symbolは何かについてはこちらを参考にしてください。REST APIによって開発しやすいブロックチェーンといわれています。

環境

  • Google Spreadsheet
  • Google App Script

必要な変数と関数を作る

dateの取得

日時を取得します。UtilitiesクラスのformatDateメソッドを使います。

var date = Utilities.formatDate(
    new Date(),
    'Asia/Tokyo', 'yyyy/MM/dd H:mm'
    );

getPrice(coin)

Zaif-API Documentsを参考にSymbol価格を取得します。
https://api.zaif.jp/api/1/ticker/xem_jpy でSymbolの価格が取得できます。今回はこのうちlast(終値)を使います。
UrlFetchAppクラスのfetchメソッドを使います。

function getPrice(coin) {
  var base_url = "https://api.zaif.jp/api/1/ticker/";
  var url =coin + "_jpy"; // coinにはティッカーが入る。Symbolの場合は"xym"
  // APIを呼び出して、価格を取得.
  var response = UrlFetchApp.fetch(base_url + url);
  var json = JSON.parse(response.getContentText());
  var text = coin + "価格:"
  var price =  json["last"]; 
  return price
}

sendLINE(msg)

前回使った関数のmsgを引数にしました。
UrlFetchAppクラスのfetchメソッドを使います。

function sendLine(msg) { 
 let token = "****" // "****"部分を取得したトークンに置き換える
 let options = {
   "method" : "post",
   "headers" : {
     "Authorization" : "Bearer "+ token
   },
   "payload" : {
     "message" : msg
   }
 }

 let url  = "https://notify-api.line.me/api/notify"
 UrlFetchApp.fetch(url, options)
}

取得したデータをGoogleスプレッドシートに入力する

アクティブスプレッドシートの取得

アクティブなスプレッドシートとは、このスクリプトに紐づいているスプレッドシートのことです。 SpreadsheetAppクラスのgetActiveSpreadsheet() getSheetByName()メソッドで取得できます。

var sheet = SpreadsheetApp.getActiveSpreadsheet(); // アクティブスプレッドシートの取得
var target_sheet = sheet.getSheetByName('シート');  // シートの取得。'シート'はシート名

データのある最終行を取得

取得した価格を前回取得した価格の下の行に追加していきたいので、データの最終行を取得します。 getLastRow()メソッドを使います。

// データのある最終行を取得
  var lastRow = target_sheet.getLastRow();

セルに値を追加する

最終行を起点として、入力したいセルの場所を指定し入力する
getRange() setValue()メソッドを使います。

target_sheet.getRange(lastRow + 1,1).setValue(date);      //lastRowから1行目、1列目に日時を追加
target_sheet.getRange(lastRow + 1,2).setValue(getPrice('xym')); //lastRowから1行目、2列目に価格を追加

LINEメッセージを送信する

sendLINE(msg)を使ってメッセージを送ります。

message = (`Symbolの現在価格は、${getPrice('xym')}円です。`);
sendLine(date); 
sendLine(message); 

コード全文

以下のように3つのFunctionに分けてgsファイルを作成し、recodePriceを実行してください。

recodePrice.gs

function recodePrice() { 
  // 日時を取得
  var date = Utilities.formatDate(
    new Date(),
    'Asia/Tokyo', 'yyyy/MM/dd H:mm'
    );

  // 対象のスプレッドシート を設定.
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var target_sheet = sheet.getSheetByName('シート');

  // データのある最終行を取得
  var lastRow = target_sheet.getLastRow();
  
  // セルに値を追加する
  target_sheet.getRange(lastRow + 1,1).setValue(date);              //lastRowから1行目、1列目に日時を追加
  target_sheet.getRange(lastRow + 1,2).setValue(getPrice('xym'));   //lastRowから1行目、2列目に価格を追加
  
  // Lineメッセージを送る
  message = (`Symbolの現在価格は、${getPrice('xym')}円です。`);
  sendLine(date); 
  sendLine(message); 
}

 
sendLine.gs

function sendLine(msg) { 
  let token = "8pPsfuJtfjbz5y0nPubhCCk35w3IcvReVqoXGpT2wfr" // "****" 部分をLINEから取得したトークンに置き換える
  let options = {
   "method" : "post",
   "headers" : {
     "Authorization" : "Bearer "+ token
   },
   "payload" : {
     "message" : msg
   }
  }

  let url  = "https://notify-api.line.me/api/notify"
  UrlFetchApp.fetch(url, options)
}

 
getPrice.gs

function getPrice(coin) {
  var base_url = 'https://api.zaif.jp/api/1/ticker/';
  var url =coin + '_jpy';
  // https://api.zaif.jp/api/1/ticker/xym_jpy
  // APIを呼び出して、情報を取得.
  var response = UrlFetchApp.fetch(base_url + url);
  var json = JSON.parse(response.getContentText());
  var price =  json['last']; 
  return price
}

まとめ

Google App Scriptを使ってSymbol価格と価格取得日時をスプレッドシートに入力することができるようになりました。ここから前回やったようにトリガーを設定すれば一定時間ごとにシートに入力していくことができます。
自分の持っているSymbolの保有量などをシートに入れれば現在の評価額などを計算で出すこともできます。いろいろ試してみると面白いと思います。

参考

Class SpreadsheetApp
Class UrlFetchApp