Last active
August 29, 2015 14:00
-
-
Save GRGSIBERIA/02eda5761ad24af9762e to your computer and use it in GitHub Desktop.
mixture3d (仮)のDynamoDBの仕様とサンプルコード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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