【问题标题】:Extracting values from certain fields in a json api request. (Ruby)从 json api 请求中的某些字段中提取值。 (红宝石)
【发布时间】:2018-09-01 18:40:37
【问题描述】:

尝试在 Udemy 的 API 中提取字段“searched_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 文件的 sn-p:

{
    "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

【问题讨论】:

  • @SimpleLime 我尝试使用我可以在网上找到的内容来实现它,但我认为我使用的语法不正确。能否进一步说明?

标签: json ruby api sinatra


【解决方案1】:

请把方法改成这样

  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

注意:如果您得到正确的响应,它将起作用。

【讨论】:

  • 这也可以运行,但它没有在屏幕(网页)上向我返回值。是不是我做错了什么?
  • 你是如何在网页中显示这个值的?你有相关代码吗?
  • 好的,抱歉。我已经更新了我的代码并尝试将其发布在网页上。它可以在我原始帖子的底部作为编辑找到。我发布了在标记为 index.erb 的文件中找到的 html 代码
  • 我还是新手,所以有些语法可能非常错误。我尝试从各种博客中学习。
  • @AlexSalinas 我可以在要提交的表单中看到您引用的一些 php 网页。在深入之前,请对 sinatra 应用程序的工作原理有一个基本的了解。本教程将给你一个基本的了解。sitepoint.com/just-do-it-learn-sinatra-i
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2023-03-04
  • 2021-01-27
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多