Googleを追いかけろ!

.
価格.com ブロードバンド

WWW を検索 Googleを追いかけろ! を検索



既存のスクリプトのインストールと実行

Google Apps Script を利用する簡単で最も手っ取り早い方法はScript Gallery から既存のスクリプトをインストールすることです。 これらは Google Apps Script team のメンバーやユーザーが寄付してくれたものです。

次の手順で進めてください。

  1. 自分の Google Account から Google Docs を開きます。
  2. スプレッドシートを新規に作成します。
  3. 名前をつけて保存すれば後は定期的に自動保存の状態を保ちます。
  4. Tools > Scripts > Insert と進むと挿入と実行の可能なスクリプトが表れます。
  5. スクロールして興味のあるスクリプトをインストールします。無事挿入できた旨のメッセージが出ます。
  6. 閉じます。
  7. Tools > Scripts > Manage と進んでスクリプトマネジャーを確かめてください。

  1. スクリプトサンプルを選んで実行をクリックします。
  2. 実行時に管理権限者の認証を求められたときは Authorize で実行し、Cancel を押せばスクリプトは実行されません。 Authorize を選んだときは Now you can run the script. のメッセージが表示されます。
  3. Tools > Scripts > Manage と進んでください。
  4. 実行をクリックすればここではじめてスクリプトが実行されます。

株価情報に関するスクリプトをインストールしてみましょう

株価情報を取得するスクリプトです。ユーザーであるPeter Pongさんの許可を得ています。Googl社ではスクリプトには手を加えていません。 したがってインストールに関するすべての責任はGoogle者ではなく開発者と所有者によるものです。

スクリプトのインストールと実行

  1. 自分の Google Account から Google Docs を開きます。
  2. スプレッドシートを新規に作成します。
  3. 名前をつけて保存すれば後は定期的に自動保存の状態を保ちます。
  4. Tools > Scripts > Insert と進むと挿入と実行の可能なスクリプトが表れます。 Stock Price という名前のスクリプトを探しインストールをクリックします。インストール成功のメッセージが出ます。 閉じます。
  5. Tools > Scripts > Manage と進んでこのスクリプトのなかから2つの関数を探してみましょう。
  6. どちらかを選んで実行してみます。実行に関する管理者の許可を求められます。
  7. このとき、 Authorize で実行、Cancel を押せばスクリプトは実行されません。 Authorize を選んだときは Now you can run the script. のメッセージが表示されます。
  8. getStock 関数を実行してみましょう。【A1】 から 【E1】 セルまでのカラムヘッダーに Symbol, Name, Exchange, Trade Time, Price の各表示で埋められます。スプレッドシートのメニューバーに”Finance” という項目が加えられたことも確認して下さい。
  9. A 列のセルに銘柄記号(例;GOOG)を入力します。A2 セルからです。
    * 銘柄記号(例;GOOG); ティッカーシンボル - Wikipedia
  10. メニューから Finance > Get Stock と選びます。残りのセルの stock name, price 等の情報がセルに出力されます。

Stock Price スクリプトの概要

Tools > Scripts > Script Editor と選択します。スクリプトは自動的にロードされます。このスクリプトには onOpengetStock という2つの関数が含まれています。

onOpen 関数は Get Stockの項目を持つ Finance というメニューをスプレッドシートに追加します。スプレッドシートを開くと onOpen 関数はいつも自動的にこのプログラムを実行します。

getStock 関数はカラムヘッダーを提供し、A2セル以下のA列に入力された銘柄記号を得て、その銘柄情報の検索結果をシートに表示します。

参考:finance_services

Stock Price スクリプトを細かく調べてみます

onOpen() 関数から見ていきます。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Get Stock", functionName: "getStock"}];
  ss.addMenu("Finance", menuEntries);
}

このコードはスクリプトをインストールしたシートが開かれると直ぐに実行されるコードです。シートを一度閉じてからまた開くと Finance のメニューが数秒後には表れます。少し時間がかかってもこれは正常な動作です。

onOpen() の部分は関数とその名前の宣言です。(これは言語要素のさまざまな側面を指定する宣言と言えます。) 中括弧に挟まれたコンピューターコードは onOpen() 関数を実行したときの実際の挙動を指定しています。 onOpen() 関数はスクリプトのあるシートを開くと直ぐに自動的に実行されます。中括弧で括られた{ }の部分は関数の働き方のより詳しい情報が書かれています。 Running Scripts in Response to an Event(イベントへの応答スクリプト)が参考になるでしょう。

関数の最初の var ss = SpreadsheetApp.getActiveSpreadsheet(); の部分は ss をJavaScriptオブジェクトとして宣言し、 現在開かれているシートの SpreadsheetAppクラス のメソッド getActiveSpreadsheet() を呼び出しているものです。 メソッドとはクラスに関連付けられた専用のコードで、そのクラスのオブジェクトに対して特別なタスクを実行するものです。

2行目の Get Stock でスクリプトの2つ目の関数である getStock() と関連付けてメニューにエントリーさせるよう定義します。 スプレッドシートに Finance というメニューを追加しているのは、3行目の addMenu() という関数です。

スプレッドシートにカラムヘッダーを挿入する2つ目の getStock() 関数を下に示します。その働きは A列 に入力した株式銘柄それぞれの 情報を取得してスプレッドシートに読み込ませることです。この関数は、メニューからFinance > Get Stock を選択したときに実行されるコードを含みます。

