「「GAS Station #2」に参加してきました。」で書いた通り、先週GAS(Google Apps Script)のハンズオンイベント「GAS Station #2」に参加し、新しいAPI「Apps Script Execution API」を触ってきたので、どんな感じで使うのかを書いていこうと思います。
Execution APIは“自分が書いたGAS関数を外部から呼び出すAPI”で、複数のGoogleサービスを跨ぐ処理を行いたい場合、一つの関数にまとめてしまえば、単一のエンドポイントから処理を実行することができます。
(Office 365のunified APIに似ているところがありますね。)
参考情報
- GASのExecution APIを使ってGASを外部からぶっ叩く
- http://qiita.com/soundTricker/items/1bcfc5c9e80d29a7ae4b
- Apps Script Execution API
- https://developers.google.com/apps-script/guides/rest/
- Run Apps Script code from anywhere using the Execution API
- http://googleappsdeveloper.blogspot.jp/2015/09/run-apps-script-code-from-anywhere.html
呼び出すスクリプトの準備
- シート名を取得するスクリプトを呼び出すため、適当にスプレッドシートを用意します。シートのIDは下図の通り、URLから取得することができます。
- https://script.google.com/ から「空のプロジェクト」を作成します。
- 下記コードを貼り付けた後「myFunction」を実行し、動作確認を行います。
- シート名が取得できれば動作確認終了です。
1 2 3 4 5 6 7 8 9 10 11 | function getSheetNames(sheetId) { var ss = SpreadsheetApp.openById(sheetId); var sheets = ss.getSheets(); return sheets.map( function (sheet) { return sheet.getName(); }); } function myFunction() { Logger.log(getSheetNames( "シートID" )); } |
API IDとスコープの取得
- 公開メニューから「実行可能 API として導入」をクリックします。
- 実行可能 API として導入画面が表示されたらバージョンを入力し、「導入」ボタンをクリックします。
- 「スクリプトの新しいバージョンで新しいスコープが検出されました」との警告が表示された場合は、「続行」ボタンをクリックします。
- 「現在の API ID:」欄にAPI IDが表示されるので、メモ帳にコピーしておきます。
- ファイルメニューから「プロジェクトのプロパティ」をクリックします。
- 「スコープ」タブに表示される OAuth スコープをメモ帳にコピーしておきます(今回の場合は https://www.googleapis.com/auth/spreadsheets )。
クライアント IDとクライアント シークレットの取得
- リソースメニューから「Developers Console プロジェクト」をクリックします。
- Developers Console プロジェクト画面が表示されたら「このスクリプトが現在関連付けられているプロジェクト」の下にあるリンクをクリックします。
- Developers Consoleが表示されたら「APIと認証」から「API」を開きます。
- API ライブラリの検索ボックスに「Execution」と入力し、「Google Apps Script Execution API」を有効にします。
- 「APIと認証」から「認証情報」を開きます。
- 「認証情報を追加」から「OAuth 2.0 クライアント ID」をクリックします。
- クライアント ID の作成画面が表示されたら下記情報を入力し「作成」ボタンをクリックします。
- アプリケーションの種類:ウェブ アプリケーション
- 名前:Sample Client
- 承認済みの JavaScript 生成元:https://developers.google.com
- 承認済みのリダイレクト URI:https://developers.google.com/oauthplayground
- OAuth クライアント画面に表示される「クライアント ID」と「クライアント シークレット」をメモ帳にコピーし、「OK」ボタンをクリックします。
※ 通常はここでアプリに合わせた設定を行います。
OAuth Playgroundによる動作確認
- 「OAuth Playground」を開きます。
- OAuth 2.0 Configurationから「Use your own OAuth credentials」にチェックを入れ、「OAuth Client ID:」欄と「OAuth Client secret:」欄に、コピーしておいたクライアント IDとクライアント シークレットを貼り付けます。
- Step 1 Select & authorize APIsにある「Input your own scopes」欄にコピーしておいたスコープを貼り付け「Authorize APIs」ボタンをクリックします。
- 許可のリクエスト画面が表示されたら「許可」ボタンをクリックします。
- Step 2 Exchange authorization code for tokensにAuthorization codeが表示されたら「Exchange authorization code for tokens」ボタンをクリックします。
- Step 3 Configure request to APIが表示されるので、下記のように項目を設定し、「Send the request」ボタンをクリックします。
- HTTP Method:POST
- Request URI:https://script.googleapis.com/v1/scripts/(API ID):run
- Content-Type:application/json
- Enter request body:
- 無事にスクリプトが呼び出せれば、JSON形式で結果が返ってきます。
1 2 3 4 5 | { 'function' : 'getSheetNames' , 'parameters' : '(シートID)' , 'devMode' : true } |
※ 各パラメーターの説明は「GASのExecution APIを使ってGASを外部からぶっ叩く」をご参照ください。
というわけで、「GASのExecution APIを使ってGASを外部からぶっ叩く」を見ながらAPIを試してみましたが、特に問題もなく動作確認できました。
ただ、下記のような拡張サービスのURL Shortener APIを使ったコードを呼び出そうとしたところ、
1 2 3 | function getShortUrl(url){ return UrlShortener.Url.insert({longUrl:url}).id } |
下記のPERMISSION_DENIEDエラーが返ってきました。
「Method scripts.run」にも書いてありますが、現時点ではすべてのスコープに対応しているわけでは無さそうです。
このあたりは今後に期待したいところですね!
2015/11/19 追記:
VBAからの呼び出しについて記事を書きました。
・VBAマクロからGoogle Apps Script Execution APIを呼び出す。
//www.ka-net.org/blog/?p=6415
この記事へのコメントはありません。