2018年11月16日追記:
前回もそうですが、今回書いたやり方は「低レベルAPIを利用したテーブル操作」だったことがわかりました。
ということはもちろん「高レベルAPI」があって、それを使うとより簡単に記述できるようです。
すみません。
高レベルAPIを使ったデータの追加方法について書きました。
はじめに
今回はテーブルへのデータの追加方法の説明のやり直しです。
こちらも基本的にはテーブル作成と同じで、リクエストを作って、それをPutItemAsync
メソッドに渡すことでデータを追加できます。
渡すデータはユーザーID(文字列)
と保存したい値(キーバリューペア)
です。
キーバリューペアはDictionary<string, AttributeValue>
で
var tableName = "TestTable";
var intentRequest = input.Request as IntentRequest;
var sign = intentRequest.Intent.Slots["StarSign"].Value;
//ユーザーIDを`intentRequest`から取得
var userId = input.Session.User.UserId;
//永続アトリビュートの構築
var attrs = new AttributeValue();
//こんな感じで、任意のデータをキーバリューペアの形で追加していく。
//この「attrs」変数を「attributes」列の値として、あとでリクエストを構築する。
attrs.M.Add("sign",new AttributeValue{S="ふたご座"});
//リクエストの構築
var request = new PutItemRequest
{
TableName = tableName,//追加先のテーブル名
//各カラムの値を指定
Item = new Dictionary<string, AttributeValue>
{
{"id",new AttributeValue{S= userId} },
{"attributes",attrs}
}
};
//テーブルに追加
var result = client.PutItemAsync(request).Result;
attributes
列に入れるデータを作ります。これはAttributeValueのインスタンスです。
AttributeValueは以下のようなプロパティがあり、これらは格納するデータの種類になります。
Alexaスキルではこの「M」プロパティを使います。
このプロパティはDictionary<string,AttributeValue>
型なので、キー(文字列)とバリュー(これまたAttributeValue)を入れていきます。
今回はユーザーの発話から取得した星座の情報を保存しますので、「sign」をキーとして、バリューにnew AttributeValue{ S = "ふたご座"}
を入れます。
もし、複数ある場合は同じようにして「M」プロパティにAdd
していきます。
こうしてattributes
列に入れるデータを作ったら、それを使ってPutItemRequest
を作ります。
リクエストができたらPutItemAsync
メソッドに渡せば、指定したテーブルにデータが追加されます。
AWSコンソールで確認すると以下のように、Node.js版のスキルで作成されたテーブルと同じ形式でデータが追加れているのがわかります。
これで公式トレーニング第4回をC#で書くことができるはずです。
あ、データの取得忘れてた。