発端
aikoさんの曲名は、カブトムシとかアンドロメダとか目を惹くタイトルが多いので、2つ並べたらより魅力的になるのではないか?
Cloudant
IBM Cloudが提供するNoSQLデータベースで、CouchDBなどと互換性がある。
無料のLiteプランで1GBまで保存できるので、テキストデータなどを保存する用途だと持て余すくらい多い。
30日何もしなければ消えるようです。
IBM CloudのダッシュボードからCloudantのサービスを作成し、Cloudantのページに行く。
そしてDBを作成。
今回は、歌手aikoの曲名を保存することにしたので、aiko_songsというDBを作った。
サンプルデータ
こちらのような曲名を列挙したcsvを用意する。
csvファイルにはヘッダは無い
番号 | 曲名 |
---|---|
1 | あした |
2 | ナキ・ムシ |
3 | 花火 |
… | … |
プログラム
今回はRubyで書いた。
# cloudantの設定
cloudant_url = "cloudant_address"
uri = URI.parse(cloudant_url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
coudant_url
には、cloudantのURLを指定する。
https://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-bluemix.cloudant.com/aiko_songs/
こういう形式で、末尾にDB名を追加する。
req = Net::HTTP::Post.new(uri.request_uri)
req['Content-Type'] = "application/json"
# CSVの1行ごとに登録
csv_data.each do |data|
payload = {
"_id" => data[0],
"song_name" => data[1]
}.to_json
req.body = payload
res = https.request(req)
jsonを作って、postすれば登録できる。
ただ、先にCloudant側でPermissionを設定しないといけない。
上記URLはUUIDということもあり、流石に推測できないので、テスト用途ならすべてONにしても大きな問題にはならないと思う。
(テスト終了後にちゃんとOFFにすること)
rubyファイルを実行すれば、Cloudantに登録される。
これを、同じくIBM Cloud上のNode-REDから呼び出したものがこちら
JavaScriptから呼び出すときは、jQueryを使うなら以下のような感じで、セレクタを書いて取得する。
以下の例では、単にランダムに取得しているだけ。
$.post("/getAikoSong",
{ "selector":
{"_id":
{"$eq": randomNum } // 乱数のIDの曲名を取ってくる。
}
}, function(data) {
// 取得した曲名を表示
mesDiv.innerHTML = data["docs"][0]["song_name"]
});
動作サンプル
aikoさんが悪いんじゃなくて、私が悪かったです。
済みません。