CoursesController #index中的JSON :: ParserError

时间:2017-08-20 03:46:56

标签: html css ruby-on-rails json ruby

我是Ruby on Rails和Web开发的初学者。我正在上一门在线课程并且一直没有参加讲座。

我的问题是我的courses_controller,索引操作。

Controller:my_first_app / controllers / courses_controller.rb

class CoursesController < ApplicationController
  def index
    @search_term = 'jhu'
    @courses = Coursera.for(@search_term)
  end
end

型号:my_first_app / models / coursera.rb

class Coursera
  include HTTParty

  #default_options.update(verify: false) # Turn off SSL verification
  base_uri 'https://api.coursera.org/api/catalog.v1/courses'
  default_params fields: "smallIcon,shortDescription", q: "search"
  format :json

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

查看:my_first_app / views / index.html.erb

<h1>Search for - <%= @search_term %> </h1>
<table border = "1">
    <tr>
        <th>Image</th>
        <th>Name</th>
        <th>Description</th>
    </tr>

<%= @courses.each do |course| %>
    <tr>
        <td><%= image_tag(course["smallIcon"]) %></td>
        <td><%= course["name"] %></td>
        <td><%= course["shortDescription"] %> </td>
    </tr>
<% end %>   

路线:my_first_app / config / routes.rb

Rails.application.routes.draw do
  get 'courses/index'
  get 'greeter/hello'
  get 'greeter/goodbye'
end

的Gemfile:

source 'https://rubygems.org'
gem 'rails', '4.2.3'
gem 'sqlite3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'httparty', '0.13.5'
end

我将最后一个gem添加到Gemfile并运行bundle,然后我控制+ c停止并重新启动服务器并收到错误消息:

JSON::ParserError in CoursesController#index

error message screenshot

我认为这是说我解析HTML而不是JSON,但我不知道如何解决它。任何帮助将不胜感激。 原始存储库:https://github.com/jhu-ep-coursera/fullstack-course1-module3

1 个答案:

答案 0 :(得分:0)

根据Coursera的API documentation,您的base_uri似乎可能需要:

base_uri 'https://api.coursera.org/api/courses.v1'

然后fields中的default_params应该(可能)为:

default_params fields: "photoUrl,description", q: "search"

(同时在您的应用中更改了'smallIcon''shortDescription''photoUrl''description'的其他匹配项,因为我在这些字段中看不到这些字段api docs)。

完成这些更改后,您应该最终转到返回有效JSON的https://api.coursera.org/api/courses.v1?q=search&query=ruby&fields=photoUrl,description等网址。您当前使用的base_uri会将您发送到HTML错误页面,告诉您未找到操作。由于这是一个HTML页面,JSON无法解析它。

如果你查看你链接的Github存储库中最后一次提交的日期,那么最后一次提交是在2015年11月,所以差不多2年前。只是超级过时,API从那时起可能已经改变了很多。