سؤال

أنا أعمل على دمج Omniauth مع تطبيق Facebook الجديد الخاص بي ، وأنا أبحث عن الوثائق المتفرقة إلى حد ما لفهم ما إذا كان يعطي طرقًا بسيطة للوصول إلى واجهة برمجة تطبيقات الرسم البياني ... أنتقل من Koala الذي كان بسيطًا جدًا.

هل استخدم أي شخص هناك Omniauth لهذا حتى الآن؟ أرغب في الحصول على صور من ألبومات المستخدمين ، والفرز والحصول على عناوين URL الفريدة لهم.

هل كانت مفيدة؟

المحلول 4

لذلك لم أتمكن من الحصول على FB_Graph للعمل بشكل صحيح - ما زلت NOOB بعد أن كنت مطور Ruby on Rails ما مجموعه حوالي 8-10 أسابيع ، وبالتالي ليس لدي غريزة لما يجب أن يكون مشاكل واضحة ل الناس الآخرين.

ومع ذلك ، فقد وجدت منشور المدونة الصغير الرائع الذي يحدد عميلًا بسيطًا على Facebook ويظهر بوضوح كيف يتم سداد كل شيء معًا. لقد وجدت مشكلة معها في التقاط كائن ME/Picture حيث يقوم Facebook بإرجاع HTTP302 وليس HTTP200 ولكن تم العمل بسهولة بمساعدة المؤلف. تحقق من ذلك: http://bnerd.de/misc/ruby-write-basic-client-for-facebook-graph-api/

أنا الآن أستخدم omniauth لبساطة تفاعل تسجيل الدخول/التسجيل استنادًا إلى هذا التجول هنا: blog.railsrumble.com/blog/2010/08/intridea-omniauth ومع الرمز المميز الذي أحصل عليه من هذا الأمر البسيط FBClient من مرجع Bnerd أعلاه للوصول إلى 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

أنا متأكد من أن شخصًا أكثر خبرة مما يمكنني تحسينه - كنت على بعد حوالي 10 أسابيع من تعلم روبي (وأول برمجة منذ فورتران وباسكال في الجامعة في أوائل التسعينيات!).

نصائح أخرى

اكتشفت أخيرًا:

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

خيار جيد آخر هو كوالا: https://github.com/arsduo/koala

إذا كنت تستخدم Facebook فقط ، فإن Koala لديها دعم Oauth الخاص بها. كما أنه يعمل بشكل جيد مع omniauth. لاستخدامها معًا ، قم بإعداد Omniauth لكل هذه القضبان:http://railscasts.com/episodes/235-omniauth-bart-1

ثم أضف عمود "رمز" إلى جدول "المصادقة" ، وأي طرق داعمة لاسترداد الرموز. عندما يحتاج التطبيق إلى التفاعل مع Facebook ، دع Koala الاستيلاء على الرمز المميز والقيام بعمله. في وحدة التحكم:

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

أولاً ، سأذهب إلى FB_Graph ، فقط قارن:

مع كوالا:

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

عند استخدام omniauth, ، كل مستخدم لديه العديد من التراخيص (Facebook ، Twitter ، ...)

لكل إذن من المستخدم ، يجب عليك تخزين OAUTH رمز يتم إرجاع ذلك في تجزئة رد الاتصال OAUTH الخاص بك.

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

ثم أينما تريد الوصول إلى الألبومات والصور ، افعل شيئًا كهذا:

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

واجهت أيضًا مشاكل في الحصول على حل Oper+Omniauth للعمل. اضطررت إلى المشاكل:

  1. لم يخزن ملف تعريف ارتباط الجلسة رمز مصادقة Facebook الضروري لتهيئة FB_Graph و Koala.
  2. لم أتمكن من تهيئة FB_Graph بعد الحصول على رمز مصادقة Facebook في مكانه (لكنني حصلت على Koala للعمل بعد بعض العمل).

لقد قمت بحل #1 عن طريق إدراج "الجلسة [: omniauth] = omniauth" في طريقة إنشاء antaintications_controller.rb.

لقد حللت #2 باستخدام كوالا. يبدو أن fb_graph يتطلب OAUTH2 ، واستخدام تكامل omniauth inport. تعمل Koala تمامًا مع رمز مصادقة Facebook المخزّن بواسطة الجلسة [: Omniauth] ["بيانات الاعتماد"] ["Token"].

تقوم بتهيئة كوالا مثل هذا:
- fbprofile = koala :: facebook :: graphapi.new (الجلسة [: omniauth] ["بيانات الاعتماد"] ["رمز"])

لقد تأكدت من إلغاء تثبيت Oauth و OAuth2 ، ثم قمت بتثبيت OAUTH2. يبدو أن Omniauth و FB_Graph يعملان الآن ... ولكن ربما تحتاج إلى اختبار أكثر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top