Interagieren mit Yahoo -Tischler in Ruby
Frage
Ich versuche zu benutzen net/http
mit der Yahoo -Tischemacher -API zu interagieren, aber ich kann es nicht zum Laufen bringen. Hier ist, was ich bisher habe:
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}"
Dies gibt mir den folgenden Fehler:
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>'
Nachdem ich den @host typo behoben habe, bekomme ich jetzt:
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>
Lösung
Sie schicken ihnen JSON und sie scheinen nach einer regelmäßigen Abfragebrunde im Postkörper zu suchen. Sie sollten auch HTTParty verwenden, um Webdienste zu konsumieren, es sei denn, Sie haben einen guten Grund, nicht:
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'}
Andere Tipps
Möglicherweise nur ein Tippfehler? @host
sollte sein host
Rechts?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow