2011-04-27 16 views
8

Próbuję zezwolić użytkownikom, którzy połączyli swoje konta na Facebooku, z moją aplikacją railsową, aby znaleźć swoich znajomych z Facebooka, którzy już zarejestrowali się w aplikacji, najlepiej w formacie podobnym do indeksu (podobnego do Formspringa pokaz).Znajdowanie znajomych użytkownika za pomocą Facebooka Graph API

Obecnie używam Devise, OAuth + Fbook Javascript SDK i Koala. Mam identyfikator UID Facebooka każdego użytkownika, który łączy swój Facebook zapisany w bazie danych, ale nie wiem, jak filtrować wyniki z interfejsu API Facebook @friends = @ graph.get_connections ("ja", "przyjaciele") w celu wyświetlenia użytkowników, którzy mają pasujące UID do danych połączeń API.

Jakieś myśli? Prawdopodobnie jest jeszcze lepszy sposób, więc lem wie, czy potrzebne są dodatkowe informacje. Bardzo dziękuję za pomoc!

EDIT (zrzut ekranu akcji index w kontrolerze użytkowników)

enter image description here

Uwaga w @oauth, app app id i tajne są przycięte w przykładowym obrazie

Odpowiedz

16

Jeśli można uzyskać tablicę UID dla przyjaciół użytkownika, można znaleźć je wszystkie w pojedynczej instrukcji SQL za pomocą IN (niektóre handwaving i/lub pseudokod tutaj, w zależności od atrybutów, itp.):

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

Jeśli dane z Facebooka znajdują się w innym modelu, możesz wybrać ten model i wykonać includes, aby wprowadzić użytkownika.

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

[Aktualizacja]

Wygląda Koala zwraca tablicę smyczkowego oparte mieszań, więc nie będzie w stanie wykorzystać collect(&:id) uzyskać identyfikatory. Oto, co kiedyś dostać tablicę identyfikatorów na konsoli (zamaskowane dane wrażliwe, oczywiście):

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

Ponadto, jeśli jesteś po Rails konwencje, pole tabeli Servicesid ma być klucz podstawowy rekordu, a nie identyfikator serwisu Facebook użytkownika usługi, więc może być konieczne zapytanie do innego pola.

+0

Próbowałem wprowadzić w życie twoją odpowiedź (patrz powyższy zrzut ekranu), ale kiedy zadzwonię do @uids w widoku użytkowników/indeksu (co robię, aby sprawdzić, czy dostaję właściwe informacje), wyświetlane liczby nie są identyfikatory Facebooka użytkowników z wywołania api wykresu. Otrzymuję jeden numer "21565518202156551420", który nie ma związku. Czy coś robię niewłaściwie? Doceniam twoją mądrość! – ahuang7

+0

Zaktualizowałem moją odpowiedź po zadzieraniu z Koala; sprawdź, czy masz więcej szczęścia! –

+0

Wow, która jest niesamowita, jesteś bogiem kodowania. Dzięki jeszcze raz! – ahuang7

2

[Aktualizacja]

Graph API Facebooka już nie daje dostęp do listy znajomych pełną użytkownika dla wersji> = 2.0.
Z API's documentation:

App Znajomi: Punkt końcowy /me/friends nie zawiera już pełną listę osoby przyjaciół. Zamiast tego zwraca teraz listę znajomych danej osoby, którzy również używają Twojej aplikacji.

Powiązane problemy