Взаимодействие с Yahoo Placemaker в Ruby - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь использовать net/http для взаимодействия с API Yahoo Placemaker, но я не могу заставить его работать.Вот что у меня есть:

host = 'wherein.yahooapis.com'
payload = {
    'documentContent' => 'Columbus Ohio',
    'appid' => APP_ID,
    'outputType' => 'json',
    'documentType' => 'text/plain'
}.to_json

req = Net::HTTP::Post.new('/v1/document', initheader = { 'Content-Type' =>'application/json'})
req.body = payload
response = Net::HTTP.new(host).start {|http| http.request(req) }
puts "Response #{response.code} #{response.message}: #{response.body}"

Это дает мне следующую ошибку:

Errno::ECONNREFUSED: Connection refused - connect(2)
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in `initialize'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in `open'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in `block in connect'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:762:in `connect'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:744:in `start'
    from /Users/Kyle/Desktop/skateparks-web/lib/yahoo/placemaker.rb:21:in `extract'
    from (irb):3
    from /Users/Kyle/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'

После исправления опечатки @host я теперь получаю:

Response 400 Bad Request:
<?xml version="1.0" encoding="UTF-8" ?>
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xmlns:cle="http://wherein.yahooapis.com/v1/schema.rng" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en"><yahoo:description><![CDATA[Please provide a document URL or content.]]></yahoo:description>
<yahoo:detail><code>-9999</code>
<cause>input</cause>
</yahoo:detail></yahoo:error>

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Вы отправляете им json, и они, похоже, ищут обычную строку запроса в теле сообщения.Кроме того, вам, вероятно, следует использовать httparty для использования веб-сервисов, если у вас нет веских причин не:

require 'httparty'

class Yahoo
    include HTTParty
    base_uri 'http://wherein.yahooapis.com/'
end

json = Yahoo.post '/v1/document', :body => {:documentContent => 'Columbus Ohio', :appid => APP_ID, :outputType => 'json', :documentType => 'text/plain'}
0 голосов
/ 19 февраля 2012

Возможно, просто опечатка? @host должно быть host верно?

...