Amazon Honeycode は Webアプリをノーコードで開発できるツールです。(現在 パブリック・プレビュー中)
特徴として スプレッドシートをもとにデータ構造を設計していきます。 Google スプレッドシートや AppSheet の方がイメージが近いですね。
みんなスプレッドシートが大好きですね。
Amazon Honeycode
このブログでも、これまでにいくつか記事を投稿しているので、関心があれば参考にしてみてください。
Amazon Honeycode にデータを蓄積していくと、そのデータを BIツール等でも利用したくなるのではないでしょうか?
Honeycode と 他システムを連携するのはどのような方法が良いのかまだよく分かっていませんが、一つの方法として、全データを S3に書き出す方法を考えてみましょう。
ここ に Amazon Honeycode API QuickSight integration というサンプルがあります。 Amazon QuickSight は AWS の BIサービスです。
このサンプルを見ると、Honeycode の API を叩いてデータを取得しているようですね。
データを取得するには GetScreenData を使用します。 以下の例のように workbookId, appId, screenId を指定する必要があります。
const getSurveyResults = nextToken => HC.getScreenData({
workbookId, appId, screenId: readScreenId, nextToken
}).promise()
取得できるデータは こんな感じ。一回目はヘッダ情報が含まれています。
{
"results": {
"Block": {
"headers": [
{
"name": "DataCell2"
},
{
"name": "DataCell3"
},
{
"name": "DataCell4"
},
{
"name": "DataCell16"
}
],
"rows": [
{
"dataItems": [
{
"rawValue": "applicant",
"formattedValue": "applicant"
},
{
"rawValue": "work day",
"formattedValue": "work day"
},
{
"rawValue": "destination",
"formattedValue": "destination"
},
{
"rawValue": "result",
"formattedValue": "result"
}
]
}
]
},
"List": {
"headers": [
{
"name": "DataCell8"
},
{
"name": "DataCell9"
},
{
"name": "DataCell10"
},
{
"name": "DataCell20"
},
{
"name": "Expression 20b85bb6_d749_4932_9ca7_c506b335e9c9",
"format": "AUTO"
}
],
"rows": [
{
"rowId": "row:d3d0f969-88f6-4b21-871d-ff29935160f1/021151bc-b614-47d8-888e-b0c390e21595",
"dataItems": [
{
"overrideFormat": "CONTACT",
"rawValue": "foo@example.com",
"formattedValue": "名無しさん"
},
{
"overrideFormat": "DATE",
"rawValue": "44027",
"formattedValue": "7/15/20"
},
{
"overrideFormat": "ROWLINK",
"rawValue": "row:fae899f2-4511-4a73-b757-f4c086faf1fe/d518a603-b534-3645-83b2-42ee02e4c5ae",
"formattedValue": "本社"
},
{
"overrideFormat": "ROWLINK",
"rawValue": "row:75d352aa-5c70-4684-adcc-64d0f340344c/e5f55fbf-225e-3a6b-8e81-157fa45bc14c",
"formattedValue": "承認"
},
], // データが続く
}
]
}
},
"workbookCursor": 181030083,
"nextToken": "LWJRBzSxOI0rlm1+NUg4jVZZzYZCbdVXQa17is9Y6y52zZKqI7MAs6zKd/zqWHhwAhYSxK+oTh4JOSiwnnTY9OFFH7OO3L4yaK9WXCQ6wXsxsYZrlzTVeuvbOex+rr1+3B18vM0JyDeJkaC6tloFncwmkhur7x/DXMjMi3mEKewpSUgE5diJfv/W856Y98xBSFX+moArnTEfIJiaWqwT0UFs6x5a3ITaAAQYXxAk8qADLiENF00bxbHCZph+U1tQdBxjaKwdHK2UGVXVY1EJ8enMQ37kIjTx9rXvysa5fSk="
}
どうやら GetScreenData は 今のところ 100件ずつデータを返すようですね。(一回目のみ ヘッダ分があるので response.results["List"].rows.length は 99)
全てのデータを返しておらず、まだ続きがある場合は nextToken が入っています。 GetScreenData の引数に nextToken を指定すれば続きを取得でき、nextToken が undefined になるまで繰り返せば全てのデータを取得できるわけです。
let nextToken
do {
const response = await HC.getScreenData({workbookId, appId, screenId, nextToken}).promise()
nextToken = response.nextToken
for (let row of response.results["List"].rows) {
// 各行を処理
}
} while (nextToken)
Amazon Honeycode は Basic, Plus, Pro の 3種類の料金プランがあり、それぞれ 1ワークブックあたりの最大行数が決められています。
かつ、API を使用できるのは Plus プラン以上であり Basic(Freeプラン)では API を使用できないため、今回ご紹介した方法を採れるのは 有料プランである Plusプラン以上になります。
今後の機能強化を期待しましょう!