Facebook 'Friends.getAppUsers' usando Graph API

87

Tengo una aplicación que usa la antigua llamada Friends.getAppUsersa la API REST para obtener la lista de amigos del usuario actual que ha autorizado mi aplicación.

He leído la documentación, ¿cómo hago esto con Graph API? ¿Cuál sería un ejemplo de esto?

Ricardo
fuente

Respuestas:

119

Busqué por un tiempo y también pensé que esto no era posible usando Graph API.

Sin embargo, publiqué una pregunta similar, ¿ Reemplazo de la antigua llamada de GetAppUsers para ver a los amigos de un usuario que usan mi aplicación? , para la API específica que estaba usando y me dieron una gran respuesta general.

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

o más generalmente

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

Esto devuelve todos los amigos, con el campo adicional "instalado = verdadero" para aquellos amigos que usan la aplicación.

Aquí está funcionando en Graph API Explorer :

Alex
fuente
4
Sí; Respondí a tu pregunta con esta respuesta: facebook.stackoverflow.com/questions/7956639/…
Igy
2
¿Para qué aplicación esta consulta verifica la instalación?
iOS Monster
3
Suponiendo que no está utilizando ningún otro campo (como correo electrónico, fecha de nacimiento, etc.), para el uso completo /me/friends?fields=id,name,installed, que conserva el orden de los campos y la información estándar que se devuelve sin ?fields=estar definida (verdadero en 2012/12/05).
plásmido87
5
En el momento de escribir este artículo, esta consulta devuelve todos los amigos (incluso para los cuales installedno es cierto). Necesitamos verificar manualmente si el installedcampo existe para cada usuario.
Pankaj Bhambhani
Sí, eso es correcto, he editado la respuesta para dejar claro que tienes todos los amigos y tienes que comprobar cuáles tienen la bandera instalada.
Alex
27

Esto se puede hacer con FQL.

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

QED!

tumbona
fuente
1
Originalmente usé esta consulta y, debido a la latencia, ahora solo obtengo todos los amigos a través de la API de gráficos y luego filtro en el lado de mi aplicación.
Richard
¿Puede dar más detalles sobre la latencia? ¿La consulta tarda demasiado en responder? He estado probando con una cuenta de FB con más de 300 amigos y el tiempo de respuesta ha sido de un par de segundos (2 a 4), lo que no es tan malo en mi opinión.
loungerdork
1
Sí, eso es más o menos lo que veo. La API de gráficos toma el orden de 500 ms para devolver más de 400 amigos, así que prefiero obtenerlos todos y luego filtrar de mi lado.
Richard
3
también puede usar en me()lugar del?
philfreo
8

Sí, la API Graph está terriblemente documentada. No veo ninguna documentación para una "solicitud" de tipo , pero lo hacen referencia a información de una aplicación en la documentación:

https://graph.facebook.com/2439131959

Entonces, ¿quizás pueda obtener los miembros de la aplicación usando la sintaxis de grupo?

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

Necesitará una sesión autenticada para probarlo. De lo contrario, parece que Facebook nos está presionando para que usemos FQL para enviar consultas directamente:

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

Puede ejecutar consultas FQL obteniendo https://api.facebook.com/method/fql.query?query=QUERY . Puede especificar un formato de respuesta como XML o JSON con el parámetro de consulta de formato.

Por lo que puede pasar una consulta FQL para obtener información sobre su aplicación.

typeoneerror
fuente
2
Ugh. Parece que el cambio ligero a la API de gráficos es más un dolor de cabeza de lo que esperaba originalmente.
Richard
4
Probablemente sea más fácil hacer todo lo que necesita (excepto publicar) usando FQL. La API Graph, en el peor de los casos, no le dará todo lo que necesita y, en el mejor de los casos, hará que resulte irritantemente difícil averiguar cómo hacerlo.
Daniel Schaffer
6

API REST antigua:

$facebook->api_client->friends_getAppUsers();

Nueva API Graph:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
fuente
4
Esta llamada al método SDK usa la antigua api rest debajo de las cubiertas. No es la API del gráfico :-(
Richard
5

He realizado muchas investigaciones sobre este tema. Por lo que puedo decir, no hay forma de hacerlo Friends.getAppUsersusando Graph API. Los últimos SDK proporcionados por Facebook usan la antigua API REST para hacer amigos que usen la aplicación.

Ricardo
fuente
6
Esto es bastante antiguo y ya no es la respuesta correcta. Comprueba la respuesta de Alex en la parte superior.
Bach
Puede que no sea la respuesta correcta, pero es la respuesta del OP, y claramente es mejor votarte a ti mismo que marcar la respuesta correcta como correcta por ego.
Ajax
4

Usando restFB , hice lo siguiente (gracias Igy / Alex por la orientación). Tenga en cuenta que Facebook devuelve una serie de ID de amigos con "instalado" = verdadero si el usuario está instalado (como se puede ver aquí ).

Primero amplíe la clase User, agregando 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;
    }
}

A continuación, usando 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
        }
    }
}
Ben Flynn
fuente
1

La solución es realizar el filtrado usted mismo. Presumiblemente, tiene todos los uid de los usuarios que se han registrado para su aplicación en su propia base de datos. Así que primero obtenga todos los uids de los amigos de los usuarios y seleccione los usuarios de su base de datos que tengan uids coincidentes.

El nuevo programa Facebook Graph API parece muy mal ejecutado y no está bien pensado. Parece que se apresuraron a publicarlo para Facebook f8 antes de que estuviera maduro, y faltan muchas funciones que estaban disponibles antes.

Schung
fuente
0

Aún puede llamar a las API REST antiguas en la nueva API Graph. Eso es perfectamente válido.

Una forma alternativa es utilizar FQL para conseguir amigos del usuario de la aplicación.

No estoy seguro de si hay una manera de hacer esto usando solo Graph API.

Roozbeh15
fuente