LoginSignup
6
4

More than 5 years have passed since last update.

外部サイトからkintone APIとやり取りする

Last updated at Posted at 2017-03-14

kintoneから情報を取得する

1.AWS Lambdaからkintoneにアクセスする

ここここを参考に。
プログラムファイルを準備するのはいいとして、requestモジュールをLambdaに登録するためにローカルでNode.js環境を構築してモジュールダウンロードしてプログラムファイルと一緒にzip化してLambdaにアップロードってのが…
とりあえず、私が書いたプログラムファイルは下記に。
※初期値は環境に合わせて変更してください

hoge.js
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」は環境に合わせて変更してください。

tekitou.html
<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」は環境に合わせて変更してください。

post.html
<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>

kintoneから取得した情報を更新する

kintoneにある情報を削除する

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4