Domanda

Sto lavorando sull'integrazione Omniauth con la mia nuova applicazione di Facebook, e sto cercando attraverso la documentazione piuttosto scarsa per capire se dà semplici modi per accedere alle API grafico ... mi sto muovendo da Koala che era piuttosto semplice.

Qualcuno ha usato là fuori Omniauth per questo ancora? Voglio ottenere le foto dagli album degli utenti, e ordinare e ottenere gli URL unici per loro.

È stato utile?

Soluzione 4

Così non è stato in grado di ottenere fb_graph per funzionare correttamente - Sono ancora un noob essendo stato uno sviluppatore Ruby On Rails per un totale di circa 8-10 settimane, e quindi non hanno un istinto per ciò che deve essere evidenti problemi ad altre persone.

Tuttavia ho trovato questo grande post poco che delinea un semplice client Facebook e mostra chiaramente come tutte le spine insieme. Ho trovato un problema con esso raccogliendo l'oggetto mi picture / as ritorna Facebook un http302 non http200 ma che è stato facilmente aggirato con l'aiuto dell'autore. Check it out: http://bnerd.de/ misc / ruby-write-base-client-per-facebook-grafico-api /

ora sto usando Omniauth per la semplicità dell'interazione login / registrazione in base a questa procedura dettagliata qui: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth e con il token che ricevo da che io sono utilizzando questo semplice fbclient dal riferimento bnerd sopra per accesso API grafico. La speranza quello che ho trovato aiuta gli altri.

... ecco la mia versione del codice di bnerd e ha funzionato per me:

    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

Sono sicuro che qualcuno più esperto di quanto potessi migliorare questo - avevo circa 10 settimane in apprendimento Rubino

(e il mio primo programmazione dal Fortran e Pascal all'università nei primi anni '90!).

Altri suggerimenti

Alla fine ho scoperto che:

1) comprendono questo gioiello

2) utilizzare la gemma:

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

user.fetch

3) recuperare le informazioni user.name

Ricordate che si può ottenere qualsiasi cosa, da qui ttp: //developers.facebook.com/docs/reference/api/user

Un'altra opzione è buona Koala: https://github.com/arsduo/koala

Se stai usando solo Facebook, Koala ha un proprio supporto OAuth. Funziona anche bene con OmniAuth. Per utilizzarli insieme, istituito OmniAuth per questo Railscast: http://railscasts.com/episodes/235-omniauth-part-1

Poi aggiungere una colonna 'gettone' alla tavola 'autenticazione', e tutti i metodi di supporto per il recupero di gettoni. Quando le esigenze di applicazioni di interagire con Facebook, lasciate Koala afferrare il token e fare il suo dovere. In un controllore:

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

In primo luogo, vorrei andare per fb_graph, basta confrontare:

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!")

fb_graph :

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

Quando si utilizza omniauth , ogni utente ha molte autorizzazioni (Facebook, Twitter, ...)

Per ogni autorizzazione dell'utente, è necessario memorizzare l'OAuth gettone , che viene restituito nella vostra hash OAuth callback.

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

Allora dove vuoi album di accesso e le foto, fare qualcosa di simile:

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

Ho anche avuto problemi per ottenere la soluzione di concepire + Omniauth al lavoro. Ho avuto dei problemi:

  1. Il cookie di sessione non memorizzare il facebook token di autenticazione che è necessario inizializzare fb_graph e koala.
  2. sono stato in grado di inizializzare fb_graph dopo avere ottenuto il facebook token di autenticazione in atto (ma ottenuto Koala al lavoro dopo un po 'di lavoro).

Ho risolto 1 # con l'inserimento di 'session [: omniauth] = omniauth' nel metodo della authentications_controller.rb creare

.

ho risolto 2 # utilizzando Koala. Sembrare fb_graph richiede OAuth2, e la disposizione testamentaria omniauth uso integrazione OAuth. Koala lavora con perfettamente con l'autenticazione facebook token di sessione memorizzata dal [: omniauth] [ "credenziali"] [ "token"].

si inizializza koala in questo modo:
 - @fbprofile =    Koala :: :: Facebook GraphAPI.new (    session [: omniauth] [ "credenziali"] [ "token"]    )

ho fatto in modo OAuth e OAuth2 sono stati disinstallati, e poi ho installato OAuth2. Sembra che ora omniauth e fb_graph stanno lavorando ... ma probabilmente bisogno di provare di più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top