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

#kintoneから情報を取得する
##1.AWS Lambdaからkintoneにアクセスする
<a href="http://qiita.com/ha_ru_ma_ki/items/7b7f96ad90f776e9967e" target="_blank">ここ</a>と<a href="http://hacknote.jp/archives/12124/" target="_blank">ここ</a>を参考に。
プログラムファイルを準備するのはいいとして、requestモジュールをLambdaに登録するためにローカルでNode.js環境を構築してモジュールダウンロードしてプログラムファイルと一緒にzip化してLambdaにアップロードってのが…
とりあえず、私が書いたプログラムファイルは下記に。
※初期値は環境に合わせて変更してください

```Javascript: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コマンドないみたいなので<a href="http://qiita.com/zaburo/items/c1bded762ccb9c98a81c" target="_blank">7-Zip</a>とか使うといいらしいよ。めんどくさいけど。
##2.AWS API GatewayからAWS Lambdaにアクセスする
###Getメソッドを準備する
1で作成したLambda関数を呼び出すように設定。
それからCORSの設定。
そして__デプロイ__、これ大事。
変更した後もデプロイしてなくてよく嵌ります。
##3.外部サイトからAWS API Gatewayにアクセスする
下記のソースをローカルでもいいので作成して実行してみる。
うまくいけばデータを取ってきてなんか表示される。
※「AWS API Gatewayで作成したAPIのURL」は環境に合わせて変更してください。

```html: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メソッドを準備する
参照元は<a href="http://qiita.com/monamu/items/a257a57e3236fca91ddc" target="_blank">ここ</a>
ざっくり書くと
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: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にある情報を削除する