酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

英和・和英辞書APIのデ辞蔵を呼び出すRubyコードのサンプル

この前のハッカソンで、英和・和英辞書のAPIを公開しているサービスを教えてもらって実際に使ってみたところ、なかなか面白かったのでメモがてらRubyのサンプルソースを共有します!


英和・和英辞書APIのデ辞蔵 公式サイト

デ辞蔵さんのサービスの紹介ページがこちら。

デ辞蔵Webサービスとは - デ辞蔵

でもって、REST APIの使用紹介はこちら。

REST版API - デ辞蔵

取得できるのはXMLのみですが、シンプルな仕様なので、簡単に習得できます。

事前準備 Nokogiriの取得

事前準備で Nokogiri を取得。

1
gem install 'nokogiri'

英単語 => 日本語訳のサンプルソース(英和)

ということで説明は苦手なので早速コードを。

まずは、英単語を和訳するための

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require 'uri'
require 'open-uri'
require 'nokogiri'

def translate_en_to_jp(word_en)
  # (1) 英単語の単語ItemIdを取得
  enc_word = URI.encode(word_en)
  url = "http://public.dejizo.jp/NetDicV09.asmx/SearchDicItemLite?Dic=EJdict&Word=#{enc_word}&Scope=HEADWORD&Match=EXACT&Merge=OR&Prof=XHTML&PageSize=20&PageIndex=0"
  xml = open(url).read
  doc = Nokogiri::XML(xml)
  item_id = doc.search('ItemID').first.inner_text rescue nil
  return nil unless item_id

  # (2)英単語のItemIdから翻訳を取得
  url = "http://public.dejizo.jp/NetDicV09.asmx/GetDicItemLite?Dic=EJdict&Item=#{item_id}&Loc=&Prof=XHTML"
  xml = open(url).read
  doc = Nokogiri::XML(xml)
  text = doc.search('Body').inner_text rescue nil
  text.gsub!(/(\r\n|\r|\n|\t|\s)/, '')
  return text
end

デ辞蔵さんのAPIではこんなふうに、単語のItemIdを取得してからその日本語訳を取得するようになります。2段階のアクセスですが、XMLがシンプルなので使いやすいです!

日本語の単語 => 英単語のサンプルソース(和英)

続いて、日本語の単語から対応する英単語を取得する和英辞書のサンプルソースです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require 'uri'
require 'open-uri'
require 'nokogiri'

def translate_jp_to_en(word_jp)
  # 日本語単語のItemIdを取得
  enc_word = URI.encode(word_jp)
  url = "http://public.dejizo.jp/NetDicV09.asmx/SearchDicItemLite?Dic=EdictJE&Word=#{enc_word}&Scope=HEADWORD&Match=EXACT&Merge=OR&Prof=XHTML&PageSize=20&PageIndex=0"
  xml = open(url).read
  doc = Nokogiri::XML(xml)
  item_id = doc.search('ItemID').first.inner_text rescue nil
  return item_id unless item_id

  # 日本語単語のItemIdから英単語を取得
  url = "http://public.dejizo.jp/NetDicV09.asmx/GetDicItemLite?Dic=EdictJE&Item=#{item_id}&Loc=&Prof=XHTML"
  xml = open(url).read
  doc = Nokogiri::XML(xml)
  text = doc.search('Body').inner_text rescue nil
  text.gsub!(/(\r\n|\r|\n|\t|\s)/, '')
  return text
end

ということでかんたんですがサンプルソースのご紹介でした。

ソースコードにツッコミ大歓迎です。コメント頂けたら、泣いて喜びますw

おすすめの書籍