3分でiKnow! APIアプリを作る方法 - iknow gem
ここではRubyを対象に、iKnow! API用のRubyGemを利用して、簡単なiKnow! APIアプリケーションを作成する方法を紹介します。
iKnow! gemのインストール
GitHubのレポジトリ「http://github.com/nov/iknow」にあるgemをインストールします。まず、GitHubをgemのソースに追加します。
sudo gem source -a http://gems.github.com
既にgithubをgem sourceに追加している人は、ここでは追加しないでください。
次にnov-iknowをインストールします。
sudo gem install nov-iknow
これで、iKnow! API経由のアクセスを、通常のモデルと同じように行えるようになります。
サンプルアプリの紹介
既にnov-iknowレポジトリの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」あたりに記述します。
require 'iknow' Iknow::Config.init do |conf| conf.api_key = 'SET_YOUR_API_KEY_HERE' conf.oauth_consumer_key = '' conf.oauth_consumer_secret = '' end
API Keyの取得方法は、iKnow! API日本語ガイドの一番下の方にキャプチャ画像つきでまとめてあるので、そちらを参考にしてください。
サンプルアプリでは、この後簡単なユーザー検索機能だけを実装しています。
Controllerは次のとおりです。
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は次のとおりです。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("遺伝的アルゴリズム")
@matchied_lists.first.items
@matchied_lists.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')
それぞれのAPIに追加可能なパラメータは、次のように指定します。
Iknow::User.matching('matake', :age_from => 10, :age_to => 30, :gender => 'male')
各呼び出しに指定できるパラメータは、iKnow! Developerを参照してください。
iKnow! Item Extract APIは、文章を単語に分割し、品詞や訳語とともに返してくれる言語処理系のAPIです。
このAPIは動詞の時制や省略形、名詞の単数/複数形などを考慮したうえで単語分割を行ってくれるので、お手軽な形態素解析ツールとしても利用できます。
We will go back soon. We'll go back soon. => we, go, will, soon, back
I would like to go abroad. => will, like, to, go, abroad We went abroad. => we, go, abroad
My children like cookies. => my, child, like, cookie
API の利用方法は『extract items - iKnow! Developers』にまとめられています。なお、Item Extract APIを利用するにはiKnow! APIキーが必要です。
まとめ
今回はRubyエンジニア向けにiKnow! gemの使い方をメインに紹介して来ましたが、iKnow! Developers Wikiにはその他の言語向けのサンプルなども紹介されています。iKnow! Developers用のGitHubレポジトリにはJavaScript、PHP、Perl、shellなどのサンプルコードもありますので、Rubyエンジニアの方以外はこれらを参考にしてください。
ぜひiKnow! APIをご利用いただき、iKnow! Developers Forumsに感想やフィードバックをいただけると幸いです。APIドキュメントを読むために、iKnow!での英語学習も忘れずに!

