Google Apps Script(GAS)

GAS: new Date() したらアメリカ時間っぽいので日本時間で format する方法

March 6, 2021
Google Apps Script(GAS)
Google Apps Script(GAS)

Google Apps Script が実行されるサーバーはアメリカにあるらしい # console.log(new Date()); したらこんな出力となる。 Sat Mar 06 2021 01:48:51 GMT-0500 (Eastern Standard Time) 実行マシンのタイムゾーンで出力されるのは JavaScript の言語仕様的に間違ってなさそうだし、クラウドコンピューティングなんだからアメリカにあるサーバーで実行されていても驚きはしない。ただ日本のタイムゾーンで時刻を表示したいんだ!って時にどうするかという話。 日付フォーマット関数がユーティリティとして用意されている # Class Utilities | Apps Script | Google Developers 任意のタイムゾーンでフォーマット可能。日本時刻で出力するにはこうすればよい。 const dateStr = Utilities.formatDate(new Date(), 'JST', "yyyy-MM-dd'T'HH:mm:ssZ"); console.log(dateStr); 2021-03-06T15:59:19+0900 Utilities クラスには雑多な関数が集まっている # #dateFormat() 以外にも、 MD5, SHA1, SHA256 などのハッシュ値生成 BASE 64 エンコーダー/デコーダー Blob 操作 Blob の zip 圧縮/解凍 CSV パーサー sleep 関数 と色々あって興味深い。というかお前 sleep できるんかっていう。

GAS: BigQuery へ データセットをロードする

March 4, 2021
Google Apps Script(GAS)
Google Apps Script(GAS), BigQuery

やりたいこと # GAS から BigQuery へデータセットをロードする CSV によるロード JSONL によるロード CSV によるロード # 基本的にはリファレンスにあるサンプルコード通りに書けばよい テーブルを作成しながらロードするのでテーブル定義もコードに含まれる テーブル作成有無を気にしたくなかったのでサンプルコードに対して「テーブルが存在すれば削除して再作成してからロード」を追加している function loadCSVIntoBigQuery() { const csv = '1,2,abc,2021-03-01\n3,4,efg,2021-03-02'; const projectId = '<YOUR PROJECT ID IS HERE>'; const datasetId = '<YOUR DATASET ID IS HERE>'; const tableId = '<TABLE NAME TO BE CREATED>'; try { BigQuery.Tables.remove(projectId, datasetId, tableId); } catch(e) { console.log(e); } BigQuery.Tables.insert({ tableReference: { projectId, datasetId, tableId }, schema: { fields: [ {name: 'col1', type: 'INTEGER'}, {name: 'col2', type: 'INTEGER'}, {name: 'col3', type: 'STRING'}, {name: 'col4', type: 'DATE'}, ] } }, projectId, datasetId); const data = Utilities. ...

GAS: BigQuery へ SELECT クエリを実行する

February 27, 2021
Google Apps Script(GAS)
Google Apps Script(GAS), BigQuery

やりたいこと # Google Apps Script から BigQuery へクエリを発行する 発行したクエリの結果を取得する 事前に知っておくべきこと # 基本的にはリファレンスにある BigQuery Service のサンプルコード通りに書けばよい 標準 SQL とレガシー SQL というものがあり、BigQuery コンソールのデフォルトが標準 SQL、GAS の BigQuery ライブラリのデフォルトがレガシー SQL のため単純にコピペするとその差異で動かなかったりする クエリを渡す request オブジェクトに useLegacySql: false を渡してやると標準SQLで動く サンプルコード # function runQuery() { const projectId = '<YOUR PROJECT NAME HERE>'; let queryResults = BigQuery.Jobs.query({ useLegacySql: false, query: ` SELECT 1 AS num, 'aaa' AS str UNION ALL SELECT 2 AS num, 'bbb' AS str UNION ALL SELECT 3 AS num, 'ccc' AS str ` }, projectId); const jobId = queryResults. ...

GAS: UrlFetchApp で Slack に投稿を POST する

February 13, 2021
Google Apps Script(GAS)
Google Apps Script(GAS), WebAPI, HTTP

Google Apps Script から Slack へ投稿するには Incoming Webhook 経由で UrlFetchApp サービスを利用すれば良い。 function sendToSlack() { const url = '(Incoming Webhook URL for your workspace.)'; const payload = { text: 'Text to send to your workspace.' }; const params = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) }; const response = UrlFetchApp.fetch(url, params); console.log(response.getResponseCode()); } See Also # Class UrlFetchApp | Apps Script | Google Developers