[技術書つまみ食い] 『MongoDB イン・アクション』第三回 の続きです。
3章 MongoDB を使ったプログラムの作成
前回は TwitterAPI の検索結果を MongoDB へ格納するところまでをやりました。
今回は格納されているデータを使って Web 画面に Tweet の内容を表示させます。
ハマったので fix
まぁ、ハマったって程では無いですが、やっぱり TwitterAPI の最新の仕様への対応は必要ですね。erb の一部に修正が必要でした。
当該箇所(p63)のサンプルコードは下記の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < 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 > <%= tweet['from_user'] %> </ a > on <%= tweet['created_at'] %> </ p > < img src="<%= tweet['profile_image_url'] %>" width="48" /> <% end %> </ body > |
現行の TwitterAPI のレスポンスには from_user とかが無いので、実際に格納されているデータの構造を javascript シェルで覗いて、対応するように修正しました。
修正版は下記の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < 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 > # <%= 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