目標
- Google スプレッドシートを更新したら、入力した URL のはてなブックマーク数を隣のセルに表示するところまでをやります
UrlFetchApp
UrlFetchApp クラスを使うことで外部URLへ HTTP/HTTPS リクエストを送って返り値を受け取ることができます
onEdit() 内では UrlFetchApp を使えない
Google Apps Script では Simple Triggers と呼ばれるイベントが用意されているので、これらと同じ名前の関数を用意してあげるだけでシートを開いた時や編集したときの処理を制御できます。
function onEdit(e){
var range = e.range;
range.setNote('hogehoge');
}
しかし編集時に実行される onEdit()
内では UrlFetchApp を使うことができないようです。
URLfetch in an event failing
そのため上記の URL の Answer にもあるように関数を作成し、トリガー経由で関数を実行するようにすることで編集時に UrlFetchApp.fetch
が動作するようにします。
以下でその方法を説明します。
完成品のコード
まず今回作成した Google Apps Script は以下のようになります。
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列目に表示するような内容になっています。
これをトリガーをつかって実行するように設定を行います。
トリガーの設定
メニューの時計アイコンをクリックします。
下記リンクをクリックして先に進みます。
この時にパーミッションの要求がでた場合はアクセスを許可してあげてください。
次の画面では以下の設定を参考にしてみてください
項目名 | 値 |
---|---|
実行 | fetchAndUpdate(実行される関数名) |
イベント | スプレッドシートから、値の変更 |
設定が完了したら、保存ボタンをクリックすれば完了です。
シートに戻って 1列目に任意のページの URL を入力すると勝手にブックマーク数が入力されるようになりました。
参考: Googleのスプレットシートで変更した内容をGoogle Apps Script経由でチャットワークに通知するライフハック的なものを作った話。