2011-09-15 59 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