SimpleWikipediaAPI を ruby から使う(3)

ハッシュでパラメータを与えて,レスポンスをそのまま返すメソッド api を追加。こんな感じ。
open-uri を require してあります。

	def api(params)
		protocol = 'http://' if /^http/ !~ self.options[:proxy_host]
		uri = URI.parse(WIKIPEDIA_API_URI)
		params.update({:keyword => params[:keyword].toutf8})
		uri.query = queryize(params)
		uri.read({:proxy => "#{protocol}#{self.options[:proxy_host]}:#{self.options[:proxy_port]}"})
	end

テストをいい加減に書く。徐々に厳しいテストを追加していくつもり。シフトJISにして出力しているのは,僕が Windows でテストしているためです。
rss は標準の rss パーサに与えてみた。XML は REXML に与えればいいのかな。

	def test_api_kw
		result = @simple_wikipedia.api({:keyword => 'YouTube'})
		assert_instance_of String, result
		puts result.tosjis
	end

	def test_api_xml
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'xml'})
		assert_instance_of String, result
		puts result.tosjis
	end

	def test_api_rss
		require 'rss/2.0'
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'rss'})
		assert_instance_of String, result
		rss = RSS::Parser.parse(result)
		puts result.tosjis
	end

	def test_api_html
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'html'})
		assert_instance_of String, result
		puts result.tosjis
	end

	def test_api_javascript
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'javascript'})
		assert_instance_of String, result
		puts result.tosjis
	end
	
	def test_api_json
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'json'})
		assert_instance_of String, result
		puts result
	end

	def test_api_json_callback
		result = @simple_wikipedia.api({:keyword => 'YouTube', :output => 'json', :callback => 'cb_func'})
		assert_instance_of String, result
		puts result
	end

テストの結果。どうやら日付に ISO8601 形式を使っていると解釈できないらしい。rss パーサに問題があるのか,rss の形式に問題があるのか今のところ不明。

Finished in 3.406 seconds.

  1) Error:
test_api_rss(SimpleWikipediaAPITest):
RSS::NotAvailableValueError: value <2006-09-23T13:14:35+09:00> of tag <pubDate> is not available.
    D:8:in `pubDate='
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:393:in `__send__'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:393:in `start_get_text_element'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:329:in `call'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:329:in `tag_end'
    D:/dev/ruby-1.8/lib/ruby/1.8/rexml/parsers/streamparser.rb:26:in `parse'
    D:/dev/ruby-1.8/lib/ruby/1.8/rexml/document.rb:185:in `parse_stream'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/rexmlparser.rb:22:in `_parse'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:163:in `parse'
    D:/dev/ruby-1.8/lib/ruby/1.8/rss/parser.rb:78:in `parse'
    D:/Scripts/ruby/simple_wikipedia_api/test/test_simple_wikipedia_api.rb:57:in `test_api_rss'

10 tests, 27 assertions, 0 failures, 1 errors