为JSON创建Rails代理

mcm*_*ney 1 xss proxy jquery json ruby-on-rails

我想异步查询Foursquare API,它目前不允许旧的$ .get().我的短期解决方案是创建一个只需获取数据的Helper:

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
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我宁愿把它作为一个代理,我可以在页面加载后使用jQuery AJAX请求来加快速度.我很确定这个助手接近我需要做的事情才能让代理工作,但是我不知道我需要将代理JSON放在我身边以便能够用jQuery抓取它.

我是否正在使用net/http创建代理?

我在哪里放置代理,以便我可以使用jQuery GET访问它?

iai*_*ain 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
Run Code Online (Sandbox Code Playgroud)

从控制器:

class FoursquareInfosController < ApplicationController
  def show
    render :json => FoursquareInfo.new(params[:id]).info
  end
end
Run Code Online (Sandbox Code Playgroud)