如何在ruby中的反引号命令中替换变量

时间:2015-11-28 21:08:48

标签: ruby-on-rails ruby curl

我正在尝试在我的rails应用程序中进行卷曲调用以进行情感分析,如此处所示https://algorithmia.com/algorithms/nlp/SentimentAnalysis

I love coding

但是在后面的勾号中,它没有正确地替换该值。那么如何在这个curl命令中替换变量呢?

当我使用0执行此代码时,我在其网站上收到回复2,我得到window.resize()(这是正确的),这样我就相信它不会取代变量值正确。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

而且,正如Tin Man指出的那样,反引号既不是唯一也不一定是在Ruby中进行系统调用的最佳方式。我强烈建议您阅读这一系列文章:https://devver.wordpress.com/2009/06/30/a-dozen-or-so-ways-to-start-sub-processes-in-ruby-part-1/

最后,当一个像rest-client,faraday和httparty这样的宝石可用时,对curl进行系统调用通常不是从Ruby发出HTTP请求的最好方法,更不用说标准库中的Net :: HTTP了。