【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

お知らせ

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

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

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

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More

タグ

Flutter (110)初心者向け (28)イベント (18)Google Apps Script (15)Nextjs (12)可茂IT塾 (8)Firebase (7)riverpod (6)React (6)ChatGPT (5)vscode (5)デザイン (5)新卒 (4)就活 (4)Figma (4)Dart (4)JavaScript (4)お知らせ (4)FlutterWeb (3)Prisma (3)NestJS (3)Slack (3)TypeScript (3)ワーケーション (3)インターン (3)設計 (2)線型計画法 (2)事例 (2)Git (2)Image (2)File (2)Material Design (2)画像 (2)iOS (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)社会人 (2)大学生 (2)RSS (1)Google (1)Web (1)CodeRunner (1)個人開発 (1)Android (1)Unity (1)WebView (1)Twitter (1)フルリモート (1)TextScaler (1)textScaleFactor (1)学生向け (1)supabase (1)Java (1)Spring Boot (1)shell script (1)正規表現 (1)パワーポイント (1)趣味 (1)モンスターボール (1)CSS (1)SCSS (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)iPad (1)シェアハウス (1)スクレイピング (1)PageView (1)画面遷移 (1)flutter_hooks (1)Gmail (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)GCPコンソール (1)Google_ML_Kit (1)Vercel (1)Google Domains (1)DeepLeaning (1)深層学習 (1)Google Colab (1)コード生成 (1)GitHub Copilot (1)オンラインオフィス (1)オブジェクト指向 (1)クラスの継承 (1)ポリモーフィズム (1)LINE (1)Bitcoin (1)bitFlyer (1)コミュニティー (1)文系エンジニア (1)Freezed (1)permission_handler (1)flutter_local_notifications (1)markdown (1)GlobalKey (1)ValueKey (1)Key (1)アイコン (1)go_router (1)debug (1)datetime_picker (1)Apple Store Connect (1)FlutterGen (1)デバッグ (1)Widget Inspector (1)検索機能 (1)Shader (1)Navigator (1)メール送信 (1)Firebase App Distribution (1)Fastlane (1)Dio (1)CustomClipper (1)ClipPath (1)カスタム認証 (1)アニメーション (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)mac (1)csv (1)docker (1)GithubActions (1)Dialog (1)BI (1)LifeHack (1)ショートカット (1)Chrome (1)高校生 (1)キャリア教育 (1)非同期処理 (1)生体認証 (1)BackdropFilter (1)レビュー (1)getAuth (1)Algolia (1)コンサルティング (1)Symbol (1)

お知らせ

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

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

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

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More