x無法存取,你可能沒有權限或未登入。
F8ca23da626499de4b476d7ccaf2950b

怎麼從http拿json資料?

2011-12-02 09:57:42 +0800evenwuRuby 節點 中發起
最後由 evenwu2011-12-03 17:04:06 +0800回應 , 520次閱讀

hello,

我想要在view裡面塞假字,由於不想用js的方案,因此想用ruby來抓假字
這邊有一個api

http://more.handlino.com/sentences.json?n=5

上面那個網址會抓到五句
因此我就想寫在view裡面,但是出現錯誤
請大家幫我看一下錯在哪 orz

  - @moretext = Net::HTTP.get_response("more.handlino.com","/sentences.json?n=10")
  - 10.times do |num|
      %h2= @moretext['sentences'][num]

原本 @moretext = Net::HTTP.get_response("more.handlino.com","/sentences.json?n=10") 會出錯,但後來我在 config.ru 裡面加了

require 'json'
require 'net/http'

這行就不會出錯,看來是有拿到json(???)

但是後面的 @moretext[:sentences][num] 好像還是不行
錯誤訊息會告訴我

NoMethodError at /
undefined method `downcase' for :sentences:Symbol
file: http.rb location: [] line: 1161

/Users/evenwu/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/net/http.rb in []
a = @header[key.downcase] or return nil
/Users/evenwu/Dropbox/Projects/agiler/pinterest/source/index.html.haml in evaluate_source
%h2= @moretext[:sentences][num]

後來換了一下 @moretext["sentences"][num]
還是錯 orz

NoMethodError at /
undefined method `[]' for nil:NilClass
file: index.html.haml location: evaluate_source line: 29

/Users/evenwu/Dropbox/Projects/agiler/pinterest/source/index.html.haml in evaluate_source
%h2= @moretext["sentences"][num]

截至 2011-12-03 17:04:06 +0800,共收到 6 條回應
19e786a2a74377ff6e052d87fd8d1fa8
xdite 1樓, 於2011-12-02 10:31:25 +0800回應

require 'json'
require 'net/http'
doc = Net::HTTP.get_response("more.handlino.com","/sentences.json?n=10")
@moretext = JSON.parse(doc.body)

這樣你才算是拿到合法的 JSON to Hash ...

19e786a2a74377ff6e052d87fd8d1fa8
xdite 2樓, 於2011-12-02 10:32:27 +0800回應

不過我不建議你用後端去拿啦。這樣網頁 response time 可能會過長...

F8ca23da626499de4b476d7ccaf2950b
evenwu 3樓, 於2011-12-02 10:39:17 +0800回應

感激不盡
這樣就沒問題了!!!

F8ca23da626499de4b476d7ccaf2950b
evenwu 4樓, 於2011-12-02 10:47:49 +0800回應

#2楼 @xdite 對阿,這點我知道... 只是mockup的話就沒差了

Ecdf9a83234e21743d77b75fd308b929
siuying 5樓, 於2011-12-03 16:02:09 +0800回應
F8ca23da626499de4b476d7ccaf2950b
evenwu 6樓, 於2011-12-03 17:04:06 +0800回應

#5楼 @siuying 喔喔!我來看看

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