💪
CODEPOWER GAS(RPA)コース メモ
CODE POWER
ステージ一覧
- ステージ1 名言・格言Botの構築
- ステージ2 名言・格言Botの拡張〜名言・格言の追加〜
- ステージ3 メールマガジンシステムの構築
- ステージ4 会議室予約システムの構築
- ステージ5 会議室予約システムの拡張〜自動スケジューリング〜
- ステージ6 経路探索システムの構築〜APIの活用〜
- ステージ7 運行状況通知システムの構築〜スクレイピングの活用〜
- ステージ8 情報収集システムの構築〜スクレイピングの応用〜
- ステージ9 Webアプリケーションの活用
- ステージ10 Webアプリケーションの活用〜応用編〜
利用したシステム
- Google Spread Sheet
- Google Calendar
- Gmail
- Google Forms
- Google Maps
- Google Apps Script
- Mattermost
- スクレイピング
備忘録
-
GAS は Google Drive から作成する方法、Spread Sheet などから作成する方法の2種類ある
- Standalone Scripts
Google Driveから作成するスクリプト - Countainer-bound Scripts
サービスと紐づけられているスクリプト
- Standalone Scripts
-
Trigger の種類
-
Simple Triggers
関数としてGoogle Apps Script に事前に用意されている。No 関数 概要 1 onOpen(e) スプレッドシート、ドキュメント、スライド、フォームなどを開いた際に実行される関数 2 onEdit(e) スプレッドシートを編集した際に実行される関数 3 onInstall(e) アドオンがインストールされた際に実行される関数。アドオンとは他サービスとGoogle のサービスを連携できるサービスのこと。 4 doGet(e) Webアプリケーションにアクセスされたり、WebアプリケーションにHTTP GET リクエストを送られた際に実行される関数。 5 doPost(e) Webアプリケーションにアクセスされたり、WebアプリケーションにHTTP POST リクエストを送られた際に実行される関数。 -
Installable Triggers
Simple Triggers で用意されているトリガー以外。時間主導軸やフォーム送信時など
-
-
Spread Sheet の内容を Mattermost へ post する
- Webhook
- Spread Sheet に Forms で追加していくことも可能
- おそらく、Forms 以外の列を追加しても良い
-
Google Forms の内容は GAS から作成することも可能
-
Logger.log()
で状態を確認しながら作る。デバッグでも可。- Break Point を設定した行は実行しない状態で止まる
-
スクリプト実行時
- アカウントにログイン
- リクエストの許可 → 詳細
- 安全ではないページに移動
- 許可
-
Google Forms
- Forms 登録 → 予定確認 → 予約可能 or not → メール送信
-
Spread Sheet
- 開き方
var spreadsheet = SpreadsheetApp.openById('スプレッドシートID'); var sheet = spreadsheet.getActiveSheet(); OR var sheet = spreadsheet.getSheetByName('アドレス'); var range = sheet.getRange(row,column); var value = range.getValue();
- データ取得
//メールアドレス取得 for(var i=1;i<=lastRow;i++){ list += sheet.getRange('A'+ i).getValue() + ','; }
- 開き方
-
Mattermost Post 方法
var url4chat = 'WebhookのURL'; var botMessage = { 'text' : 'Hello from GoogleAppsScript!'}; var options = { 'method': 'POST', 'headers' : { 'Content-Type': 'application/json; charset=UTF-8' }, 'payload':JSON.stringify(botMessage) }; var result = UrlFetchApp.fetch(url4chat, options);
-
MailApp
-
マニフェストファイルの表示
サイドパネルの「プロジェクトの設定」から『「appscript.json」マニフェストファイルをエディタで表示する』を選択 -
Forms
- 送信時の例
function onFormSubmit(event){ // 実行結果を記録 Logger.log("-cpdx4- Start"); // 登録されたアイテムを取得する var itemResponses = event.response.getItemResponses(); var email = event.response.getRespondentEmail(); // 予約者のメールアドレス // フォームから予約したい会議室、時間の情報を受け取る var roomName = itemResponses[0].getResponse(); // 予約する部屋名 var reserveDay = itemResponses[1].getResponse(); // 予約する日 reserveDay = reserveDay.replace(/-/g,'/');
- 送信時の例
-
Calendar
- 予定登録例
function calender_test() { var calender = CalendarApp.getCalendarById('自分のカレンダーID'); var startTime = new Date('今日の日付 13:00'); //開始日時 var endTime = new Date('今日の日付 15:00'); //終了日時 var event = calender.createEvent('テスト', startTime, endTime); }
- 予定登録例
-
HTML やデプロイもでキル
-
Google Maps
- getTime
function getTime(str,dst) { var APIKEY = `APIKEY`; var date = new Date(); var nonce = Math.floor((date.getTime()/1000)).toString(); var url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric" + "&language=" + "ja" + "&origins=" + str + "&destinations=" + dst + "&mode=" + "driving" + "&departure_time=" + nonce + "&key=" + APIKEY; var res = UrlFetchApp.fetch(url); var json = JSON.parse(res.getContentText()); if (json["status"] == "OK") { var min = json["rows"][0]["elements"][0]["duration"]["value"]; return min; } }
- Distance Matrix API
- 基本URL
https://maps.googleapis.com/maps/api/distancematrix/outputFormat?parameters - 例
https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&language=ja&origins=東京駅&destinations=新宿駅&mode=driving&key=APIKEY
- JSON 例
Logger.log(json["rows"][0]["elements"][0]["distance"]["text"]);
- 基本URL
- getTime
-
HTTP
- res_test
function res_test() { var web = "https://transit.yahoo.co.jp/traininfo/area/4/"; var response = UrlFetchApp.fetch(web); var status = response.getResponseCode(); var header = response.getHeaders(); var body = response.getContentText(); Logger.log(response); Logger.log(status); Logger.log(header); Logger.log(body); }
- 型
- response : オブジェクト型
- status : 数値型
- header : オブジェクト型
- body : 文字列型
- res_test
-
正規表現
- Google Docs で試してからコーディングした方が効率良さそう
- 主要
- 1.任意の文字を検索「.(ピリオド)」
- 2.文字、数字、アンダースコアのみを検索「\w」
- 3.数字のみを検索「\d」
- 4.空白を検索「\s」
- n 回、n 回以上の繰り返しを検索する「{n}」「{n,}」
- 1 回以上繰り返しを検索する「+」
- 0 回以上の繰り返しを検索する「*」
- 0 回もしくは 1 回の繰り返しを検索する「?」
- グループ化をおこなう「( )」
- いずれかの文字などを検索する「[ ]」
- Option
- オプション「ig」
記述することによって、大文字小文字を区別せず(i)、検索された全ての結果を表す(g)
- オプション「ig」
- 処理方法
- exec()
- () の中に記述された文字列の中で、正規表現の記述と一致する文字列を検索する。検索の結果、配列が返る。
- 例:
RegExp.exec(String)
- RegExp: 正規表現、String: 文字列
- replace()
- () の中の RegExp に記述した正規表現で検索された文字列を、() の中の String に記述した文字列に置換する。
String.replace(RegExp , String)
- String: 文字列、RegExp: 正規表現
- match()
- () の中の RegExp に記述した正規表現で検索された文字列と一致した文字列を配列として返す。
String.match(RegExp)
- String: 文字列、RegExp: 正規表現
- exec()
-
LanguageApp
Discussion