2011-09-15 61 views
0

我想用文本 param提供API请求,其中包含我目前在params[:brand][:tag_list]中的信息,该信息似乎被保存为一个由逗号分隔的字符串。什么是提出API请求的正确方法?如何正确传递此参数?

控制器代码:从日志

current_user.tag(@brand, :with => params[:brand][:tag_list], :on => :tags) 

url = "http://www.viralheat.com/api/sentiment/review.json" 
@sentiment_response = url.to_uri.get(
    :api_key => 'MY_KEY', 
    :text => :tag_list).deserialize #This is what I'm currently using and is wrong 

响应代码:

<- (GET 49996946161 2204098100) http://www.viralheat.com:80/api/sentiment/review.json?api_key=MY_KEY&text=tag_list 
-> (GET 49996946161 2204098100) 200 OK (62 bytes 3.09s) 
+0

问题是? – njzk2

+0

:tag_list是哈希中的标签列表,即“猫”,“狗”,“鼠标”,因此回应应该是:http://www.viralheat.com:80/api/sentiment/review.json?api_key = MY_KEY&text = cat&dog&mouse – Simpleton

+0

'http://www.viralheat.com/api/sentiment/review.json?api_key = MY_KEY&text = cat&dog&mouse'几乎肯定不是您的意思;这创建了对“文本=猫”,“狗”和“鼠标”,这是无意义的。此外,你不传递一个数组,你传递一个符号。 “:tag_list”由定义*不是散列*。你可能是指params [:brand] [:tag_list]之类的东西,但即使如此,目前还不清楚这个哈希应该如何转换为这个api的字符串。因为你说它应该形成的网址是不正确的。 –

回答

1

仰望文档为viralheat,它看起来像他们的API接受正好有两个参数:api_key,和text。假设params[:brand][:tag_list]一个逗号分隔的字符串,就可以形成你的要求就像这样:

current_user.tag(@brand, :with => params[:brand][:tag_list], :on => :tags) 

url = "http://www.viralheat.com/api/sentiment/review.json" 
@sentiment_response = url.to_uri.get(
    :api_key => 'MY_KEY', 
    :text => params[:brand][:tag_list].split(',').join('&')).deserialize 

这应该创建的网址:

http://www.viralheat.com/api/sentiment/review.json?api_key=MY_KEY&text=cat%26dog%26​mouse 

params[:brand][:tag_list].split(',')伤了你的字符串转换成一个数组,join('&')把它放回一个字符串,但这次由&符号分隔(这似乎是你想要的,根据你对你的原帖发表评论)。你的uri.get方法应该避开uri中的&符号,这就是为什么你在最终的url中看到%26。这是对的。

+0

现在好了,我们已经过了错误的命名法,这就是我想要的,希望我会得到一个没有方法的错误,因为它只是一个逗号分隔的字符串而不是一串字符串。 – Simpleton

+0

好吧,我编辑了我的答案,以反映输入是逗号分隔的字符串(并且仍然假设您要将&-delimited字符串传递给api?)。 –

+0

干杯伙计。很盲目我不使用split() – Simpleton