2016-04-22 20 views
0

Ich habe folgende Controller - recipes_controller.rb:814: unerwartetes Token auf 'verboten'

class RecipesController < ApplicationController 
    def list 
    @search_term = params[:looking_for] || 'chicken' 
    @courses = Recipe.for(@search_term) 
    end 
end 

Das folgende Modell: recipes.rb:

require 'httparty' 

class Recipe 
    include HTTParty 

    default_options.update(verify: false) 

    base_uri 'http://food2fork.com/api/search' 
    default_params key: ENV['FOOD2FORK_KEY'] 
    format :json 

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

& folgende view- Liste. html.erb:

<h1>Searching for - <%= @search_term %></h1> 

<table border="1"> 
    <tr> 
     <th>Image</th> 
     <th>Publisher</th> 
     <th>Title</th> 
    </tr> 
    <% @courses.each do |course| %> 
    <tr class=<%= cycle('even', 'odd') %>> 
     <td><%= image_tag(course["image_url"])%></td> 
     <td><%= course["publisher"] %></td> 
     <td><%= course["title"] %></td> 
    </tr> 
    <% end %> 
</table> 

Wenn ich http://localhost:3000/recipes/list tun, es gibt mir die folgenden Fehler:

814: unerwartetes Token auf 'verboten'

Anwendung Trace | Rahmenverfolgung | Voll Trace app/models/recipe.rb: 13: in for' app/controllers/recipes_controller.rb:4:in Liste‘

die json ist aus folgendem Format:

{"count": 1, "recipes": [{"publisher": "Tasty Kitchen", "f2f_url": "http://food2fork.com/view/459b3d", "title": "End the Search Chocolate Chip Cookies", "source_url": "http://tastykitchen.com/recipes/desserts/end-the-search-chocolate-chip-cookiese280a6/", "recipe_id": "459b3d", "image_url": "http://static.food2fork.com/cookie2410x307a33e.jpg", "social_rank": 34.80777735743579, "publisher_url": "http://tastykitchen.com"}]} 

Bitte lassen Sie mich wissen, was zu tun ist.

+0

Haben Sie die URL erneut versucht erstellt, die die GET-Anforderung für die manuelle ist? Sieht für mich so aus, als würden Sie höchstwahrscheinlich eine 403 von der API bekommen, gegen die Sie Anfragen stellen. – photoionized

+0

@photoionized: http://food2fork.com/api/search?key=a11111111111111&q=search Dies ist die URL, die den obigen JSON angibt. Aber wenn ich http://food2fork.com/api/search mache, bekomme ich 403 verboten. Was sollte in diesem Fall die Basis-URI sein? – user3591433

+0

Ich habe keine Ahnung, habe diese API nie zuvor verwendet, aber für mich sieht es nicht so aus, als wäre es eine API-Basis-URL-Sache, sondern eher ein ungültiger Authentifizierungsschlüssel. – photoionized

Antwort

1

Ok, also ich bin gerade gegangen und habe mich für einen food2fork.com API Schlüssel angemeldet und lese ihre Dokumentation, es gibt ein paar Probleme mit deinem Code.

  1. Wenn Sie einen Blick unter die Suche api Dokumentation übernehmen, finden Sie die Erklärung der Abfrageparameter sehen:

    q: (optional) Search Query (Ingredients should be separated by commas). If this is omitted top rated recipes will be returned. 
    

    Was das bedeutet, ist, dass Sie eine Anfrage für ein Rezept sind das Senden mit Zutaten von "Keyword" mit jeder Anfrage, die Sie machen. Offensichtlich gibt es keine Rezepte mit einer Zutat namens Keyword.

  2. Wenn Sie in den gleichen Abschnitt schauen, scheint es keine Abfrageparameter für "Felder" zu geben, also sollten Sie sie nicht hinzufügen. Es tut nicht weh, aber warum Code, der nichts in deiner Klasse tut?

  3. Sie möchten Ihren Schlüssel wahrscheinlich aus der Umgebung abrufen, anstatt ihn in Ihre App zu codieren.

Alles, was gesagt wird, ich glaube, Sie so etwas wie dies als Rezept Klasse wollen:

require 'httparty' 

class Recipe 
    include HTTParty 

    default_options.update(verify: false) 

    base_uri 'http://food2fork.com/api/search' 
    default_params key: ENV['FOOD2FORK_KEY'] 
    format :json 

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

Ja, ich verstehe, aber Sie geben kein Keyword weiter, oder? Was, wenn ich etwas wie "Schokolade" suchen möchte? Die angezeigten Ergebnisse bleiben in Ihrem Fall gleich, auch wenn ich Folgendes mache: http: // localhost: 3000/rezepte/list? Looking_for = schokolade. Wie gebe ich dieses "Schlüsselwort" weiter? – user3591433

+0

Macht nichts, fand es heraus! – user3591433

+0

@ user3591433 toll, wenn diese antwort dir geholfen hat, bitte überlege es zu akzeptieren. – photoionized