[技術書つまみ食い] 『MongoDB イン・アクション』第三回 の続きです。
3章 MongoDB を使ったプログラムの作成
前回は TwitterAPI の検索結果を MongoDB へ格納するところまでをやりました。
今回は格納されているデータを使って Web 画面に Tweet の内容を表示させます。
ハマったので fix
まぁ、ハマったって程では無いですが、やっぱり TwitterAPI の最新の仕様への対応は必要ですね。erb の一部に修正が必要でした。
当該箇所(p63)のサンプルコードは下記の通り。
<body> <h1>Tweet Archive</h1> <% TAGS.each do |tag|%> <a href="/?tag=<%= tag %>"><%= tag %></a> <% end %> <% @tweets.each do |tweet| %> <h2><%= tweet['text'] %></h2> <p> <a href="http://twitter.com/<%= tweet['from_user'] %>"> <%= tweet['from_user'] %> </a> on <%= tweet['created_at'] %> </p> <img src="<%= tweet['profile_image_url'] %>" width="48" /> <% end %> </body>
現行の TwitterAPI のレスポンスには from_user とかが無いので、実際に格納されているデータの構造を javascript シェルで覗いて、対応するように修正しました。
修正版は下記の通り。
<body> <h1>Tweet Archive</h1> <% TAGS.each do |tag|%> <a href="/?tag=<%= tag %>"><%= tag %></a> <% end %> <% @tweets.each do |tweet| %> <h2><%= tweet['text'] %></h2> <p> # <a href="http://twitter.com/<%= tweet['from_user'] %>"> <a href="http://twitter.com/<%= tweet['user']['screen_name'] %>"> # <%= tweet['from_user'] %> <%= tweet['user']['screen_name'] %> </a> on <%= tweet['created_at'] %> </p> # <img src="<%= tweet['profile_image_url'] %>" width="48" /> <img src="<%= tweet['user']['profile_image_url'] %>" width="48" /> <% end %> </body>
動作結果
sinatra サーバーを立ち上げてアクセスしたら、ちゃんと動いている事が確認できました。
とりあえずまとめ
Twitter みたいに、レスポンスのデータ構造がコロコロ変わるようなサービスと接続するアプリケーションを作るにあたって「とりあえずレスポンスを丸々保存しておいて、使うときに調整する」みたいなアプローチは超強力と言わざるを得ないですね。スキーマレスって、アタマでは理解していたつもりだったけど、思っていた以上に楽だって事が分かりました。
ココまでで第1部がおしまい。次から第2部4章です。これまでとは違って、少し複雑なアプリケーションを作るようなので、書いたソースは随時 github にプッシュしながら進めていこうかと思います。
以上!
ピンバック: [技術書つまみ食い] 『MongoDB イン・アクション』第五回 | UPEC Blog