2015-11-28 195 views
0

我試圖在我的rails感情上的分析應用的捲曲調用如下所示https://algorithmia.com/algorithms/nlp/SentimentAnalysis如何紅寶石

text = "I love coding" 
secret = "yv5julwo8l7biwuni62r37t823igd87d97u623568yf" 

result = `curl -X POST -d '"#{text}"' -H 'Content-Type: application/json' -H 'Authorization: Simple #{secret}' https://api.algorithmia.com/v1/algo/nlp/SentimentAnalysis/0.1.2` 
result = JSON.parse(result) 

但反引號內的替代變量反引號命令,它不是替代的價值正確。那麼如何在這個curl命令中替換變量呢?

當我執行這個代碼I love coding,我得到響應0,同時在其網站上,我得到2(這是正確的),所以這讓我相信它不是正確的替代變量值。

+0

在這種情況下,是否需要反撥號?你嘗試過使用雙引號嗎? – djt

+0

dtj,back-tick是直接執行任何系統命令所必需的。 – JVK

+1

back-ticks是執行系統命令的多種方法之一。他們是最簡單的,但幾乎不是最靈活的。 –

回答

1

當進行系統調用任何東西,但最簡單的參數您應該始終使用Shellwords庫來確保您的參數已正確轉義和/或引用。例如:

require "shellwords" 

text = '"I love coding"' 
secret = "yv5julwo8l7biwuni62r37t823igd87d97u623568yf" 

args = [ "-X", "POST", 
     "-d", text, 
     "-H", "Content-Type: application/json", 
     "-H", "Authorization: Simple #{secret}", 
     "https://api.algorithmia.com/v1/algo/nlp/SentimentAnalysis/0.1.2" ] 

data = `curl #{args.shelljoin}` 
result = JSON.parse(data) 

而且,正如鐵皮人以上所指出的,反引號既不做在Ruby中的系統調用的唯一的,也不一定最好的方式。我強烈推薦閱讀以下系列文章:https://devver.wordpress.com/2009/06/30/a-dozen-or-so-ways-to-start-sub-processes-in-ruby-part-1/

最後,當系統調用curl時,通常不是通過Ruby提供HTTP請求的最佳方式,例如rest-client,faraday和httparty等gem可用時,在標準庫中提到Net :: HTTP。

+0

太棒了,不知道Shellwork。謝謝。 – JVK

1

我認爲你的api-key存在錯誤。你的代碼和我的api-key一樣工作。

編輯:

代碼工作如如本:

enter image description here

編輯2:

require 'json' 

text = 'I love coding' 
secret = 'secret' 

result = `curl -X POST -d '"#{text}"' -H 'Content-Type: application/json' -H 'Authorization: Simple #{secret}' https://api.algorithmia.com/v1/algo/nlp/SentimentAnalysis/0.1.2` 
result = JSON.parse(result) 

puts result 
+0

托馬斯,我沒有在這裏發佈我的真正關鍵LOL。你是否使用密鑰進行了這種嘗試,然後將其輸出與直接在網站上獲得的結果進行比較?你會發現不同之處,因爲''我喜歡編碼''返回0,而在他們的網站上它返回2.所以我假設字符串不會從ruby逃脫 – JVK

+0

你可以在這裏發佈你的ruby代碼嗎? ? – JVK