Создать Rails Proxy для JSON - PullRequest
       5

Создать Rails Proxy для JSON

1 голос
/ 01 декабря 2010

Я хочу выполнить асинхронный запрос к API Foursquare, который в настоящее время не позволяет использовать старый $ .get ().Мое краткосрочное решение состоит в том, чтобы создать помощника, который просто получает данные следующим образом:

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?

1 Ответ

5 голосов
/ 01 декабря 2010

Я думаю, что для этого достаточно использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...