Dane z API

Mam taki case. jak wywołuje API w przeglądarce:
http://food2fork.com/api/get?key=MYAPIKEY&rId=9089e3
to dostaję ładną, pełną odpowiedź.

Ale kiedy wywołuję z konsoli:
2.3.0 :001 > Recipe.to(:id => “9089e3”)
=> []

Model Recipe wygląda następująco:

class Recipe
  include HTTParty
  ENV["FOOD2FORK_KEY"] = 'MYAPIKEY'
  base_uri 'http://food2fork.com/api'
  default_params key: ENV["FOOD2FORK_KEY"]
  format :json

  def self.for term
    get("/search", query: { q: term})["recipes"]
  end

  def self.to id
    get("/get", query: { rId: id})["recipe"]
  end
end

Natomiast przy użyciu Recipe.for(:q => “string”) dostaję porządaną zwrotkę

A nie powinieneś tego z konsoli odpalać jako Recipe.to("9089e3") ?

1 Like

Dokładnie to co mówi @doli :slight_smile:

Polecam też na klasie HTTParty włączyć debug_output $stderr, wtedy można podejrzeć jaki request idzie w rzeczywistości.

Tutaj pewnie byłoby to coś w stylu:

GET /api/get?key=MYAPIKEY&rId[id]=9089e3
1 Like

faktycznie ma to sens. poprawione, i faktycznie już link na konsili jest poprawny,
Jednak nadal coś mi nie bangla.

W kontrolerze:

  def show
    id = params[:recipe_id] || '0a40aa'
   @recipe = Recipe.to(id)  
 end

W widoku:

	<%= @recipe["publisher"] %>

W modelu:

def self.to id
  get("/get", query: { rId: id})["recipe"]
  debug_output $stderr
end

A pomimo to:

undefined method `[]' for #<IO:<STDERR>>

I głupieje. link jest rozwiązywany dobrze.

Ok, przepraszam wystarczyło usunąć debug_output