2017-02-14 62 views
1

几周后,我做了这个Html解析,接收一个单词并将其计入该URL中。 “红宝石counter.rb http://abcd.com你好”想知道这段代码如何能够变成一个API

class Counter 

    def initialize(url) 
     @url = url 
    end 

    def count(word, url) 
     doc = Nokogiri::HTML(open(url)) 
     doc.css('head').remove 
     doc.text.scan(/#{word}/i).size 
    end 
end 

url, word = ARGV 
puts "Found: #{Counter.new(url).count(word, url)} matches." 

我想知道我怎么可以创建此,因为只有一个Rails JSON API。我需要询问:url,:word,:count,所以JSON只需要使用url构建,我要求的单词和重复的数量。

我完全迷失在如何做到这一点,它似乎是完全容易的,但我无法弄清楚。

希望有人帮助我, 谢谢。

+0

https://www.codementor.io/franzejr/creating-simple-api-with-rails-du108148l – Iceman

+0

我读了这个,但只是没有得到我把我的这个功能,我需要重建来交互JSON – MoscrowDev

回答

1

我认为你知道如何创建一个rails应用程序?假设你已经完成了这项工作,你需要的只是定义一条路线并将其映射到你的控制器。

namespace :count do 
    namespace :v1 do 
    match 'count_words', to: 'count#count_words', via: :get 
    end 
end 

然后定义在控制器的控制/计数/ V1/count_controller.rb

class Count::V1::CountController < ApplicationController 
    def count_words 
    # not sure why you're passing URL twice, but hey, whatever 
    counter = Counter.new(params[:url]) 
    result = counter.count(params[:url], params[:word] 
    render :json => result 
    end 
end 

你的问题是相当模糊的,但基本上,我假设你正在传递某种来自前端(或外部系统)的JSON消息。 Rails的处理frameworky东西给你,但在JSON消息中的所有我做的是挑选出的“网址”和“字”送这样的:

{ 
    "url": "www.count.co.uk", 
    "word": "count" 
} 

然后实例您的计数器类,以及将这些信息它。然后控制器正在响应包含您的计数器结果的JSON消息。你要确保你的计数器实际上返回一个散列结构,但这基本上是你需要为一个简单的API做的所有事情。

要调用这样的事情,你会怎么做:

localhost:3000/count/v1/count_words 

传递上述JSON消息。

+0

我想要的东西是:curl https:// localhost:3000/v1/counter -d {“url”:“http://example.com”; “word”:“TesTing”},然后它返回给我一个带有url的JSON,我问的这个词以及这个URL里面有多少个词 – MoscrowDev

+0

是的,我的答案会这样做。关键在于路线并具有API资源的控制器。所有它基本上是做你的{“网址”:“example.com”;; “word”:“TesTing”}并将其传递给您的计数器类,并将结果作为JSON响应传回给请求者。 您需要在URL中指定一个操作。在我的示例中,动作是'count_words',但可以在路由文件中配置: app/config/route.rb 如果您设置了类似于我所概述的内容,那么您的命令是:localhost :3000/count/v1/count_words -d {“url”:“example.com”,“word”:“TesTing”} – JayJay

+1

谢谢!我会看看这个。欣赏帮助 – MoscrowDev

相关问题