3分で iKnow! API アプリを作る方法 - iknow gem
前のエントリーでご紹介した iKnow! API 用の rubygem の使い方について。
Install iKnow! gem
レポジトリはこちら ⇒ nov-iknow@github
インストールは github を gem のソースに追加して(既に追加した人はもう追加しないように)
-
sudo gem source -a http://gems.github.com
普通に gem install
-
sudo gem install nov-iknow
これで、iKnow! API 経由のアクセスを、通常のモデルと同じ感じで使えるようになります。
サンプルアプリの紹介
既にレポジトリの examples の中に、pure-ruby 版と rails 版のサンプルアプリを置いてあります。
ここでは rails 版のサンプルアプリを作る流れを紹介します。
まずはセットアップ。
-
rails iknow_on_rails
-
cd iknow_on_rails
-
./script/generate iknow_oauth
-
rake db:create
-
rake db:migrate
これで必要なクラスやらライブラリやらが生成されます。
次に API Key などの設定を、conf/environment.rb あたりに記述します。API Key の取得方法は、iKnow! API 日本語ガイドの一番下の方にキャプチャ画像つきでまとめてあるので、そちらを参考にしてください。
-
require 'nov-iknow'
-
Iknow::Config.init do |conf|
-
conf.api_key = 'SET_YOUR_API_KEY_HERE'
-
conf.oauth_consumer_key = ''
-
conf.oauth_consumer_secret = ''
-
end
サンプルアプリでは、この後簡単なユーザ検索機能だけを実装しています。
アクションは1つ。たった4行のコードです。
-
./script/generate controller users index
-
class UsersController <ApplicationController
-
-
def index
-
unless params[:iknow_username].blank?
-
@user = Iknow::User.find(params[:iknow_username])
-
flash[:notice] = "404 User Not Found" unless @user
-
end
-
end
-
-
end
View 内で @user.friends とか @user.items とかやってるとこでは、それぞれ個別に API にアクセスが飛びます。
-
<% form_tag do %>
-
<div id="iknow_user_search">
-
<div class="label"><label for="iknow_username">iKnow! Username</label></div>
-
<div class="input"><%= text_field_tag "iknow_username" %></div>
-
</div>
-
<% end %>
-
-
<% unless @user.nil? %>
-
<dl>
-
<% @user.profile.attributes.each do |key| %>
-
<dt><%= key %></dt>
-
<dd><%= @user.profile.send(key) || "--NOTHING TO DISPLAY--" %></dd>
-
<% end %>
-
<dt>Lists</dt>
-
<dd>
-
<ul>
-
<% @user.lists.each do |list| %>
-
<li><%= link_to list.title, list.link %><br /><%= list.description %></li>
-
<% end %>
-
</ul>
-
</dd>
-
<dt>Items</dt>
-
<dd>
-
<ul>
-
<% @user.items.each do |item| %>
-
<li><%= item.cue.text %><% if item.response %> <=> <%= item.response.text %><% end %></li>
-
<% end %>
-
</ul>
-
</dd>
-
<dt>Study Results (min)</dt>
-
<dd>
-
<%= @user.study.today %>
-
<ul>
-
<% @user.study.results.each do |result| %>
-
<li><%= result.date %> :: <%= sprintf("%.1f", result.seconds.to_f/60.0) %></li>
-
<% end %>
-
</ul>
-
</dd>
-
<dt>Friends</dt>
-
<dd>
-
<ul>
-
<% @user.friends.each do |friend| %>
-
<li><%= link_to friend.profile.name, friend.profile.profile_url %></li>
-
<% end %>
-
</ul>
-
</dd>
-
</dl>
-
<% end %>
-
-
<%= flash[:notice] rescue nil %>
これだけ。
本当はデザインをちょっとかっこ良くしたいのだけど、まぁサンプルですから。
iKnow! gem でできること
API でできることは pure-ruby 版のサンプルを見ればすぐ分かりますが、ざっとこんな感じ。
matching はキーワード検索、extract は単語に分けて item リスト(訳と例文つき)を返す API です。
-
## User API
-
@user = Iknow::User.find('matake')
-
@user.items
-
@user.lists
-
@user.friends
-
@user.study_results
-
@matchied_users = Iknow::User.matching('matake')
-
-
# ## List API
-
@recent_lists = Iknow::List.recent
-
@matchied_lists = Iknow::List.matching("遺伝的アルゴリズム")
-
@ga_list.first.items
-
@ga_list.first.sentences
-
-
# ## Item API
-
@recent_items = Iknow::Item.recent
-
@matchied_items = Iknow::Item.matching('record')
-
@items = Iknow::Item.extract("sometimes, often, electrical")
-
@items.first.sentences
-
-
## Sentence API
-
@recent_sentences = Iknow::Sentence.recent
-
@matchied_sentences = Iknow::Sentence.matching('record')
あと、パラメータを追加するときは、以下のように指定します。
-
Iknow::User.matching('matake', :age_from => 10, :age_to => 30, :gender => 'male')
各呼び出しに指定できるパラメータは、iKnow! Developer をご覧ください。
今後の予定
テストはまだ1行も書いてません(汗
これは公開されている gem としてはよろしくないので、近日中に追加します。
あと、iKnow! の OAuth はまだ正式にスタートできてないので、そこの周りの機能も後日追加します。












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