2011-04-27 24 views
8

के साथ उपयोगकर्ता के दोस्तों को ढूंढना मैं उन उपयोगकर्ताओं को अनुमति देने की कोशिश कर रहा हूं जिन्होंने अपने फेसबुक ऐप को अपने रेल ऐप से कनेक्ट किया है ताकि वे अपने फेसबुक दोस्तों को ढूंढ सकें जो पहले से ही ऐप में पंजीकृत हैं, अधिमानतः प्रारूप जैसे इंडेक्स में (फॉर्म्सप्रिंग के समान प्रदर्शन)।फेसबुक ग्राफ एपीआई

वर्तमान में मैं डेविस, ओथ + फबुक जावास्क्रिप्ट एसडीके और कोआला का उपयोग कर रहा हूं। मेरे पास प्रत्येक उपयोगकर्ता का फेसबुक यूआईडी है जो अपने फेसबुक को डीबी में सहेजा जाता है, लेकिन मुझे नहीं पता कि फेसबुक एपीआई कॉल @friends = @ graph.get_connections ("me", "friends") के परिणामों के माध्यम से फ़िल्टर कैसे करें। उन उपयोगकर्ताओं को प्रदर्शित करने के लिए जो यूआईडी के एपीआई कॉल डेटा से मेल खाते हैं।

कोई विचार? शायद एक बेहतर तरीका भी है, इसलिए लेममे को पता है कि क्या कोई अतिरिक्त जानकारी की आवश्यकता है। आपकी सहायता के लिए बहुत धन्यवाद!

संपादित करें (उन नियंत्रक में सूचकांक कार्रवाई का स्क्रीनशॉट) @oauth में

enter image description here

ध्यान दें, ऐप्लिकेशन आईडी और एप्लिकेशन गुप्त उदाहरण छवि

उत्तर

16

में बाहर क्रॉप किए गए हैं आप एक सरणी प्राप्त कर सकते हैं यूआईडी के उपयोगकर्ता के दोस्तों के लिए, आप उन्हें IN (कुछ हैंडविंग और/या छद्म कोड यहां विशेषताओं के आधार पर, आदि का उपयोग कर एक एसक्यूएल कथन में पा सकते हैं):

uids = @friends.collect(&:uid) 
# uids is an array of Facebook UID's, say [1234, 5678, 9012] 
registered_friends = User.where('fb_uid IN (?)', uids) 
# "SELECT users.* FROM users WHERE (fb_uid IN (1234, 5678, 9012))" 

यदि आपका फेसबुक डेटा किसी अन्य मॉडल में है, तो आप उस मॉडल को चुन सकते हैं और उपयोगकर्ता को लाने के लिए includes कर सकते हैं।

registered_friends = Authorizations.where(:type => 'Facebook') \ 
    .where('fb_uid IN (?)', uids).includes(:user).collect(&:user) 

[अपडेट]

लगता कोआला स्ट्रिंग आधारित Hashes की एक सरणी देता है की तरह है, तो आप collect(&:id) उपयोग करने के लिए आईडी प्राप्त करने में सक्षम नहीं होगा। यहाँ है कि मैं क्या (, संवेदनशील डेटा नकाबपोश जाहिर है) कंसोल पर आईडी की सरणी प्राप्त करने के लिए प्रयोग किया जाता है:,

pry(main)> oauth = Koala::Facebook::OAuth.new 'xxxxxxx', 'yyyyyyyyy' 
=> #<Koala::Facebook::OAuth:0x00000100d03be8> 
pry(main)> token = 'zzzzzzzzzz' 
=> "zzzzzzzzzz" 
pry(main)> graph = Koala::Facebook::GraphAPI.new token 
=> #<Koala::Facebook::GraphAPI:0x00000100ce3ac8> 
pry(main)> friends = graph.get_connections "me", "friends" 
=> [{"name"=>"A Friend", "id"=>"An ID"}, {"name"=>"Another Friend", "id"=>"Another ID"}] 
uids = friends.collect { |f| f["id"] } 
=> ["An ID", "Another ID"] 

इसके अलावा, अगर आप रेल सम्मेलनों निम्नलिखित हैं, तो अपने Services तालिका के id क्षेत्र होने जा रहा है रिकॉर्ड की प्राथमिक कुंजी, और सेवा उपयोगकर्ता की फेसबुक आईडी नहीं, इसलिए आपको किसी अन्य क्षेत्र पर पूछताछ करने की आवश्यकता हो सकती है।

+0

मैंने आपके उत्तर को लागू करने का प्रयास किया है (ऊपर स्क्रीनशॉट देखें), लेकिन जब मैं उपयोगकर्ताओं/इंडेक्स व्यू में @uids को कॉल करता हूं (जो यह देखने के लिए कर रहा है कि यह सही जानकारी प्राप्त करता है), प्रदर्शित संख्याएं नहीं हैं ग्राफ़ एपीआई कॉल से उपयोगकर्ताओं के फेसबुक आईडी। मुझे एक नंबर मिलता है "21565518202156551420" जो असंबंधित है। क्या मैं कुछ गलत कर रहा हूं? मैं आपके ज्ञान की सराहना करता हूं! – ahuang7

+0

कोआला के साथ गड़बड़ करने के बाद मैंने अपना जवाब अपडेट कर लिया है; देखें कि क्या आपके पास इसके साथ कोई और भाग्य है! –

+0

वाह यह कमाल है, आप एक कोडिंग भगवान हैं। एक बार फिर धन्यवाद! – ahuang7

2

[अपडेट]

फेसबुक के ग्राफ़ एपीआई नहीं रह पूर्ण उपयोगकर्ता के मित्र सूची संस्करण> = 2.0 के लिए करने के लिए पहुँच देता है।
API's documentation से:

एप्लिकेशन को मित्रों: /me/friends endpoint अब एक व्यक्ति के दोस्तों की पूरी सूची भी शामिल है। इसके बजाए, अब यह उस व्यक्ति के दोस्तों की सूची लौटाता है जो आपके ऐप का उपयोग कर रहे हैं।

संबंधित मुद्दे