SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Ruby開発者のためのiKnow! API入門

RubyGemを利用したiKnow! APIアプリケーションの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

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日本語ガイドの一番下の方にキャプチャ画像つきでまとめてあるので、そちらを参考にしてください。

図3 iKnow! API日本語ガイド
図3

 サンプルアプリでは、この後簡単なユーザー検索機能だけを実装しています。

 Controllerは次のとおりです。

./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は次のとおりです。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

 iKnow! Item Extract APIは、文章を単語に分割し、品詞や訳語とともに返してくれる言語処理系のAPIです。

 このAPIは動詞の時制や省略形、名詞の単数/複数形などを考慮したうえで単語分割を行ってくれるので、お手軽な形態素解析ツールとしても利用できます。

例1:省略形
   We will go back soon. We'll go back soon.
=> we, go, will, soon, back
例2: 時制
   I would like to go abroad.
=> will, like, to, go, abroad

   We went abroad.
=> we, go, abroad
例3: 単数/複数
   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!での英語学習も忘れずに!

引用元

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

nov(真武 信和)(nov)

 大学院の頃からRuby on Railsエンジニアとして働き、Rails歴は3年弱程。iKnow!ユーザーとしてiKnow!に魅せられ、2008年10月よりセレゴ・ジャパン株式会社へ転職。現在はiKnow! APIの開発に従事する。 Web: http://matake.jp Blog: http://railspress.matake.jp iKnow!: http://www.iknow.co.jp/user/matake

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3209 2008/10/27 14:30

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング