【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

お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More

タグ

Flutter (70)初心者向け (22)イベント (15)Nextjs (8)Google Apps Script (7)可茂IT塾 (6)Firebase (6)React (5)新卒 (3)就活 (3)給与支払報告書 (3)riverpod (3)Dart (3)JavaScript (3)TypeScript (3)インターン (3)FlutterWeb (2)画像 (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)ワーケーション (2)社会人 (2)大学生 (2)お知らせ (2)webfeed (1)RSS (1)CodeRunner (1)VSCode (1)個人開発 (1)設計 (1)フルリモート (1)学生向け (1)Java (1)Spring Boot (1)エンジニア (1)DeviceOrientation (1)正規表現 (1)神楽 (1)趣味紹介 (1)プログラミングだけではない可茂IT塾のメンバー (1)線型計画法 (1)事例 (1)PreferredSize (1)マテリアルデザイン (1)Material (1)クパチーノデザイン (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)シェアハウス (1)スクレイピング (1)Gmail (1)Googleグループ (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)Vercel (1)Google Domains (1)branch (1)Git (1)オンラインオフィス (1)Freezed (1)アイコン (1)Apple Store Connect (1)FlutterGen (1)検索機能 (1)Navigator (1)メール送信 (1)カスタム認証 (1)アニメーション (1)FloatingActionButton (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)Dialog (1)Figma (1)デザイン (1)Slack (1)BI (1)非同期処理 (1)BackdropFilter (1)iOS (1)レビュー (1)getAuth (1)匿名 (1)Algolia (1)chakra-ui (1)コンサルティング (1)Symbol (1)reactive_forms (1)

お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More