LoginSignup
7
7

More than 5 years have passed since last update.

Google スプレッドシートで編集したら Google Apps Script で HTTP リクエストを行う

Last updated at Posted at 2017-04-30

目標

  • Google スプレッドシートを更新したら、入力した URL のはてなブックマーク数を隣のセルに表示するところまでをやります

UrlFetchApp

UrlFetchApp クラスを使うことで外部URLへ HTTP/HTTPS リクエストを送って返り値を受け取ることができます

Google Apps Script — Google

onEdit() 内では UrlFetchApp を使えない

Google Apps Script では Simple Triggers と呼ばれるイベントが用意されているので、これらと同じ名前の関数を用意してあげるだけでシートを開いた時や編集したときの処理を制御できます。

onEdit.gs
function onEdit(e){
  var range = e.range;
  range.setNote('hogehoge');
}

しかし編集時に実行される onEdit() 内では UrlFetchApp を使うことができないようです。
URLfetch in an event failing

そのため上記の URL の Answer にもあるように関数を作成し、トリガー経由で関数を実行するようにすることで編集時に UrlFetchApp.fetch が動作するようにします。

以下でその方法を説明します。

完成品のコード

まず今回作成した Google Apps Script は以下のようになります。

sample.gs
var API_URL = "http://api.b.st-hatena.com/entry.count?url=";

function fetchAndUpdate() {
  try {
    // アクティブになっているスプレッドシートの情報を取得する
    var ss = SpreadsheetApp.getActiveSpreadsheet();

    // アクティブになっているシートの名前が sheet1 ではなかったら終了
    if (!ss.getActiveSheet().getName().match(/sheet1/)) return;

    // アクティブなセルの情報を取得
    var rng = ss.getActiveSheet().getActiveCell();

    // アクティブなセルの値
    var activeCellValue = rng.getValue();

    // アクティブなセルが1列目じゃなかったら終わり
    if (rng.getColumn() !== 1) return;

    // はてブのAPIへリクエストを送って返り値を受け取る
    var response = UrlFetchApp.fetch(API_URL + activeCellValue);
    var bookmarked = response.getContentText();

    // アクティブになっている行のB列にブックマーク数を表示する
    ss.getRange("B" + rng.getRow()).setValue(bookmarked);
  } catch (err) {
    Logger.log(err);
  }
}

1列目に URL を入力するとはてブ数取得してきて隣の2列目に表示するような内容になっています。

これをトリガーをつかって実行するように設定を行います。

トリガーの設定

メニューの時計アイコンをクリックします。

https://gyazo.com/e39d446edb01e5dd748f1602aa137fc4

下記リンクをクリックして先に進みます。

https://gyazo.com/e0aec5d6ec9ca885664537cf9c5a547d

この時にパーミッションの要求がでた場合はアクセスを許可してあげてください。
次の画面では以下の設定を参考にしてみてください

https://gyazo.com/8773c445f3c02bfcddda6e70954b0b1c

項目名
実行 fetchAndUpdate(実行される関数名)
イベント スプレッドシートから、値の変更

設定が完了したら、保存ボタンをクリックすれば完了です。

シートに戻って 1列目に任意のページの URL を入力すると勝手にブックマーク数が入力されるようになりました。

https://gyazo.com/feabdf0fce1eb4545d1458d857d83fbe

参考: Googleのスプレットシートで変更した内容をGoogle Apps Script経由でチャットワークに通知するライフハック的なものを作った話。

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7