2010-11-30 60 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