無料で作ったMongoDBのデータをGoogle Apps Scriptで取得する
Google Apps Scriptを使ってMongoDB Atlasを呼び出す方法です。
これで無料で作ったNoSQLのMongodbからデータを取得して、
Googleのスプレッドシートに貼り付けるなんて事ができます。
MongoDB Stitch サービスの作成
Login | Cloud: MongoDB CloudからMongoDB Atlasのサイトにログインし、MongoDB Stitchの設定を行います。
DBからデータを取得しURLでアクセスするための口を用意する所までMongoDB Stitchがやってくれます。
Billing — MongoDB Stitch によると、月間25GBの転送と1,000,000回の実行までが無料枠の範囲内です。
- 画面上部のAtlas,Stitch,Chartsと並んでいる箇所のStitchをクリックする。
- 画面右上のCreate New Appをクリックする。
- アプリケーション名を入れる(ex. sampleApp)。
- データベースのクラスターを選択肢から選ぶ。
- 作成したアプリケーションが表示されるので、左メニューの「3rd Party Services」をクリックする。
- Add a serviceノボタンをクリックする。
- HTTPを選択する。
- Service Name(ex. SampleService)を入れてAdd Serviceボタンをクリックする。
- 作成したサービスが表示されるので、Add Incoming Webhookをクリックする。
- Nameを"webhooksample"、Authenticationをデフォルトのまま"System"とする。
- その他はそのままSaveボタンをクリックする。
URLにアクセスして利用できるStitchのサービスが作れました。
次に画面に表示されるFunction Editorでコードを編集し、使用する機能を設定します。
MongoDB Stitch HTTP WebHookの公開
Function Editorに記載する内容については、Create an Incoming Webhook — MongoDB Stitchが参考になります。
Webhook URLにPOSTされた内容はpayloadに入っています。
payload.body.text()で中身にアクセスできますが、
ここでは単純にデータベースにアクセスしてデータを取得するようにします。
exports = function(payload, response) {
const mongoService = context.services.get('mongodb-atlas');
const mongoDB = mongoService.db("データベースの名称");
const collection = mongoDB.collection("コレクションの名称")
const item = collection.findOne();
return item;
};
上記を記載したらSaveをクリックします。
画面上部に「REVIEW & DEPLOY CHANGES」と表示されている場合、ボタンをクリックしDeplyを選択します。
この手順を踏まないととサービスが最新の状態になりません。
(あるいは、画面左メニューのMANAGEのDeployから実施します)
Settingタブに戻ってWebhook URLの値をメモしておきます。 後でGoogle Apps Script側で使用します。
https://webhooks.mongodb-stitch.com/api/client/v2.0/app/sampleapp-******/service/SampleService/incoming_webhook/webhooksample
Googleのスプレッドシート、Google Apps Script(GAS)の設定
Googleのスプレッドシートを表示します。 ツールのスクリプトエディタをクリックし、以下のGoogle Apps Script(GAS)を記述します。
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "読込テスト",
functionName : "readMongoDB"
}
];
sheet.addMenu("デモメニュー", entries);
};
function readMongoDB() {
var options = {
'method' : 'post',
'payload' : null
};
var mongoJson = UrlFetchApp.fetch('https://webhooks.mongodb-stitch.com/api/client/v2.0/app/sampleapp-******/service/SampleService/incoming_webhook/webhooksample', options);
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("シート1");
var range = sheet.getRange("A1")
range.setValue(mongoJson)
}
Googleスプレッドシート動作確認
Googleスプレッドシートの読込をし直します。 メニューに「デモメニュー」の項目が表示されるはずです。
ここまでの設定がうまく出来ていれば、 デモメニューの「読込テスト」をクリックするとA1セルにJSONが設定されます。 (権限が要求された場合権限を与えます)
権限の設定
公開したHTTP WebHookですがこのままだと誰からでもアクセス可能になっています。
以下の手順でAPIキーを元にしたアクセス制限を行うようにします。
- Stitchのアプリケーションの画面を表示します。
- 左メニューのUsersをクリックします。
- Providersタブを選択し「API Keys」をクリックします。
- Provider Enabledを「ON」にします。
- 「Create APIKey」をクリックしNameを入力します(ex. MyTestKey)。
- Saveをクリックし、表示された文字列をメモしておきます。
- 画面右下のSaveをクリックします。
- 左メニューの「3rd Party Services」から作成したサービスのSettingsタブを表示します。
- Authenticationを「Application Authentication」に変更し保存します。
- 左メニューの「Rules」から「Add Collention」ボタンをクリックします。
- Database NameとCollection Nameを選択し、Choose a Permissions Templateは「Users can only read all data」を選択します。
- 画面上部「REVIEW & DEPLOY CHANGES」ボタンをクリックしDeplyを選択します。
Google Apps Script(GAS)側は以下のように書き換えることでAPI Keyを指定できるようになります。
var data = {
"api-key": "***********************"
};
var options = {
'method' : 'post',
'payload' : JSON.stringify(data)
};
var mongoJson = UrlFetchApp.fetch('https://webhooks.mongodb-stitch.com/api/client/v2.0/app/sampleapp-******/service/SampleService/incoming_webhook/webhooksample', options);
参考ページ
- Create an Incoming Webhook — MongoDB Stitch
- Stitching Sheets: Using MongoDB Stitch To Create An API For Data In Google Sheets | MongoDB
- mrlynn/stitching-sheets: Stitching Sheets: Using MongoDB Stitch to Create an API for Google Sheets
- Google Sheets Script - Complete Script for Article Stitching Sheets