Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
39
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

【Google Apps Script】その8 スクリプトを定期実行し、ビットコインの1分ごとの価格を自動取得する

この記事はGoogle Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017 8日目の記事です。

本アドベントカレンダーは@rt_pの個人プロジェクトですが、筆者はAteam Brides Inc. Advent Calendar 2017にも参加しています。そちらでも出張版記事を書いているので、覗いていただけると嬉しいです。

はじめに

GASを使っていると、Cronのように分単位、日単位等でスクリプトを定期実行したいと思うことが出てきます。
その時、スクリプトエディタで非常に簡単に設定できるのがGASの特長です。
クラウドで勝手に実行されるので、Excel VBAに比べて簡単かつ個人環境に依存しない定期実行が実現できるのが非常に大きな強みです。

log.PNG

スクリプトエディタを開く

前回の記事で使用したスプレッドシートを開きます。もし前回の記事を読まれていない場合は、新規でスプレッドシートを作成いただければ問題ありません。

スクリプトエディタを開き、以下コードに置き換えて実行します。
スクリプトエディタの開き方や承認が必要ですメッセージが出た際の対処法が分からない場合は
アドベントカレンダー1日目のHello, world!記事をご参照ください。

timer.gs
function myFunction() {
  var bitCoinData = getBitCoinData();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow([bitCoinData['ltp'], new Date()]);
}

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

ソースコードは、前回と1行(4行目)しか変わりません。
前回は実行時にA1:B1に値をセットしていましたが、複数回実行するとどんどん同じセルに上書きされてしまう為、今回は新しい行を追加していく方式を取りたい為です。

myFunction()を実行し、現在の価格がスプレッドシートに追加されることをまず確認してください。

その後、下記画像のストップウォッチアイコンをクリックします。

timer.png

するとポップアップが出るので、トリガーが設定されていません。~部分をクリック。

trigger.png

その後、以下のスクショの通り設定します。

minutes.png

すると、1分ごとにmyFunction()が定期実行されるようになります。
スプレッドシートを閉じていてもクラウド上のサービスなので、問題なく定期実行されるのが嬉しい点です。

成功すると以下のように、1分ごとの価格が自動追記されていきます。

log.PNG

注意点

初回実行は手動で起動して動くことを確認

プログラムをガリガリ書いて自動起動設定をしたけれど、ふとスプレッドシートを見ると全く実行されていないことがあります。
その場合は大抵プログラムの中でエラーが発生していたり、スプレッドシート連携や外部サービス連携に対して許可をしていないことが多いです。
最初は手動で実行し、動作することが確認できたらタイマーをセットしましょう。

正確な時刻の自動起動は一工夫いる

「分タイマー」の場合、毎分0秒~59秒のうちのどこかで1回実行されます。
「時タイマー」も同様に毎時0分~59分59秒のうちのどこかで…というように、恐らくGoogle側の負荷分散の為に、ピッタリ0秒や0分のタイミングで実行されるわけではありません。
できるだけピッタリの時間で実行するにはちょっと工夫が必要になるので、またどこかのタイミングで触れます。

トリガー設定したままゴミ箱に捨てない

トリガーを設定したままスプレッドシートをゴミ箱に捨てても、トリガーは生き続けます。

おわりに

前回紹介した外部サービス連携、今回紹介した定期実行を組み合わせることで、あらゆるデータ自動収集プログラムを書くことができます。このアドベントカレンダーでも、応用したシステムを紹介していく予定です。

本アドベントカレンダーは、1日目~9日目あたりは基礎編でGASに関する基本的な操作を紹介していきます。
10日目以降は応用編ということで、実際に作ったアプリケーションとそれに関する技術の紹介になります。お楽しみに!

明日

【Google Apps Script】その9 エラーを拾う
となります。
エラーが起きた時に何かしらの処理を実行したい場合の書き方をお伝えします。

前の記事
【Google Apps Script】その7 ビットコインの最終取引価格を取得する
次の記事
【Google Apps Script】その9 エラーを拾う

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
39
Help us understand the problem. What are the problem?