19
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps ScriptAdvent Calendar 2013

Day 4

Google SitesのリストページはGASによって羽ばたく

Last updated at Posted at 2013-12-05

意味がわかりませんね。
Google Apps Script Advent Calendar 4日目があいちゃったので補填投稿です。

では今回はGoogle SitesのリストページとGASについて書いていきたいと思います。

Google Sitesのリストページ?

以下の様なページです。
https://sites.google.com/site/keisukeoohashi/listpage

一見Google Sites内で一覧表示したり、課題管理したり、Todo管理したりできる、
いい感じのページなのですが、
自動でタスクを削除したり、
隠したり更新から何かフックさせてなんかやるみたいなことができない、ちょっと片手落ちな機能なのです。

Google Apps Scriptが加わると....

さてそんな不憫なリストページですが、
「自動で削除」や「更新したら何か」はGASを使えばできるわけで、
GASを使うとかなりいい機能になる代表格と言えます。

色々抑えておくポイント

データの取得と更新

以下の感じのコードになります。

//データの取得
function getListItemsData() {
  var page = SitesApp.getPageByUrl("https://sites.google.com/site/keisukeoohashi/listpage");
  
  //リストの取得
  var items = page.getListItems();
  
  //カラムヘッダーの取得
  var columns = page.getColumns();
  
  //詰め込み用
  var dataList = [];
  
  //全部取得
  for(var row = 0; row < items.length; row++) {
    var item = items[row];
    
    var data = {};
    for(var colIndex = 0; colIndex < columns.length; colIndex++) {
      var columnName = columns[colIndex].getName();
      data[columnName] = item.getValueByIndex(colIndex)
    }
    
    dataList.push(data);
  }
  
  //これで dataList[行番号][カラム名]でアクセス可能
  //ちなみに
  //checkboxの場合はチェックが付いていると"on" ついてないとnullになる。
  //URLはAタグ付きで来る 非常に困る。
  //日付は yyyy-MM-dd っぽい
  Logger.log(dataList);
  
  
  
  //ちなみに好み的には以下のコードで書いた方好きだけど(読まなくて良い)
  var dataList2 = items.map(function(item){
    return columns.reduce(function(data, column){
      var columnName = column.getName();
      data[columnName] = item.getValueByName(columnName);
      return data;
    }, {});
  
  });
  Logger.log(dataList2);
  
}

//データの更新
function insertNewData() {
  var page = SitesApp.getPageByUrl("https://sites.google.com/site/keisukeoohashi/listpage");
  
  //登録は非常に簡単
  //カラムの順番と同じ順の配列を渡すだけ
  //
  //なんだけど、
  //データの整合性チェック(リストから選ばれてる?とか、日付になっている?とか、チェックボックス値とか)は
  //行われない ただしURL(Aタグ)は除く ... なんで...
  page.addListItem([
    "ほげ","ふが","ほげ","ほげ","ほげ","on","2013-12-01","<a href='https://google.com'>ほげ</a>"
  ]);
 
}

トリガー

リストページが更新されたら、GASを走らせるみたいなトリガーは2013/12/05現在存在しない。
なので、

  • 時間トリガーを使い、定期的にリストページを監視する。
  • Google Apps Script起動用アンカーをリストページ内におき、更新時にクリックしてもらう。

の2種類が一般的な方法だと思います。
個人的には両方やっておくことをオススメします。

1つ目の方は普通にトリガーの登録の仕方と同じです。

2つ目の方は、Google Sitesのページにて、編集モードにし、メニューの「挿入」→「リンク」→「Appsスクリプト」から選択可能です。
ただしここで表示されるスクリプトは「Google Sites内に作成したスクリプト」だけになります。
注意してください。

まとめ

個人的には、Google SitesのリストページとGASの組み合わせは非常に好きです。
例えば
Todoリストをリストページで作成しておき、GASでSpreadsheetへ定期的にバックアップ & 終了したタスクは削除
みたいなものをしたり、
設定ファイル代わりに使ったりも可能です。

Google Sitesとその他のアプリケーションを簡易に結合ができるようになりますので、ぜひ試してみてください。

19
21
3

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
19
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?