Facebook "Friends.getAppUsers" utilizzando l'API Graph


87

Ho un'applicazione che utilizza la vecchia chiamata API REST Friends.getAppUsersper ottenere l'elenco di amici per l'utente corrente che ha autorizzato la mia applicazione.

Ho letto la documentazione, come posso farlo con l'API Graph? Quale sarebbe un esempio di questo?

Risposte:


119

Ho cercato in giro per un po 'e anch'io ho pensato che non fosse possibile utilizzando l'API Graph.

Tuttavia, ho pubblicato una domanda simile, Sostituzione per la vecchia chiamata GetAppUsers per vedere gli amici di un utente che usano la mia applicazione? , per l'API specifica che stavo utilizzando e mi è stata data un'ottima risposta generale.

https://graph.facebook.com/me/friends?fields=installed

o più in generale

https://graph.facebook.com/{user id}/friends?fields=installed

Questo restituisce tutti gli amici, con il campo aggiuntivo "installed = true" per quegli amici che usano l'applicazione.

Ecco come funziona in Graph API Explorer :


4
Sì; Ho risposto alla tua domanda con questa risposta: facebook.stackoverflow.com/questions/7956639/…
Igy

2
Per quale applicazione questa query controlla l'installazione?
iOS Monster

3
Supponendo che tu non stia utilizzando altri campi (come e-mail, compleanno, ecc.), Per un uso di completezza /me/friends?fields=id,name,installed, che preserva l'ordine dei campi e le informazioni standard che vengono restituite senza ?fields=essere definite (vero il 2012/12/05).
plasmid87

5
Al momento della stesura di questo documento, questa query restituisce tutti gli amici (anche per i quali installednon è vero). Dobbiamo controllare manualmente se il installedcampo esiste per ogni utente.
Pankaj Bhambhani

Sì, è corretto, ho modificato la risposta per chiarire che hai tutti gli amici e devi controllare quali hanno il flag installato.
Alex

27

Questo può essere fatto con FQL.

SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1

QED!


1
Inizialmente ho utilizzato questa query e, a causa della latenza, ora ottengo tutti gli amici tramite l'API del grafico e quindi filtro sul lato dell'applicazione.
Richard

Puoi fornire maggiori dettagli sulla latenza? La domanda impiega troppo tempo per rispondere? Ho testato con un account FB con circa 300+ amici e il tempo di risposta è stato di un paio di secondi (da 2 a 4), il che non è male IMO.
loungeerdork

1
Sì, è più o meno quello che vedo. L'API del grafico impiega circa 500 ms per restituire oltre 400 amici, quindi preferisco prenderli tutti e quindi filtrare dalla mia parte.
Richard

3
puoi anche usare al me()posto del?
philfreo

8

Sì, l'API del grafico è orribilmente documentata. Non vedo alcuna documentazione di una "applicazione" tipo , ma lo fanno riferimento a informazioni di un'applicazione nella documentazione:

https://graph.facebook.com/2439131959

Quindi, forse puoi ottenere i membri dell'applicazione utilizzando la sintassi del gruppo?

https://graph.facebook.com/2439131959/members

Avrai bisogno di una sessione autenticata per testarlo. Altrimenti, sembra che Facebook ci stia spingendo a utilizzare FQL per inviare query direttamente:

http://developers.facebook.com/docs/reference/fql/application

Puoi eseguire query FQL recuperando https://api.facebook.com/method/fql.query?query=QUERY . È possibile specificare un formato di risposta come XML o JSON con il parametro query di formato.

Quindi puoi passare una query FQL per ottenere informazioni sulla tua applicazione.


2
Uffa. Sembra che il passaggio leggero all'api del grafico sia più un mal di testa che avevo inizialmente sperato.
Richard

4
Probabilmente è più facile fare tutto ciò di cui hai bisogno (tranne la pubblicazione) usando FQL. L'API Graph, nel peggiore dei casi, non ti darà tutto ciò di cui hai bisogno e, nella migliore delle ipotesi, renderà irritantemente difficile scoprire come farlo.
Daniel Schaffer

6

Vecchia API REST:

$facebook->api_client->friends_getAppUsers();

Nuova API Graph:

$facebook->api(array('method' => 'friends.getAppUsers'));

4
Questa chiamata al metodo SDK utilizza la vecchia API rest sotto le coperte. Non è l'api del grafico :-(
Richard

5

Ho svolto molte indagini su questo problema. Da quello che posso dire, non c'è modo di Friends.getAppUsersusare l'API Graph. Gli ultimi SDK forniti da Facebook utilizzano tutti la vecchia API REST per ottenere amici che utilizzano l'applicazione.


6
Questa è piuttosto vecchia e non è più la risposta giusta. Controlla la risposta di Alex in alto.
Bach

Potrebbe non essere la risposta giusta, ma è la risposta dell'OP, ed è chiaramente meglio dare un voto positivo a te stesso piuttosto che contrassegnare la risposta corretta come corretta perché ego.
Ajax

4

Usando restFB , ho fatto quanto segue (grazie Igy / Alex per la guida). Nota che Facebook restituisce un array di ID amico con "installed" = true se l'utente è installato (come si può vedere qui ).

Innanzitutto estendi la classe User, aggiungendo un installedcampo:

import com.restfb.Facebook;
import com.restfb.types.User;

public class InstalledUser extends User {

    @Facebook
    private boolean installed;

    public InstalledUser() {        
    }

    public boolean getInsatlled() {
        return installed;
    }
}

Successivamente, utilizzando DefaultFacebookClient:

FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));        
for (List<InstalledUser> friends : installedFacebookUsers) {
    for (InstalledUser friend : friends) {
        if (friend.getInsatlled()) {
            // Add friend.getId() to a list of ID, or whatever
        }
    }
}

1

La soluzione alternativa è eseguire il filtro da soli. Presumibilmente, hai tutti gli uid degli utenti che si sono registrati per la tua applicazione nel tuo database. Quindi, prima prendi tutti gli uid degli amici degli utenti e seleziona gli utenti dal tuo database che hanno gli uid corrispondenti.

Il nuovo programma Facebook Graph API sembra eseguito molto male e non del tutto pensato. Sembra che si siano affrettati a pubblicarlo per Facebook f8 prima che diventasse maturo e mancano molte funzionalità che erano disponibili prima.


0

Puoi ancora chiamare le vecchie API REST nella nuova API Graph. Questo è perfettamente valido.

Un modo alternativo è utilizzare FQL per ottenere gli amici dell'utente dell'applicazione.

Non sono sicuro che ci sia un modo per farlo usando solo l'API Graph.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.