イースト辞書Webサービス

リンク


「イースト辞書Webサービス」
http://www.btonic.com/ws/

サンプルページ


http://sakura-computer.co.jp/webservice/netdic/net...

ソースコード


#!/usr/local/bin/ruby
#
# $Id$
# イースト辞書WEBサービスAPIサンプル
# 指定されたキーワードでまず検索メソッドを呼び出し、その結果のIDを使用して内容取得メソッドを呼び出し、辞書の内容を取得する。
# Auther:Yasuo Tabira(ytabira at gmail.com)

require 'cgi'
require 'erb'
require 'open-uri'
require 'pp'
require 'rexml/document'

SEARCHDICITEMLITE_URL = 'http://btonic.est.co.jp/NetDic/NetDicV09.asmx/SearchDicItemLite'
GETDICITEMLITE_URL = 'http://btonic.est.co.jp/NetDic/NetDicV09.asmx/GetDicItemLite'

class Hash
  def to_query()
    query = []
    self.each do |key,value|
      query << "#{key}=#{ERB::Util.u(value.to_s)}"    
    end
    query.join("&") 
  end
end

begin
  idcgi = CGI.new

  # とりあえずヘッダは出力しておく。
  print idcgi.header
  
  #######################################
  # 検索メソッド
  idquery = idcgi.params
  idquery['Dic'] = "EJdict" if idquery['Dic'].to_s == "" 
  idquery['Word'] = "test" if idquery['Word'].to_s == "" 
  idquery['Scope'] = "HEADWORD" if idquery['Scope'].to_s == "" 
  idquery['Match'] = "STARTWITH" if idquery['Match'].to_s == "" 
  idquery['Merge'] = "AND" if idquery['Merge'].to_s == "" 
  idquery['Prof'] = "XHTML" 
  idquery['PageSize'] = 1  
  idquery['PageIndex'] = 0
  iduri = "#{SEARCHDICITEMLITE_URL}?#{idquery.to_query}"
  idresult = nil
  #$DEBUGはデバッグモード(-d)のときのみtrueとなる変数
  puts '<pre>' + iduri + '</pre>' if $DEBUG

  open(iduri) do |f| 
      obj = REXML::Document.new(f.read)
      idresult = obj.root
  end

  #######################################
  # 内容取得メソッド
  cgi = CGI.new
  query = cgi.params
  query['Dic'] = idquery['Dic']  
  if idresult.elements['TitleList/DicItemTitle/ItemID'] != nil then
    query['Item'] = idresult.elements['TitleList/DicItemTitle/ItemID'].text
  else
    query['Item'] = ""
  end
  if idresult.elements['TitleList/DicItemTitle/LocID'] != nil
    query['Loc'] = idresult.elements['TitleList/DicItemTitle/LocID'].text
  else
    query['Loc'] = ""
  end
  query['Prof'] = "XHTML" 
  uri = "#{GETDICITEMLITE_URL}?#{query.to_query}"
  puts '<pre>' + uri + '</pre>' if $DEBUG
  result = nil
  open(uri) do |f|
      obj = REXML::Document.new(f.read)
      result = obj.root
  end
  
  #######################################
  # 表示するページの作成
  script = <<-"EOF"
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>イースト 辞書Webサービス サンプル</title> 
  </head>
  <body>
      辞書検索サンプル
      <form action="" method="get">
        辞書の種類:
        <input type="radio" name="Dic" value="EJdict" checked>EJDict英和辞典</input>
        <input type="radio" name="Dic" value="EdictJE">Edict和英辞典</input>
        <input type="radio" name="Dic" value="wpedia" >ウィキペディア日本語版</input><br/>

        検索語:<input type="Text" name="Word" value="#{idquery['Word']}"><br/>
        検索対象:
        <input type="radio" name="Scope" value="HEADWORD" checked>見出し語</input> 
        <input type="radio" name="Scope" value="ANYWHERE" >全文</input><br/>
        一致指定:
        <input type="radio" name="Match" value="STARTWITH" checked>前方</input> 
        <input type="radio" name="Match" value="ENDWITH">後方</input> 
        <input type="radio" name="Match" value="CONTAIN">部分</input> 
        <input type="radio" name="Match" value="EXACT">完全</input><br/>
        複数条件指定時の結合方法指定:
        <input type="radio" name="Merge" value="AND" checked>AND</input> 
        <input type="radio" name="Merge" value="OR">OR</input><br/>
        <input type="submit">
      </form>
      <%- if result.elements['ErrorMessage'].text != nil then -%>
          <font color="red">エラー:<%= result.elements['ErrorMessage'].text %></font>
      <%- else -%>
      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
          <%= result.elements['Body/div'].to_s %>
      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      <%- end -%>
      <div style="margin:10pt 0">
      <i><a href="<%= iduri %>"><%=iduri%></a></i>
      <i><a href="<%= iduri %>"><%=uri%></a></i>
      </div>
  </body>
  </html>
  EOF

  e = ERB.new(script, nil, '-')
  e.run(binding)
rescue => ex
  puts '<pre>' + ex + '</pre>'
  puts '<pre>'
  pp ex.backtrace
  puts '</pre>'
end
2007年12月03日(月) 01:16:20 Modified by ID:6iEpxHmiZg




スマートフォン版で見る