从json api请求中的某些字段中提取值。 (红宝石)

时间:2018-03-23 06:31:56

标签: json ruby api sinatra

尝试在Udemy的API中提取字段“searching_count”,但我不确定语法。

如果有人能指出我正确的方向,我们将非常感激。我正在使用Sinatra并使用net / http解析api请求。

require 'sinatra'
require 'net/http'
require 'json'
require 'openssl'

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

def get_search_count(term)

    url = 'https://www.udemy.com/api-2.0/search-suggestions?q=java'
    uri = URI(url)
    response = Net::HTTP.get(uri)
    JSON.parse(response)

    return response ["results"][0]["searched_count"]

end


get '/' do
    return get_search_count("java")
end

我正在尝试在网页上显示该号码。我在运行时没有收到任何错误,但我不知道我是否真的从请求中收到反馈。

如果有帮助,这里是json文件的片段:

{
    "results": [
        {
            "_class": "search_log",
            "id": 88,
            "phrase": "java",
            "searched_count": 3749730,
            "url": "/courses/search/?q=java"
        },

编辑:这是我尝试在网页上显示它。位于index.erb

<html>
    <head>
        <title><%= @title %></title>
    </head>
    <body>
        <h1><%= @headline %></h1>
        <p><%= @paragraph %></p>
        <form action="/action_page.php" method="get">
            Search Term: <input type="text" name="term"><br>
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

另外,我在web.rb中的更新代码:

require 'sinatra'
require 'net/http'
require 'json'
require 'openssl'

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

def get_search_count(term)
    url = 'https://www.udemy.com/api-2.0/search-suggestions?q=java'
    uri = URI(url)
    response = Net::HTTP.get(uri)
    parsed_response = JSON.parse(response)

    return parsed_response ["results"][0]["searched_count"]
end


get '/' do
    return get_search_count("java")
end

get '/term' do
    erb :index
end

get '/action_page.php' do
    return get_search_count(params[:name])
end

1 个答案:

答案 0 :(得分:0)

请将方法更改为此类

  def get_search_count(term)
    url = 'https://www.udemy.com/api-2.0/search-suggestions?q=java'
    uri = URI(url)
    response = Net::HTTP.get(uri)
    parsed_response = JSON.parse(response)

    return parsed_response ["results"][0]["searched_count"]
end

注意:如果你正确得到答案,那就可以了。