Zapier じゃなくても普通にコード書いて自動化してみる。Google Apps Scriptでね
思ったほどZapier を使えてない自分。。。
ご存知のことかと思いますが、結構 Zapier を有効活用しようとしてあれこれ試していますが、multi-steps 対応のためにコストを払ってまでやっているものの、普段は思ったほどZapを起動することもなく、と言って、ちょっとしたことをしようとすると、1,000 zaps のはずが 1,000 steps じゃないの?と思うようなカウントをされているのをみて「うーむ」
と使う方に躊躇してしまっています。
まぁ、Soldie の連載のためにChatworks と Trello のアカウントを開けたけど、普通にこれを使う人ならうまい連動の仕方とかも考えるのだろうけど、使いきれていないから連動のアイデアも出てこない。
となると、Zapierをフルに使うために痒いところに手の届くようなコードを書いたらいいのでは、なんて Javascript で何か。。。と思ったものの、Zapier で動かせるののは Node.jp という極めてシンプルな環境なので色々と面倒。。。
Google Apps Script って知ってました?
![]() |
なんのコードだろう。。。 |
これを使おうと思ったらGoogle Spreadsheet のツールの中にスクリプト・エディタが選べるので(初回は承認をする必要があるものの、それさえすれば)無料でJavascript であれこれできる環境が手に入るのです。
まぁ、元々が Excel に対するVBA の扱いと同じなので前提が Spreadsheet とのインタラクション、ということになっているものの、Javascript で Spreadsheet 以外のGoogle のWebサービスに結構アクセス可能ですので、G-Suite 間での自動化ならこれでできそうな気になってきます。
で、早速こんなものを書いてみました。
会計士の先生との経理上の確認のために、Google Drive のフォルダの一部にアクセス権を先生に渡して、そこに領収書のpdfファイルを置いてみて確認してもらうようにしているのですが、メールの添付できた領収書のpdf を自動的にフォルダにしまって置いてもらえたら、手間がかからないよな、と思ったので、こんなコードを書いてみました。
var FOLDER_ID = 'hogehoge'; //保存するフォルダのURL
var SEARCH_TERM = 'from:(hoge@foo.com) 請求書 has:attachment label:unread ';
function fetchFile(){
var myFolder = DriveApp.getFolderById(FOLDER_ID); //フォルダを取得
var myThreads = GmailApp.search(SEARCH_TERM, 0, 30); //条件にマッチしたスレッドを検索して取得
var myMessages = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得し二次元配列で格納
for(var i in myMessages){
for(var j in myMessages[i]){
var attachments = myMessages[i][j].getAttachments(); //添付ファイルを取得
for(var k in attachments){
myFolder.createFile(attachments[k]); //ドライブに添付ファイルを保存
}
}
}
for (var i in myThreads){
myThreads[i].markRead();//スレッドを既読にする
}
}
これを先ほどSpreadsheetから立ち上げたスクリプトエディタに書き上げて、セーブして、コードエディタのちょっと上にある時計マークである現在のスクリプトのトリガーをクリックして1時間に一回動くように設定すれば終了。なんとSpreadsheet のスクリプトなのにSpeadsheetを触ることなく終わるプログラムの完成です。
これに限らず、G-Suites間をあれこれこねくり回しつつ、外部のURLへのアクセスから JSON形式のデータを持ってきて作業することもできる、というので、何か面白いことでも考えてみようかな、とか思いますよね。実際Webサービスを立ち上げることすら出来る、というのですから、もうGoogle Cloud Platform で課金されずに作ることも可能なのです。
とはいえ、結構重くなる、ということですので、またPython で書きたい、という人には不向きですよね。さて、何書いてみるかな。。。
追記:上記のコードは、未読の一定のメールアドレスからの「請求書」とどこかに書いてあるメールを拾って作業する仕組みになっているのですが、当初のコードになかった部分として、作業した後に既読にしないと何度も繰り返すことになるので、既読にするステップを追加しました。おっと危なかった。。。
0 件のコメント:
コメントを投稿