2017-02-14 65 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

相關問題