RAILS PRESS RUBY on RAILS, it’s DRY and COOL …

RSS Feed

RAILS PRESS RSS

Tag Cloud

はてなブックマーク - railspress.matake.jp の注目エントリー
象形文字くさび形文字ミイラそろばんの玉そろばんコーラン占いの板?象牙大英博物館
« 前のエントリ
iKnow! API をリリースしました
次のエントリー »
GitHub に自作の RubyGems を登録する方法

Posted on
2008/10/17

Tags
API, Gem, OAuth, iKnow!, お知らせ, インストール/設定, サンプルアプリ, リリース

Keywords


この記事をはてなブックマークに登録 この記事のはてなブックマーク数 この記事を livedoor クリップに登録この記事の livedoor クリップ数 このエントリを del.icio.us に追加
ブックマークに追加する

3分で iKnow! API アプリを作る方法 - iknow gem

前のエントリーでご紹介した iKnow! API 用の rubygem の使い方について。

Install iKnow! gem

レポジトリはこちら ⇒ nov-iknow@github

インストールは github を gem のソースに追加して(既に追加した人はもう追加しないように)

LANG : shell etc.
  1. sudo gem source -a http://gems.github.com

普通に gem install

LANG : shell etc.
  1. sudo gem install nov-iknow

これで、iKnow! API 経由のアクセスを、通常のモデルと同じ感じで使えるようになります。

サンプルアプリの紹介

既にレポジトリの examples の中に、pure-ruby 版と rails 版のサンプルアプリを置いてあります。
ここでは rails 版のサンプルアプリを作る流れを紹介します。

まずはセットアップ。

LANG : shell etc.
  1. rails iknow_on_rails
  2. cd iknow_on_rails
  3. ./script/generate iknow_oauth
  4. rake db:create
  5. rake db:migrate

これで必要なクラスやらライブラリやらが生成されます。

次に API Key などの設定を、conf/environment.rb あたりに記述します。API Key の取得方法は、iKnow! API 日本語ガイドの一番下の方にキャプチャ画像つきでまとめてあるので、そちらを参考にしてください。

LANG : RUBY
  1. require 'nov-iknow'
  2. Iknow::Config.init do |conf|
  3.   conf.api_key               = 'SET_YOUR_API_KEY_HERE'
  4.   conf.oauth_consumer_key    = ''
  5.   conf.oauth_consumer_secret = ''
  6. end

サンプルアプリでは、この後簡単なユーザ検索機能だけを実装しています。
アクションは1つ。たった4行のコードです。

LANG : shell etc.
  1. ./script/generate controller users index

LANG : RUBY
  1. class UsersController <ApplicationController
  2.  
  3.   def index
  4.     unless params[:iknow_username].blank?
  5.       @user = Iknow::User.find(params[:iknow_username])
  6.       flash[:notice] = "404 User Not Found" unless @user
  7.     end
  8.   end
  9.  
  10. end

View 内で @user.friends とか @user.items とかやってるとこでは、それぞれ個別に API にアクセスが飛びます。

LANG : RUBY
  1. <% form_tag do %>
  2. <div id="iknow_user_search">
  3.   <div class="label"><label for="iknow_username">iKnow! Username</label></div>
  4.   <div class="input"><%= text_field_tag "iknow_username" %></div>
  5. </div>
  6. <% end %>
  7.  
  8. <% unless @user.nil? %>
  9. <dl>
  10. <% @user.profile.attributes.each do |key| %>
  11.   <dt><%= key %></dt>
  12.   <dd><%= @user.profile.send(key) || "--NOTHING TO DISPLAY--" %></dd>
  13. <% end %>
  14.   <dt>Lists</dt>
  15.   <dd>
  16.     <ul>
  17.       <% @user.lists.each do |list| %>
  18.       <li><%= link_to list.title, list.link %><br /><%= list.description %></li>
  19.       <% end %>
  20.     </ul>
  21.   </dd>
  22.   <dt>Items</dt>
  23.   <dd>
  24.     <ul>
  25.       <% @user.items.each do |item| %>
  26.       <li><%= item.cue.text %><% if item.response %> <=> <%= item.response.text %><% end %></li>
  27.       <% end %>
  28.     </ul>
  29.   </dd>
  30.   <dt>Study Results (min)</dt>
  31.   <dd>
  32.     <%= @user.study.today %>
  33.     <ul>
  34.       <% @user.study.results.each do |result| %>
  35.       <li><%= result.date %> :: <%= sprintf("%.1f", result.seconds.to_f/60.0) %></li>
  36.       <% end %>
  37.     </ul>
  38.   </dd>
  39.   <dt>Friends</dt>
  40.   <dd>
  41.     <ul>
  42.       <% @user.friends.each do |friend| %>
  43.       <li><%= link_to friend.profile.name, friend.profile.profile_url %></li>
  44.       <% end %>
  45.     </ul>
  46.   </dd>
  47. </dl>
  48. <% end %>
  49.  
  50. <%= flash[:notice] rescue nil %>

これだけ。
本当はデザインをちょっとかっこ良くしたいのだけど、まぁサンプルですから。

iKnow! gem でできること

API でできることは pure-ruby 版のサンプルを見ればすぐ分かりますが、ざっとこんな感じ。
matching はキーワード検索、extract は単語に分けて item リスト(訳と例文つき)を返す API です。

LANG : RUBY
  1. ## User API
  2. @user = Iknow::User.find('matake')
  3. @user.items
  4. @user.lists
  5. @user.friends
  6. @user.study_results
  7. @matchied_users = Iknow::User.matching('matake')
  8.  
  9. # ## List API
  10. @recent_lists = Iknow::List.recent
  11. @matchied_lists = Iknow::List.matching("遺伝的アルゴリズム")
  12. @ga_list.first.items
  13. @ga_list.first.sentences
  14.  
  15. # ## Item API
  16. @recent_items = Iknow::Item.recent
  17. @matchied_items = Iknow::Item.matching('record')
  18. @items = Iknow::Item.extract("sometimes, often, electrical")
  19. @items.first.sentences
  20.  
  21. ## Sentence API
  22. @recent_sentences = Iknow::Sentence.recent
  23. @matchied_sentences = Iknow::Sentence.matching('record')

あと、パラメータを追加するときは、以下のように指定します。

LANG : RUBY
  1. Iknow::User.matching('matake', :age_from => 10, :age_to => 30, :gender => 'male')

各呼び出しに指定できるパラメータは、iKnow! Developer をご覧ください。

今後の予定

テストはまだ1行も書いてません(汗
これは公開されている gem としてはよろしくないので、近日中に追加します。
あと、iKnow! の OAuth はまだ正式にスタートできてないので、そこの周りの機能も後日追加します。


この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m


コメントはこちらから




使用可能タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


« 前のエントリ
iKnow! API をリリースしました
次のエントリー »
GitHub に自作の RubyGems を登録する方法