Facebook 'Friends.getAppUsers' usando Graph API

87

Tenho um aplicativo que usa a antiga chamada de API REST Friends.getAppUserspara obter a lista de amigos do usuário atual que autorizou meu aplicativo.

Eu li a documentação, como faço isso com a API Graph? Qual seria um exemplo disso?

Richard
fonte

Respostas:

119

Eu pesquisei por um tempo e também pensei que isso não seria possível usando a API Graph.

No entanto, postei uma pergunta semelhante, Substituição para a antiga chamada GetAppUsers para ver os amigos de um usuário que usam meu aplicativo? , para a API específica que estava usando e recebi uma ótima resposta geral.

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

ou mais geralmente

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

Isso retorna todos os amigos, com o campo adicional "installed = true" para aqueles amigos que usam o aplicativo.

Aqui está ele funcionando no Graph API Explorer :

Alex
fonte
4
Sim; Eu respondi sua pergunta com esta resposta: facebook.stackoverflow.com/questions/7956639/…
Igy
2
Para qual aplicativo essa consulta verifica a instalação?
iOS Monster
3
Supondo que você não esteja usando nenhum outro campo (como e-mail, aniversário, etc.), para uso completo /me/friends?fields=id,name,installed, o que preserva a ordem dos campos e as informações padrão que são retornadas sem ?fields=serem definidas (verdadeiro em 05/12/2012).
plasmídeo 87
5
No momento em que este artigo foi escrito, essa consulta retorna todos os amigos (mesmo para os quais installednão é verdade). Precisamos verificar manualmente se o installedcampo existe para cada usuário.
Pankaj Bhambhani
Sim, está correto, editei a resposta para deixar claro que você recebe todos os amigos e precisa verificar quais têm o sinalizador instalado.
Alex
27

Isso pode ser feito com FQL.

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

QED!

loungerdork
fonte
1
Originalmente, usei essa consulta e, devido à latência, agora recebo todos os amigos por meio da API do gráfico e, em seguida, filtro no meu aplicativo.
Richard
Você pode dar mais detalhes sobre a latência? A pergunta está demorando muito para responder? Tenho testado com uma conta do FB com cerca de 300+ amigos e o tempo de resposta tem sido de alguns segundos (2 a 4), o que não é muito ruim, IMO.
loungerdork 01 de
1
Sim, é mais ou menos o que vejo. A API gráfica leva cerca de 500ms para retornar mais de 400 amigos, então eu prefiro pegar todos e filtrar do meu lado.
Richard
3
você também pode usar em me()vez do?
philfreo
8

Sim, a API Graph está terrivelmente documentada. Não vejo nenhuma documentação para um tipo de "aplicativo" , mas eles fazem referência às informações de um aplicativo nos documentos:

https://graph.facebook.com/2439131959

Então, talvez você possa obter os membros do aplicativo usando a sintaxe de grupo?

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

Você precisará de uma sessão autenticada para testá-lo. Caso contrário, parece que o Facebook está nos pressionando a usar FQL para enviar consultas diretamente:

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

Você pode executar consultas FQL buscando https://api.facebook.com/method/fql.query?query=QUERY . Você pode especificar um formato de resposta como XML ou JSON com o parâmetro de consulta de formato.

Assim, você pode passar uma consulta FQL para obter informações sobre seu aplicativo.

typeoneerror
fonte
2
Ugh. Parece que a mudança de luz para a API gráfica é mais uma dor de cabeça do que eu esperava inicialmente.
Richard
4
Provavelmente é mais fácil fazer tudo o que você precisa (exceto publicar) usando FQL. A API Graph, na pior das hipóteses, não fornecerá tudo que você precisa e, na melhor das hipóteses, tornará irritantemente difícil descobrir como fazer isso.
Daniel Schaffer
6

API REST antiga:

$facebook->api_client->friends_getAppUsers();

Nova API Graph:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
fonte
4
Esta chamada de método do SDK usa a antiga api rest oculta. Não é a API gráfica :-(
Richard
5

Eu fiz muitas investigações sobre este assunto. Pelo que eu posso dizer, não há como fazer Friends.getAppUsersusando Graph API. Todos os SDKs mais recentes fornecidos pelo Facebook usam a API REST antiga para fazer amigos usando o aplicativo.

Richard
fonte
6
Isso é muito antigo e não é mais a resposta certa. Verifique a resposta de Alex no topo.
Bach
Pode não ser a resposta certa, mas é a resposta do OP, e é claramente melhor se votar positivamente do que marcar a resposta correta como correta por causa do ego.
Ajax de
4

Usando o restFB , fiz o seguinte (obrigado Igy / Alex pela orientação). Observe que o Facebook retorna uma matriz de IDs de amigos com "installed" = true se o usuário estiver instalado (como pode ser visto aqui ).

Primeiro estenda a classe User, adicionando um 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;
    }
}

Em seguida, usando o 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
fonte
1

A solução alternativa é você mesmo fazer a filtragem. Presumivelmente, você tem todos os uids dos usuários que se inscreveram em seu aplicativo em seu próprio banco de dados. Portanto, primeiro pegue os uids de todos os amigos dos usuários e selecione os usuários de seu banco de dados que possuem uids correspondentes.

O novo programa da API Graph do Facebook parece muito mal executado e não muito bem pensado. Parece que eles se apressaram em publicá-lo no Facebook f8 antes que estivesse maduro, e muitas funcionalidades que estavam disponíveis antes estão faltando.

Schung
fonte
0

Você ainda pode chamar a API REST antiga na nova API Graph. Isso é perfeitamente válido.

Uma maneira alternativa é usar FQL para obter os amigos do usuário do aplicativo.

Não tenho certeza se há uma maneira de fazer isso usando apenas a API Graph.

Roozbeh15
fonte