Advent Calendar in 信州松本(だけじゃなくてもいいよ)向けのネタは無事終了しましたが、その時に調査した内容などをまとめていなかったため、複数回に分けて残しておきます(リンク多)。
今回は9日目のネタの編集後記となります。
GoogleAppEngineとGoogleAppsScriptでアルクマを追いかける - メモ的な思考的な
Googleスプレッドシートの「ImportHtml」が使えるか?
Googleスプレッドシートの関数には「ImportHtml」というものがあり、これによりHTMLのテーブルデータを簡単に取得することができます。
Google spreadsheets function list - Drive Help
ただ、残念なことに、日本語の入っているテーブルデータを正しく取得できないため、今回のネタでは利用することができませんでした。
GoogleAppsScript(以下、GAS) でのJSONPレスポンスについて
作れば分かる本のエントリーでGoogleAppEngine(以下、GAE)でJSON連携はしたことがあったため、jQueryを使ってなにかうまく連携できないかを考えていました。
そんな中、以下の記事を見つけたことで、JSONPでいけると確信がもてました。stackoverflowは凄い。
jquery ajax - Google Apps Script (GAS) - Create ContentService API to serve JSON data from Google Drive - Stack Overflow
なお、GASでjQueryにレスポンスを返す場合には、受け取った「callback」パラメータの値を付けておきます。
/** * GETを受け取るところ */ function doGet(e) { var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); var json = JSON.stringify(createJSONFromCalendar()); // jQueryに返すため、受け取ったパラメータにある「callback」の値を先頭につけておく var jsonp = e.parameters.callback + "(" + json + ")"; output.setContent(jsonp); return output; }
GASでのWebサービス公開について
以下のドキュメントを参考にして、Webサービスとして公開することができました。
- Web Apps - Google Apps Script — Google Developers
- Google I/O で発表された GAS の新機能で Web アプリを作ってみた - WebOS Goodies
なお、GASでdoGet()のレスポンスをみるには、以下にある通り、hurlを使って確認することができました。
google apps script - doPost(e) does not return parameters but doGet(e) does? - Stack Overflow
jQueryでJSONPを扱う方法について
jQueryの公式ドキュメントを見ると、ver1.5からいろいろと手が加えられていました。
jQuery - jQuery.ajax()
そのため、以下のパラメータを設定することにしました。
パラメータ名 | 値 |
crossDomain | true |
dataType | jsonp |
scriptCharset | 'utf-8' |
cache | false |
一番最後のcacheについてはIEのために設定してみることにしました。
jQueryのajax通信がIE8で動かない|シラサヤ備忘館
公式ドキュメント関連
JavaScript
以下の内容を参考にしました。
参考:GAEでクロスドメイン通信する方法
今回はjQueryにて対応しましたが、GoogleAppEngineの場合は、以下にまとめられています。
Google App Engineでクロスドメイン通信 | Zafiel