怎麼從http拿json資料?
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]
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 ...
不過我不建議你用後端去拿啦。這樣網頁 response time 可能會過長...
感激不盡
這樣就沒問題了!!!