Skip to content

Instantly share code, notes, and snippets.

@GRGSIBERIA
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GRGSIBERIA/02eda5761ad24af9762e to your computer and use it in GitHub Desktop.
Save GRGSIBERIA/02eda5761ad24af9762e to your computer and use it in GitHub Desktop.
mixture3d (仮)のDynamoDBの仕様とサンプルコード
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.0.0-rc1.min.js"></script>
<script src="sha512.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
/*
鍵自体は公開してるので,いたずらしない範囲でご自由に
Scan, Query, PutItemのみポリシーで許可しています
(仮)版の間は定期的にテーブルを掃除します
*/
AWS.config.update({
accessKeyId: 'AKIAJCEXPS5YB4MQ5XNQ',
secretAccessKey: '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'
});
function Debug(str) {
var elem = document.createElement("p");
elem.innerHTML = str;
document.body.appendChild(elem);
}
/*
DynamoDBのItemに投げるパラメータの仕様
vId ... IPアドレス + ユーザエージェント + サービス名 + Date.getTime()をSHA512でハッシュ値にしたもの
vServiceName ... 自分のサービスの名前
vTags ... 整形済みJSON文字列, 詳細はgetTagsFromJSONStringを参照
vExt ... コンテンツの拡張子
vCreatedAt ... 現在時刻,new Date().toLocaleString("en-US", {hour12: false})で固定
*/
function createItemParameters(vId, vServiceName, vTags, vExt) {
var vCreatedAt = '' + new Date().toLocaleString("en-US", {hour12: false});
var itemParams = {
Item: {
id: {S: vId},
createdAt: {S: vCreatedAt},
serviceName: {S: vServiceName},
tags: {S: vTags},
extension: {S: vExt}
}
};
return itemParams;
}
// DynamoDBにItemを登録する
function putItem(table, vId, vServiceName, vTags, vExt) {
var itemParams = createItemParameters(vId, vServiceName, vTags, vExt);
table.putItem(itemParams, function(error) {
if (error) {
Debug("失敗");
} else {
Debug("成功");
}
});
}
/*
個々のタグで使えるキーの一覧
C ... カテゴリ名
N ... タグ名
V ... 値(小数点なし)
U ... 値の単位
値はすべて--小文字英数字とアンダーバーのみ--
*/
function getTagsFromJSONString() {
var tagsJSON = {
"params": [
{"C": "human", "N": "yamada"},
{"C": "human", "N": "suzuki"},
{"C": "human", "N": "satou"}
]
};
return JSON.stringify(tagsJSON);
}
function getDynamoTable() {
var table = new AWS.DynamoDB({
params: {
TableName: "mixture3d-tags",
},
region: "ap-northeast-1"
});
return table;
}
function connectDynamo(id) {
var table = getDynamoTable();
var serviceName = "mixture3d";
var tags = getTagsFromJSONString();
putItem(table, id, serviceName, tags, ".txt");
}
function createID(json, serviceName) {
// IPアドレス + ユーザエージェント + サービス名 + 時刻(ミリ秒)
var text = json.query + navigator.userAgent + serviceName;
var now = new Date().getTime();
var sha = new jsSHA(text + now, "ASCII");
return sha.getHash("SHA-512", "HEX");
}
function connectStart() {
// ユーザのIPアドレスをここで取得
$.getJSON("http://ip-api.com/json", function(json) {
var hash = createID(json, "mixture3d");
connectDynamo(hash);
});
}
</script>
</head>
<body>
<input type="text" name="content" />
<button onclick="connectStart()">Upload to S3</button>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment