yahoo-count (2)

ちゃんとオプションも google-count に合わせたよ。あんまり創意工夫はないよ。

#!/usr/bin/ruby -Ke

Y_URL = 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch'
Y_ID = 'YahooDemo' # use your own ID

require 'open-uri'
require 'rexml/document'
require 'nkf'
require 'uri'
require 'optparse'
require 'cgi'

$opt_words = nil
$opt_quote = nil

def quote str
   '"' + str + '"'
end

def query(*words)
   q = words.map { |word|
      (/ / =~ word || $opt_quote) ? quote(word) : word
   }.join(' ')

   url = URI.parse Y_URL
   url.query = {
      :appid => Y_ID,
      :results => 1,
      :query => URI.encode(NKF.nkf("-Ew -m0", q)),
   }.map{|kv| kv.join("=")}.join("&")

   doc = REXML::Document.new(url.read)
   puts [doc.root.attributes['totalResultsAvailable'], words.join(" ")].join("\t")
end

if __FILE__ == $0
   STDOUT.sync = true

   ARGV.options { |q|
      q.def_option('--help', 'print this message') { puts q; exit 0 }
      q.def_option('--words', 'single query with multiple words') { $opt_words = true }
      q.def_option('--quote', 'quote each query') { $opt_quote = true }
      q.parse!
   }

   if $opt_words
      query(*ARGV)
   else
      ARGV.each do |word|
         query(word)
      end
   end
end

わざわざ言う必要はないかなと思いつつも一応。ご自分の環境に合わせてエンコーディング周りは変えてくださいね。

#!/usr/bin/ruby -Ke
NKF.nkf("-Ew -m0", q)

追記: