RubyでYahoo! Web APIを使う

日々ついったったーを全裸にひんむいている「全裸bot」は、Yahoo! Web API日本語係り受け解析を使ってtweetをzenrailzeしている。先日血を分けた弟とも言える「北海道bot」も誕生し、日本語解析ブームはいまや最高潮と言えるだろう(私の周囲で)。

私もうらやましくて参戦の機会をうかがっていたのだが、ちょっとしたアイデアが浮かんだので手を動かしてみることにした。まずはモノを作る前の準備段階をメモしておくことにする。

準備

アプリケーションIDの取得

Yahoo!デベロッパーネットワーク」から「アプリケーションIDの登録」をクリックして、あとは手順に従うだけ。Yahoo! JAPAN IDは事前に用意しておこう。無料のもので(たぶん)大丈夫。

RubyでHTTP Request

Rubyでは標準ライブラリがHTTP通信をラップしてくれているのでわりと簡単。

yahoo_api.rb
# -*- coding: utf-8 -*-
require 'net/http'
require 'cgi'
class YahooApi
  # Yahooに払い出されたアプリケーションID   APPLICATION_ID = '****************************************************************'   REQUEST_HOST   = 'jlp.yahooapis.jp'   API_PATH       = '/DAService/V1/parse'   attr_accessor :sentence   def request
    http  = Net::HTTP.new(REQUEST_HOST,80)
    query = "?appid=#{APPLICATION_ID}&sentence=#{CGI.escape(sentence)}"     req   = Net::HTTP::Get.new(API_PATH + query)     res   = http.request(req)   end end y = YahooApi.new y.sentence = '裏庭には二羽鶏がいる' response = y.request puts response.body

インターネット接続がある状態でコンソールから叩いてみよう。

% ruby yahoo_api.rb > response.xml
response.xml
<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp:DAService" xsi:schemaLocation="urn:yahoo:jp:jlp:DAService http://jlp.yahooapis.jp/DAService/V1/parseResponse.xsd">
<Result>
<ChunkList>
<Chunk>
<Id>0</Id>
<Dependency>2</Dependency>
<MorphemList>
<Morphem>
<Surface>裏庭</Surface><Reading>うらにわ</Reading><Baseform>裏庭</Baseform><POS>名詞</POS><Feature>名詞,名詞場所,*,裏庭,うらにわ,裏庭</Feature>
</Morphem>
<Morphem>
<Surface></Surface><Reading></Reading><Baseform></Baseform><POS>助詞</POS><Feature>助詞,格助詞,*,に,に,に</Feature>
</Morphem>
<Morphem>
<Surface></Surface><Reading></Reading><Baseform></Baseform><POS>助詞</POS><Feature>助詞,係助詞,*,は,は,は</Feature>
</Morphem>
</MorphemList>
</Chunk>
<Chunk>
<Id>1</Id>
<Dependency>2</Dependency>
<MorphemList>
<Morphem>
<Surface>二羽</Surface><Reading>2わ</Reading><Baseform>2羽</Baseform><POS>接尾辞</POS><Feature>接尾辞,助数,*,二羽,2わ,2羽</Feature>
</Morphem>
<Morphem>
<Surface></Surface><Reading>にわとり</Reading><Baseform></Baseform><POS>名詞</POS><Feature>名詞,名詞,*,鶏,にわとり,鶏</Feature>
</Morphem>
<Morphem>
<Surface></Surface><Reading></Reading><Baseform></Baseform><POS>助詞</POS><Feature>助詞,格助詞,*,が,が,が</Feature>
</Morphem>
</MorphemList>
</Chunk>
<Chunk>
<Id>2</Id>
<Dependency>-1</Dependency>
<MorphemList>
<Morphem>
<Surface>いる</Surface><Reading></Reading><Baseform></Baseform><POS>動詞</POS><Feature>動詞,一段,基本形,いる,い,い</Feature>
</Morphem>
</MorphemList>
</Chunk>
</ChunkList>
</Result>
</ResultSet>

まとめ

本日の成果
  • Yahoo! APIを使うためにアプリケーションIDを取得しておこう
  • Rubyでクエリを投げてXML文書を取得できた
  • XMLのパーズにはREXML(標準添付ライブラリ)を使えばよさげ
次回への展望

そろそろMacBookのバッテリが切れるので、今回はこの辺で。次回は取得したXMLをほげほげして、解析結果をぴよぴよしてみたいと思う。

私信

すぎゃーんメモ」にカテゴリ「zenra_bot」もしくは「zenrize」を希望します>@sugyan

Links

Yahoo!

Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/

Yahoo!デベロッパーネットワーク – テキスト解析 – 日本語係り受け解析
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html

Bots

全裸botのzenrize処理を改良した – すぎゃーんメモ
http://d.hatena.ne.jp/sugyan/20090821/1250810981

北海道bot (hokkaidobot) on Twitter
http://twitter.com/hokkaidobot

Ruby

Net::HTTPRequest – Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html

rexml – Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/rexml.html

RubyでXML操作: Netsphere Laboratories
http://www.nslabs.jp/ruby-rexml.rhtml

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です