# # yahoo_kousei.rb - # Yahoo!JAPANデベロッパーネットワークの校正支援APIを利用して、 # 日本語文の校正作業を支援します。文字の入力ミスや言葉の誤用がないか、 # わかりにくい表記や不適切な表現が使われていないかなどをチェックします。 # # Copyright (c) 2010, hb # You can redistribute it and/or modify it under GPL. # # 設定: # # @options['yahoo_kousei.appid'] : アプリケーションID(必須) # @options['yahoo_kousei.filter_group'] : # 指摘グループの番号をコンマで区切って指定します。 # @options['yahoo_kousei.no_filter'] : # filter_groupで指定した指摘グループから除外する指摘を指定します。 # # 設定値は http://developer.yahoo.co.jp/webapi/jlp/kousei/v1/kousei.html を参照 # require 'timeout' require 'rexml/document' require 'net/http' Net::HTTP.version_1_2 def kousei_api( sentence ) appid = @conf['yahoo_kousei.appid'] query = "appid=#{appid}&sentence=#{URI.encode( sentence.gsub( /\n/, '' ) )}" query << "&filter_group=" + @conf['yahoo_kousei.filter_group'] if @conf['yahoo_kousei.filter_group'] query << "&no_filter=" + @conf['yahoo_kousei.no_filter'] if @conf['yahoo_kousei.no_filter'] px_host, px_port = (@conf['proxy'] || '').split( /:/ ) px_port = 80 if px_host and !px_port xml = '' Net::HTTP::Proxy( px_host, px_port ).start( 'jlp.yahooapis.jp' ) do |http| xml = http.post( '/KouseiService/V1/kousei', query ).body end xml end def kousei_result( result_set ) html = <<-HTML

文章校正結果

HTML doc = REXML::Document::new( result_set ) results = REXML::XPath.match( doc, "//Result" ) if results.empty? html << "

指摘項目は見つかりませんでした。

" else html << '' html << '' doc.elements.each( '//ResultSet/Result' ) do |r| html << %Q|| end html << '
対象表記候補文字詳細情報場所
#{r.elements['Surface'].text}#{r.elements['ShitekiWord'].text}#{r.elements['ShitekiInfo'].text}#{r.elements['StartPos'].text},#{r.elements['Length'].text}
' end html end add_edit_proc do if @mode == 'preview' && @conf['yahoo_kousei.appid'] then xml = kousei_api( @cgi.params['body'][0] ) <<-HTML
#{kousei_result( xml )} Webサービス by Yahoo! JAPAN
HTML end end if /\A(form|edit|preview|showcomment)\z/ === @mode then enable_js( 'yahoo_kousei.js' ) end