OmniAuth是否为Facebook Graph API提供了简单的钩子?

Ric*_*dan 7 ruby facebook ruby-on-rails facebook-graph-api omniauth

我正在努力将Omniauth与我的新Facebook应用程序集成,我正在查看相当稀疏的文档,以了解它是否提供了访问图API的简单方法......我正在从Koala移动,这非常简单.

有没有人使用过Omniauth呢?我想从用户的相册中获取照片,并为他们排序并获取唯一的网址.

apn*_*ing 14

我终于发现了:

1)包括这个宝石

2)使用宝石:

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

user.fetch

3)检索您的信息 user.name

记住你可以从这里得到任何东西ttp://developers.facebook.com/docs/reference/api/user


Ric*_*dan 2

所以我无法让 fb_graph 正常工作 - 我仍然是一个菜鸟,作为 Ruby On Rails 开发人员总共大约 8-10 周,因此对于什么必须是明显的问题没有直觉其他人。

然而,我发现了这篇很棒的小博客文章,它概述了一个简单的 Facebook 客户端,并清楚地展示了它是如何连接在一起的。我发现当 Facebook 返回 http302 而不是 http200 时,它在获取 me/picture 对象时出现问题,但在作者的帮助下很容易解决这个问题。看看: http: //bnerd.de/misc/ruby-write-basic-client-for-facebook-graph-api/

我现在使用 Omniauth 来简化基于此演练的登录/注册交互:blog.railsrumble.com/blog/2010/10/08/intridea-omniauth 以及我从中获得的令牌,我正在使用这个简单的上面 bnerd 参考中的 FBClient 用于访问 Graph API。希望我的发现可以帮助其他人。

...这是我的 bnerd 代码版本,它对我有用:

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

我相信比我更有经验的人可以改进这一点 - 我花了大约 10 周的时间学习 Ruby(这是我自 90 年代初在大学学习 Fortran 和 Pascal 以来的第一次编程!)。