もふもふ部の部長、原田敦です。
肩こりがひどいので仕事を早めに切り上げて趣味プログラミングしてます!
今日は爆速でWEBアプリケーション開発出来るSinatraさんを使ってGracenote APIから取得した曲データを画面に表示してみます。
環境
Mac OSX Lion
Ruby 1.9.3
爆速WEBアプリケーションフレームワークのSinatra
Sinatraは5〜10分くらいですぐにブラウザ経由で動くアプリケーションのひな形が出来る超スグレモノです。
趣味プログラミングをするときとか、Railsアプリを作る前のプロトタイプ的な用途で非常に便利。
No Life! No Sinatra!!
さて。
ではいつものようにgemを入れますね。
sinatraさんは修正が入るたびに再起動しないと反映されないのですが、shotgunというgemを使えば即時反映されるようになります。ありがたや。
Gemfile
1 2 3 4 5 |
source 'https://rubygems.org' gem "sinatra" gem "shotgun" gem "gracenote" |
管理しやすいのでyaml形式の設定ファイルを外出しします。
Gracenote公式で取得できるIDに置き換えてください。
前々回のID取得時のエントリもあるので、必要なら参照のこと。
音楽APIのGracenote APIを叩いてperfumeを検索してみた
config.yml
1 2 3 4 |
gracenote: clientID: "xxxxxxxxxx" clientTag: "xxxxxxxxxxxxxxxxxxxxxxxxxxx" userID: "xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx" |
検索フォームを置いたViewを作成します。
sinatraはerbも使えるので当然動的な値の表示もRails的な感じでかけます。
index.erb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="css/bootstrap.min.css" media="all" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="javascript/bootstrap.min.js"></script> <style type="text/css"> body { padding: 15px; font-size: 14px; font-family: メイリオ,Meiryo,'Lucida Grande','Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3',sans-serif; } </style> </head> <body> <header></header> <form action="/" method="post"> アーティスト名:<input type="text" name="artist" /><br /> アルバム名:<input type="text" name="album_title" /><br /> トラック名:<input type="text" name="track_title" /><br /> <input type="submit" value="検索"/><br /> <%= @result.class %> 取得結果<br /> <% @result.each do |rec| %> <table border="1"> <tr> <td>アルバムアーティスト名</td> <td><%= rec[:album_artist_name] %> </tr> <tr> <td>アルバムタイトル</td> <td><%= rec[:album_title] %></td> </tr> <tr> <td>ジャンル</td> <td><% rec[:genre].each do |genre| %><%= genre[:text] + "<br />" %><% end %></td> </tr> <tr> <td>アルバムアート</td> <td><img src="<%= rec[:album_art_url][0] %>" /></td> </tr> <tr> <td>アーティスト画像</td> <td><img src="<%= rec[:artist_image_url][0] %>" /></td> </tr> </table> <% end %> <br /> <%= @result %> </form> </body> </html> |
実行するプログラムを書いていきます。
こんな感じでgetとかpost + 文字列でアクションを切り分けます。簡単ですね!
main.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# coding:utf-8 require 'gracenote' require 'sinatra' require 'yaml' get '/' do @result = [] erb :index end post '/' do config = YAML.load_file( 'config.yml' ) gracenote_conf = config["gracenote"] spec = {:clientID => gracenote_conf["clientID"], :clientTag => gracenote_conf["clientTag"], :userID => gracenote_conf["userID"]} gracenote = Gracenote.new(spec) @result = gracenote.findTrack(params[:artist], params[:album_title], params[:track_title], "0") erb :index end |
実行してみましょう。
1 2 3 4 |
$ bundle install # 実行はrubyではなくshotgunを使う $ bundle exec shotgun main.rb |
http://localhost:9393 にアクセスして表示を確認。
※sinatraは4567番ですが、shotgunにするとポートが変わりますので注意。
検索するとこんな感じになります。
sinatraのサクサク感がハンパないよ!
おまけ
検索時にSSLエラーが出て結構ハマりました。
rvm環境の人に発生するのかな?
対策の情報はWEB上に結構あるのですがどれも解決しなかったので、gracenoteのgemの方をちょこっとごにょごにょしてます。詳細は割愛。
1 2 3 |
Errno::ECONNRESET at / Connection reset by peer - SSL_connect file: http.rb location: connect line: 800 |

原田 敦

最新記事 by 原田 敦 (全て見る)
- Rails Engineでブログ機能追加するgemを作る - 2015年3月15日
- WEBエンジニア一人だけでサービスを作りきる方法-夫婦のための自動ごはん予定お知らせサービス「GoHaaan」制作でやったこと - 2015年3月7日
- CentOS6でMariaDBのDynamic Columnsを試してみた - 2015年2月28日