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;
}

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: