Pregunta

Estoy trabajando en la integración de OmniAuth con mi nueva aplicación de Facebook, y estoy buscando a través de la documentación más bien escasa para entender si da formas sencillas para acceder a la API gráfica ... Me voy a mudar de koala que era bastante simple.

¿Alguien por ahí utilizado OmniAuth para esto todavía? Quiero conseguir fotos de los álbumes de los usuarios, y el tipo y obtener las direcciones URL únicas para ellos.

¿Fue útil?

Solución 4

Así que no fue capaz de conseguir que funcione correctamente fb_graph - Todavía soy un novato de haber sido un desarrollador Ruby On Rails para un total de alrededor de 8-10 semanas, y por lo tanto no tienen un instinto para lo que debe ser evidentes problemas a otras personas.

Sin embargo, me encontré con este pequeño gran entrada de blog que describe un simple cliente de Facebook y muestra claramente la forma en que todos los enchufes juntos. He encontrado un problema con él recogiendo objeto yo / imagen que devuelve un http302 Facebook no http200 pero que fue fácil de trabajar un poco con la ayuda del autor. Compruébelo usted mismo: http://bnerd.de/ misc / rubí-escritura-basic-cliente-para-facebook-gráfico-api /

Ahora estoy usando OmniAuth por la simplicidad de la interacción de usuario / registro sobre la base de este tutorial aquí: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth y con el token que recibo de que soy utilizando este sencillo fbclient de la referencia bnerd para acceder a la API de gráficos. Esperanza lo que he encontrado ayuda a los demás.

... aquí está mi versión de código de bnerd y funcionó para mí:

    class FBClient

      def initialize(app, access_token = nil)
        @app = app
        @access_token = access_token
      end

      # request permission(s) from user
      def request(perms)
        #create a random verifier to identify user on fb callback
        verifier = (0...10).map{65.+(rand(25)).chr}.join
        uri = "https://graph.facebook.com/oauth/authorize?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&scope=#{perms}"

        request = { :verifier => verifier, :uri => uri }
        return request

      end

      def connect(code, verifier)

        uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&client_secret=#{@app.secret}&code=#{CGI::escape(code)}")
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true

        request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
        response = http.request(request)     
        data = response.body

        return data.split("=")[1]
      end

      # get, post
      def get(path, params = nil)
        uri = URI.parse("https://graph.facebook.com/" + path)
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true

        if params.nil?
          params = Hash.new
        end

        if params["access_token"].nil? 
          params["access_token"] = @access_token unless @access_token.nil?
        end

        request = Net::HTTP::Get.new(uri.path) 
        request.set_form_data( params )
        request = Net::HTTP::Get.new(uri.path + "?" + request.body)

        return response = http.request(request)
      end

      def post(path, params = nil)
        uri = URI.parse("https://graph.facebook.com/" + path)
        http = Net::HTTP.new(uri.host, uri.port)
        http.use_ssl = true        

        if params.nil?
          params = Hash.new
        end

        if params[:access_token].nil?
          params[:access_token] = @access_token unless @access_token.nil?
        end

        request = Net::HTTP::Post.new(uri.path) 
        request.set_form_data( params )
        request = Net::HTTP::Post.new(uri.path + "?" + request.body)

        response = http.request(request)
        response.code == "200" ? feed = JSON.parse(response.body) : raise("Sorry, an error occured. #{response.body}")
        return feed
      end
    end

Estoy seguro de que alguien más experimentado que podría mejorar esto - yo estaba a punto de 10 semanas en el aprendizaje de Rubí

(y mi primera programación desde Fortran y Pascal en la universidad a principios de los años 90!).

Otros consejos

Finalmente descubrí:

1) incluyen esta joya

2) utilizar la gema:

user = FbGraph::User.new('me', :access_token => session[:omniauth]["credentials"]["token"])

user.fetch

3) recuperar la información user.name

Recuerde que usted puede conseguir cualquier cosa de aquí ttp: //developers.facebook.com/docs/reference/api/user

Otra opción es buena koala: https://github.com/arsduo/koala

Si sólo está usando Facebook, koala tiene su propio apoyo OAuth. También funciona bien con OmniAuth. Para usarlos juntos, establecido por este OmniAuth Railscast: http://railscasts.com/episodes/235-omniauth-part-1

Entonces agregar una columna 'símbolo' de la tabla '' autenticaciones, y los métodos de apoyo para la recuperación de fichas. Cuando las necesidades de aplicaciones para interactuar con Facebook, y mucho koala agarrar el token y haga su trabajo. En un controlador:

if @token = current_user.facebook_token
  @graph = Koala::Facebook::GraphAPI.new(@token)
  @friends = @graph.get_connections("me", "friends")
end

En primer lugar, me gustaría ir a fb_graph, compara:

con koala :

graph = Koala::Facebook::GraphAPI.new OAUTH_ACCESS_TOKEN
friends = graph.get_connections("me", "friends")
graph.put_object("me", "feed", :message => "I am writing on my wall!")

con fb_graph :

me = FbGraph::User.me OAUTH_ACCESS_TOKEN
my_friends = me.friends
me.feed! :message => "I am writing on my wall!"

Cuando se utiliza OmniAuth , cada usuario tiene muchas autorizaciones (Facebook, Twitter, ...)

Para cada autorización de usuario, se debe almacenar el oauth Moneda que se ha devuelto en el hash de oauth de devolución de llamada.

auth = Authorization.create!(:user => user,
                             :uid =>      hash['uid'],
                             :provider => hash['provider'],
                             :token =>    hash['credentials']['token'])

A continuación, dondequiera que usted desee álbumes de acceso y las fotos, hacer algo como esto:

class User
  ...
  has_many :authorizations
  ...
  def grap_facebook_albums
    facebook = authorizations.where(:provider => :facebook).first
    fb_user = ::FbGraph::User.fetch facebook.uid, :access_token => facebook.token
    fb_albums = fb_user.albums
  end
  ...
end

También tenía problemas para conseguir la solución + OmniAuth legado de trabajo. Tenía problemas:

  1. La cookie de sesión no almacenar el facebook token de autenticación que es necesario inicializar fb_graph y koala.
  2. I no pudo inicializar fb_graph después de conseguir el facebook token de autenticación en su lugar (pero consiguió koala al trabajo después de un poco de trabajo).

Solucioné # 1 mediante la inserción de 'sesión [: OmniAuth] = OmniAuth' en el método de la authentications_controller.rb crear

.

Me resuelto # 2 mediante el uso de la koala. Parecer fb_graph requiere de oauth2, y el legado OmniAuth uso integración oauth. Koala trabaja con la perfección con la autenticación de token de facebook almacenados por sesión [: OmniAuth] [ "credenciales"] [ "token"].

inicializar koala como esto:
 - @fbprofile =    Koala :: Facebook :: GraphAPI.new (    sesión [: OmniAuth] [ "credenciales"] [ "token"]    )

I y se aseguró oauth OAuth2 se desinstalan, y luego instalado OAuth2. Parece ser que ahora OmniAuth y fb_graph están trabajando ... pero probablemente tendrá que probar más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top