こんばんは。 @hrysd です。
弊事業部には @takkanm が管理しているアカウントリストというスプレッドシートがあります。 これには、メンバーが各サービスで使用しているアカウント名等が集約されていて新しいメンバーが増えた時なんかに更新されています。
スプレッドシートどこにあるの問題
スプレッドシートの URL を覚えていないので、どこにあるのか全く見当がつかないという理由から、 日常的に使用している esa.io に貼り付てみました。
これだとスプレッドシートの内容で検索する事が出来ないため、Google Apps Script を使用してスプレッドシートの中身と記事の更新を連動させたいと思います。
Google Apps Script を書く
スプレッドシートを開きツールバーの ツール > スクリプト エディタ
を開く事で Web 上から編集を行う事も出来ますが、npm のモジュールを使用したい等の理由から手元のTerminalで作成していきます。
$ mkdir post_to_esa && cd post_to_esa $ npm init -y $ npm install -D browserify gasify $ npm install -S markdown-table
実際に記述したコードが以下になります。 内容としてはスプレッドシートをマークダウン形式のテーブルに変換して、esa.io の記事を更新するというものです。(POST_ID と ACCESS_TOKEN をベタに書いているけど、うまい方法がわからなかった...)
var table = require('markdown-table'); var POST_ID = 12345; var ACCESS_TOKEN = 'ACCESS_TOKEN'; global.myFunction = function() { var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); var rows = sheet.getDataRange().getValues(); var stringifiedPayload = JSON.stringify({ post: { name: 'アカウントリスト', body_md: table(rows), tags: [], category: '', wip: false, message: '情報量が増えました', updated_by: 'esa_bot' } }) UrlFetchApp.fetch( 'https://api.esa.io/v1/teams/esminc/posts/POST_ID?access_token=ACCESS_TOKEN', { method: 'PUT', contentType: 'application/json', payload: stringifiedPayload } ); }
これをコンパイルし、中身をスクリプトエディタに貼り付けます。
$ $(npm bin)/browserify main.js -p gasify -o bundle.gs
スプレッドシート更新のタイミングでスクリプトが動くようにする
スクリプトエディタを開き、ツールバーの リソース > 現在のプロジェクトのトリガー
より設定していきます。
今回は、更新時にスクリプトが呼ばれるようにしたました。
結果
スプレッドシートを更新する事で自動的に esa.io の記事も更新されるようなりました。(モザイク処理には Pixelmator を使用)
最後に
Google Apps Script を使う事で簡単にサービス間での連携を行う事ができました。生成物をコピーアンドペーストしている箇所がいけてない感が強いので、スクリプトをローカルで管理できる soundTricker/gas-manager みたいなのも試してみたいです。