function getStock() {
  var sheet = SpreadsheetApp.getActiveSheet();

  sheet.getRange(1, 1).setValue("Symbol");
  sheet.getRange(1, 2).setValue("Name");
  sheet.getRange(1, 3).setValue("Exchange");
  sheet.getRange(1, 4).setValue("TradeTime");
  sheet.getRange(1, 5).setValue("Price");

  var row = 2;
  while (true) {
    if (!sheet.getRange(row, 2).getValue()) {
      var symbol = sheet.getRange(row, 1).getValue();
      if (!symbol) break;
      Logger.log("Updating symbol: " + symbol);
      var stockInfo = FinanceApp.getStockInfo(symbol);
      sheet.getRange(row, 2).setValue(stockInfo.name);
      sheet.getRange(row, 3).setValue(stockInfo.exchange);
      sheet.getRange(row, 4).setValue(stockInfo.tradetime);
      sheet.getRange(row, 5).setValue(stockInfo.price);
    } else {
      Logger.log("Already updated: " + symbol);
    }
    row++;    
  }
}
関数は var sheet = SpreadsheetApp.getActiveSheet(); を宣言した後、そのときのアクティブシートを取得してシートオブジェクトに読み込ませます。 アクティブシートとは常にスクリプトの存在するスプレッドシートのことです。

次の5行で getRange() メソッドを使いながら A1 から A5 の5つのセルを識別します。そして setValue() メソッドを使って 対応する列のセルにカラムラベルを挿入していきます。setValue() においては Symbol, Name,・・ 等のラベルが引数になります。 メソッドにデータを受け渡す役割をするのが引数です。渡されたデータは文字列データのプレーンテキストになっています。また、それぞれの引数はコーテーションマーク(引用符)で囲みます。

var row = 2; のラインで2の初期値を持つ変数の行を作成します。これは A列 の各行にある株式銘柄リストを反復して数え出す処理のための変数です。そして株式の正しい情報を作り出します。

while (true) の構文には if ループ 内でA列のセルに株式銘柄が入力されているかどうかを連続的にチェックするプロセスが織り込まれています。 各セルの値は、シンボル変数に読み込まれ、もし変数が値を持っていれば、FinanceAppクラスgetStockInfo() メソッドが それぞれの銘柄に対し name, exchange, trading time, price を得るように呼び出されます。さらに setValue() がシートの銘柄行の適切な位置に書き込むように呼び出されます。

if (!symbol) break; の行はシンボル変数に銘柄名が無いときにはループから出るように指示するコードです。 感嘆符は否定的な状態 - ここでは値の無いことをチェックされている状態を指します。 スプレッドシートの2行目から8行目まで埋まっているとしましょう。row++; 文はループプログラムの繰り返しを一回としたカウンターとして 行変数を増やしていく役目です。これよって行変数が9までくると、この行には銘柄名が無いことを理解して、この時点で break によるループからの脱出用スクリプトが呼び出されて終了します。

Logger.log("Updating symbol: " + symbol); はスクリプトが実行されたときに各銘柄名に対するログメッセージを記録します。 ログメッセージを見れば、使用中のスプレッドシート上の銘柄名以外のすべてのデータをクリアできます。Script Editor を開いて View > Logs を見てください。各銘柄に対するログメッセージがパネルに表示されています。

log.png

Stock Price スクリプトを変更してみます

次の一連のイベントを観察してみます。
  1. スクリプトをインストールして実行を許可しました。
  2. 株式銘柄をn行まで入力しました(A1,A2,・・・An)。
  3. Finance > Get Stock を選択してスクリプトを実行します。
  4. シートを閉じて2~3日後にシートを開いてみます。
  5. Finance > Get Stock を再び選択します。セルに表示される情報が作成時のとき同じままです。 株式銘柄の入ってないセルはクリアして Get Stock を再実行します。残っているセルの情報が更新されているでしょう。
再実行したらデータが更新されるようにスクリプトを変更してみます。
  1. Script Editor を開いてください。
  2. Stock Price スクリプトが開いているか確認してください。
  3. 違っていたら エディターの File > Open から正しいスクリプトを出してください。
  4. 2つ目の関数の各行頭に2本のスラッシュを書き加えて、下の非連続の行を取り除くかコメントアウトしてください。
// if (!sheet.getRange(row, 2).getValue())
//      } else {
//      Logger.log("Already updated: " + symbol);
//    }
コメントアウトが完了するとエディター内のコードの色が変わります。
  1. 保存して、次からは Finance > Get Stock と選択するとすべてのセルが更新されます。 数分間隔で実行してタイムスタンプが更新されていることを確認してください。 * sample シート



    * ユーザーガイド/目次
    1. ユーザーガイド/Google Apps Script の概要
    2. Getting Started/Google Apps Scriptをはじめよう
    3. Writing Scripts/スクリプトを書く
    4. Common Tasks/一般的なタスクのプログラミング
    5. Events/イベントへの応答スクリプト
    6. User Interfaces/ユーザーインターフェースの組み込み
    7. Using GUI Builder/GUI ビルダー の使用
    8. Security/セキュリティ
    9. Troubleshooting/トラブルシュートとデバッグ
    --ユーザーガイド 2. Google Apps Scriptをはじめよう : end -- 2011/10/30