Buscando no Facebook com Graph API
Introdução
O Facebook permite, por meio da Graph API, pesquisar objetos (usuários, páginas, grupos, eventos, locais) públicos. A pesquisa pode ser muito útil para determinadas aplicações.
Usando as dicas deste artigo, você poderá criar aplicativos que contenham algum tipo funcionalidade de pesquisa. Por exemplo:
- Buscar páginas, usuários, grupos, lugares ou eventos que estejam relacionadas com uma determinada palavra-chave e posteriormente explorar mais dados sobre esses objetos.
- Pesquisar lugares com uma determinada palavra-chave (por exemplo, “pizzaria”) no raio de 2 km, entre outros.
Tipos de Pesquisa
Ao realizar pesquisas pela API é necessário informar um tipo (type) ou contexto da pesquisa. Os principais tipos de pesquisa possíveis são:
- user: Pesquisar um usuário
- page: Pesquisar um página
- event: Pesquisar um evento
- group: Pesquisar um grupo
- place: Pesquisar um local
Pesquisando
Para realizar pesquisas em objetos públicos pela API usa-se o endpoint /search. Devemos usar um token de acesso de usuário. Tokens de acesso de aplicativos não funcionam neste endpoint.
Caso queira saber como gerar tokens de acesso de usuário sugiro ler meu outro artigo Facebook API, Gerando tokens de acesso
Não é necessário nenhuma permissão aprovada para o aplicativo poder realizar as buscas.
Aconselho a experimentar os testes citados aqui usando o Graph API Explorer. É uma forma simples e rápida de testar requisições na Graph API.
Usuários
Segue exemplo de requisição para pesquisar todos usuários que contenham a palavra “pasqua” no nome. Trazendo os campos id, nome e o link para o perfil do usuário. Limitamos a consulta para 100 resultados:
/search?type=user&q=pasqua&fields=id,name,link&limit=100
A figura abaixo mostra a requisição sendo executada no Graph Api Explorer:
Para uma lista completa de campos de usuários que podem ser consultados, verificar a documentação oficial: https://developers.facebook.com/docs/graph-api/reference/user
Páginas
Segue exemplo de requisição para pesquisar todas páginas que contenham a palavra “ecommerce” no nome. Trazendo os campos id, nome, descrição e o link para o perfil da página. Limitamos a consulta para 100 resultados:
/search?type=page&q=ecommerce&fields=id,name,description,link&limit=100
A figura abaixo mostra a requisição sendo executada no Graph Api Explorer:
Para uma lista completa de campos de páginas que podem ser consultados, verificar a documentação oficial: https://developers.facebook.com/docs/graph-api/reference/page
Eventos
Segue exemplo de requisição para pesquisar todos eventos que contenham a palavra “linux” no nome. Trazendo os campos id, nome, descrição, data de início, o local incluíndo país, cidade, latitude e longitude. Limitamos a consulta para 100 resultados:
/search?type=event&q=linux&fields=id,name,description,start_time,place{location{country,city,latitude,longitude}}&limit=100
A figura abaixo mostra a requisição sendo executada no Graph Api Explorer:
Para uma lista completa de campos de eventos que podem ser consultados, verificar a documentação oficial: https://developers.facebook.com/docs/graph-api/reference/event
Grupos
Segue exemplo de requisição para pesquisar todos grupos que contenham a palavra “php” no nome. Trazendo os campos id, nome, descrição e a privacidade do grupo. Limitamos a consulta para 100 resultados:
/search?type=group&q=php&fields=id,name,privacy&limit=100
A figura abaixo mostra a requisição sendo executada no Graph Api Explorer:
Para uma lista completa de campos de eventos que podem ser consultados, verificar a documentação oficial: https://developers.facebook.com/docs/graph-api/reference/group
Locais
Segue exemplo de requisição para pesquisar todos locais que contenham a palavra “café” no nome, em um raio de 1 km da região da Avenida Paulista – São Paulo. Trazendo os campos id, nome e link para o local. Limitamos a consulta para 100 resultados:
/search?type=place&q=café&fields=id,name,link¢er=--23,5629,-46,6544&distance=1000&limit=100
A figura abaixo mostra a requisição sendo executada no Graph Api Explorer:
A novidade nessa requisição são os campos center e distance que são exclusivos para quando usamos a pesquisa do tipo local (place). Dessa forma podemos filtrar a pesquisa em um determinada região, onde center são as coordenadas latitude / longitude e distance é o raio de busca.
Locais (places) nada mais são páginas que foram configuradas com um local físico. Para configurar um local na sua página do Facebook, é necessário adicionar o endereço físico do “local” na configuração da página. Além disso a categoria da página deve constar como “Negócio Local” (Local Bussiness).
Script de busca em PHP
A seguir temos um script, usando o SDK do Facebook para PHP, que você pode usar para executar as requisições de busca que aprendemos nesse artigo.
Para usar o script é necessário que:
- Você tenha um aplicativo no facebook.
- Instale o SDK do facebook para PHP.
- Tenha um token de acesso de usuário.
Para saber como criar aplicativos no facebook veja o artigo Criando Aplicativos Facebook SDK v5 em PHP.
Para saber como gerar tokens de acesso e instalação do SDK do facebook para PHP, veja o artigo Facebook API, Gerando tokens de acesso.
No script que segue de exemplo, é feita uma busca nos usuários do facebook, que contenham a palavra pasqua no nome. Aqui você pode alterar para buscar páginas, eventos, grupos ou locais. O script também aborda como fazer paginação caso a busca retorne muitos registros.
Não esqueça de parametrizar o APP_ID, APP_SECRET, APP_VERSION e ACCESSTOKEN.
<?php // datetimezone date_default_timezone_set('America/Sao_Paulo'); // autoloader gerado pelo composer require_once __DIR__ . "/vendor/autoload.php"; /* parametrizacoes */ $APP_ID = ''; $APP_SECRET = ''; $APP_VERSION = ''; $ACCESSTOKEN = ''; // instancia do facebook $fb = new Facebook\Facebook([ 'app_id' => $APP_ID, 'app_secret' => $APP_SECRET, 'default_graph_version' => $APP_VERSION ]); try { // buscar key 'pasqua' em usuários $response = $fb->get("/search?type=user&q=pasqua&fields=id,name,link&limit=100", $ACCESSTOKEN); $users = $response->getGraphEdge(); $processaResposta = function($graphEdge) use ($fb) { echo "<pre>\n"; echo "--------------\n"; foreach($graphEdge as $user) { echo "ID => " . $user['id'] . "\n"; echo "Name => " . $user['name'] . "\n"; echo "Link => " . @$user['link'] . "\n"; echo "--------------\n"; } echo "</pre>\n"; }; // 1 pagina $processaResposta($users); // 2 pagina $next = $fb->next($users); if($next) { $processaResposta($next); } // etc... } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; }
Cara Parabéns !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! melhor artigo que eu li