2010-11-30 47 views
1

我想异步查询Foursquare API,该API目前不允许使用旧的$ .get()。我的短期解决方案是使一个帮手只是得到像这样的数据:为JSON创建Rails代理

def foursquare_info_for(venue_id) 
    res = Net::HTTP.get_response("api.foursquare.com", "/v1/venue.json?vid=#{venue_id}") 
    data = JSON.parse(res.body) 
    info = Hash.new 
    info["mayor_name"] = "#{data['venue']['stats']['mayor']['user']['firstname']} #{data['venue']['stats']['mayor']['user']['lastname']}" 
    info["mayor_photo_src"] = "#{data['venue']['stats']['mayor']['user']['photo']}" 
    info["checkins"] = "#{data['venue']['stats']['checkins']}" 
    info 
end 

这一工程,但我宁愿让这个代理,我可以得到与在页面加载后一个jQuery AJAX请求加快一点。我很确定这个帮助者接近我需要做的工作来获得代理,但我不确定我需要将代理JSON放在我的身边,以便能够使用jQuery来获取它。

我在正确的轨道上用net/http创建代理吗?

我在哪里可以将代理放在我身边,以便我可以通过jQuery GET访问它?

回答

5

我认为使用Net :: HTTP就足够了。

我会为它做一个类。喜欢的东西:

class FoursquareInfo < Struct.new(:venue_id) 

    def info 
    { :mayor_name => mayour_name, :mayor_photo_src => mayor_photo_src, :checkins => checkins } 
    end 

    def mayor_name 
    "#{mayor_firstname} #{mayor_lastname}" 
    end 

    def mayor_firstname 
    mayor["firstname"] 
    end 

    def mayor 
    stats["mayor"]["user"] 
    end 

    def stats 
    data["venue"]["stats"] 
    end 

    def data 
    @data ||= JSON.parse(response.body) 
    end 

    def response 
    Net::HTTP.get_response("api.foursquare.com", "/v1/venue.json?vid=#{venue_id}") 
    end 

    # etc... 

end 

以及来自控制器:

class FoursquareInfosController < ApplicationController 
    def show 
    render :json => FoursquareInfo.new(params[:id]).info 
    end 
end 
+0

谢谢!这工作像一个魅力。 – mcmaloney 2010-11-30 23:34:40