kintoneから情報を取得する
1.AWS Lambdaからkintoneにアクセスする
こことここを参考に。
プログラムファイルを準備するのはいいとして、requestモジュールをLambdaに登録するためにローカルでNode.js環境を構築してモジュールダウンロードしてプログラムファイルと一緒にzip化してLambdaにアップロードってのが…
とりあえず、私が書いたプログラムファイルは下記に。
※初期値は環境に合わせて変更してください
var aws = require('aws-sdk');
var request = require('request'); // モジュールが必要
/* kintone用のパラメータ(変更が必要) */
var SUB_DOMAIN = 'サブドメイン初期値';
var LOGIN_NAME = 'ログイン名初期値';
var PASSWORD = 'パスワード初期値';
var APP_ID = 1; // アプリID初期値
exports.handler = function(event, context) {
var sub_domain = (event.sub_domain) ? event.sub_domain : SUB_DOMAIN // sub_domainパラメータ取得
var login_name = (event.login_name) ? event.login_name : LOGIN_NAME // login_nameパラメータ取得
var password = (event.password) ? event.password : PASSWORD // passwordパラメータ取得
var body_getrecords = {
app: (event.app_id) ? event.app_id : APP_ID // app_idパラメータ取得
}
//アプリからレコードを取得する際のヘッダー
var AUTH_VALUE = new Buffer(login_name + ':' + password).toString('base64');
var headers = {'X-Cybozu-Authorization': AUTH_VALUE};
var options_getrecords = {
url: 'https://' + sub_domain + '.cybozu.com/k/v1/records.json',
method: 'GET',
headers: headers,
'Content-Type': 'application/json',
json: body_getrecords
}
//レコードを取得
request(options_getrecords, function (error, response, body) {
if (!error && response.statusCode == 200) {
var records = body.records;
context.done(null, records);
}
})
};
それとNode.jsのモジュールをzip化する時のコマンドも一応。
mkdir nandemoiiyo
cd nandemoiiyo
npm install request
zip -r myfunc.zip hoge.js node_modules
ここでnpm installした時にnode_modulesが違うとこにできちゃったらプログラムファイルと同じディレクトリに持ってきてからzip化しないと私のように嵌ります。あとwindowsはzipコマンドないみたいなので7-Zipとか使うといいらしいよ。めんどくさいけど。
2.AWS API GatewayからAWS Lambdaにアクセスする
Getメソッドを準備する
1で作成したLambda関数を呼び出すように設定。
それからCORSの設定。
そして__デプロイ__、これ大事。
変更した後もデプロイしてなくてよく嵌ります。
3.外部サイトからAWS API Gatewayにアクセスする
下記のソースをローカルでもいいので作成して実行してみる。
うまくいけばデータを取ってきてなんか表示される。
※「AWS API Gatewayで作成したAPIのURL」は環境に合わせて変更してください。
<html lang="ja">
<head>
</head>
<body>
<script>
fetch('AWS API Gatewayで作成したAPIのURL', {
method: 'GET',
}).then(function(response) {
return response.json();
}).then(function(json) {
var len = json.length;
for(var i=0; i<len; i++) {
document.write(i + ':' + json[i].作成日時.value + ' ' + json[i].作成者.value.name + '<br>');
}
});
</script>
</body>
</html>
ちなみに、パラメータを渡して任意のアプリとかサブドメインとかからデータを取得するにはAPI Gatewayの設定をごにょごにょする必要があるけど、ここでは省略します。気が向いたら別枠で投稿するかも。
kintoneに情報を登録する
1.AWS API Gatewayからkintoneにアクセスする
Postメソッドを準備する
参照元はここ
ざっくり書くと
1.Postメソッド作成
2.「統合リクエスト」の「HTTP ヘッダー」に「X-Cybozu-API-Token」を作成
3.「統合リクエスト」の「本文マッピングテンプレート」に「Content-Type:application/json」のテンプレートを作成
{
"app":"${stageVariables.app}",
"record":{
"item1":{"value":$input.json('$.js1')},
"日本語項目":{"value":$input.json('$.js日本語')}
}
}
参照元のテンプレートではappの値をステージ変数にしてるけど、アプリが変わったら送信フィールドも変わるだろうからべた書きでもいい気がする。もしくはリクエストから来るjsonをそのまま送信したいなぁ。
あとCORS設定しなくてもデータは登録されるけど、レスポンスがうまく返ってこないのでレスポンスを利用する場合はちゃんとCORS設定しましょう。
2.外部サイトからAWS API Gatewayにアクセスする
下記のソースをローカルでもいいので作成して実行してみる。
うまくいけばデータを登録して、レスポンスとして登録idが表示される。
※「AWS API Gatewayで作成したAPIのURL」は環境に合わせて変更してください。
<html lang="ja">
<head>
</head>
<body>
<p>値1: <input type="text" id="value1" size="30" value="値1"></p>
<p>値2: <input type="text" id="value2" size="30" value="値2"></p>
<p><button id="button" type="button">submit</button></p>
<textarea id="response" cols=120 rows=10 disabled></textarea>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function(){
$("#response").html("Response Values");
$("#button").click( function(){
var JSONdata = {
js1: $("#value1").val(),
js日本語: $("#value2").val()
};
$.ajax({
type : 'post',
url : 'AWS API Gatewayで作成したAPIのURL',
data : JSON.stringify(JSONdata),
contentType: 'application/JSON',
dataType : 'JSON',
success : function(data) {
$("#response").html("success" + JSON.stringify(data));
},
error : function(data) {
$("#response").html("error" + JSON.stringify(data));
}
});
})
})
</script>
</body>
</html>