Desenvolvimento para Facebook
http://douglaspasqua.com
DOUGLASPASQUA
Desenvolvedor PHP / Java
Forseti Tecnologia em Licitação
Desde 2002
LPIC-1, LPIC-2, PHP ZCE, Java
SCJP
Intrutor e Palestrante
GRAPHAPI
Principal forma de incluir e excluir
dados na plataforma do Facebook
GRAPHAPI
API baseada em HTTP
SDKs para PHP, Javascript, IOS, Android...
Versão Atual: v2.11
FUNÇÕES
Login com Facebook
Consultas
Publicações
Carregar fotos e vídeos
Gerenciar páginas
Gerenciar grupos
Gerenciar eventos
Buscas
Exclusões
Edições
Referência Permissões
COMPONENTEDELOGIN
http://developers.facebook.com
INSTALANDOSDKPARAPHP
{
"require": {
"facebook/graph-sdk": "^5.6"
}
}
https://github.com/facebook/php-graph-sdk
LOGIN.PHP
// instancia do facebook
$fb = new FacebookFacebook([
'app_id' => '',
'app_secret' => '',
'default_graph_version' => 'v2.11'
]);
$loginUrl = $fb->getRedirectLoginHelper()->getLoginUrl(
"http://app-teste.dev/fb-callback.php",
[ 'email', 'user_friends', 'publish_actions' ]);
echo '<a href="' . $loginUrl . '">Logar com Facebook!</a>';
FB-CALLBACK.PHP
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch(FacebookExceptionsFacebookResponseException $e) {
die ('Graph returned an error: ' . $e->getMessage());
} catch(FacebookExceptionsFacebookSDKException $e) {
die ('Facebook SDK returned an error: ' . $e->getMessage());
}
// guarda o token na sessao
$_SESSION['fb_access_token'] = (string) $accessToken;
FB-USUARIO.PHP
// recupera token da sessao
$accessToken = $_SESSION['fb_access_token'];
// usuario valido e com permissoes aceitas
$response = $fb->get('/me?fields=id,name,email,gender', $accessToken);
$user = $response->getGraphNode();
// exibe dados do usuario
echo $user['id'] . "<br> ";
echo $user['name'] . "<br> ";
echo $user['email'] . "<br> ";
echo $user['gender'] . "<br> ";
echo '<img src="https://graph.facebook.com/' . $user['id'] . '/picture">';
PERMISSÕES
email
user_friends
publish_actions
user_posts
user_photos
user_videos
user_birthday
user_managed_groups
manage_pages
pubilsh_pages
user_events
rsvp_event
https://developers.facebook.com/docs/facebook-
login/permissions/
TOKENSDEACESSO
Token de Acesso de Usuário
TOKENSDEACESSOMAISCOMUNS
Token de Acesso de Usuário
Token de Acesso de Aplicativo
Token de Acesso de Página
EXEMPLOSDEUSO
Ler informações do usuário
Consultar amigos
Analisar publicações da linha do tempo
Automatizar Publicações
Gerenciar Fotos e Vídeos
Gerenciar Páginas, Grupos e Eventos
Pesquisas
Gerenciando Fotos
Exportar as fotos do usuário
Exibir fotos em moldura personalizada
Automatizar publicação de fotos e álbuns
Páginas
Grupos
Eventos
Publicando Fotos
// token de acesso de usuario / pagina
$accessToken = '';
$photo_data = [
'caption' => 'Bela Paisagem.',
'image' => $fb->fileToUpload(__DIR__ . '/resources/paisagem-1.jpg'),
];
$response = $fb->post('/me/photos', $photo_data, $accessToken);
$graphNode = $response->getGraphNode();
echo 'ID da Foto: ' . $graphNode['id'];
Gerenciando Vídeos
Exibir vídeos em TV / usando moldura
personalizada
Listar vídeos publicados
Automatizar publicação de vídeos
Páginas
Grupos
Eventos
Publicando Vídeos
// token de acesso de usuario / pagina
$accessToken = '';
$video_data = [
'title' => 'Video Demonstração',
'description' => 'Este video é apenas uma demonstração',
'source' => $fb->videoToUpload(__DIR__ . '/resources/natureza-1.mp4'),
];
$response = $fb->post('/me/videos', $video_data, $accessToken);
$graphNode = $response->getGraphNode();
echo 'ID do Video: ' . $graphNode['id'];
Grupos
Gerenciar Grupos que o usuário administra
Notícias
Fotos
Vídeos
Consultar publicações da linha do tempo
Consultar membros
Publicando no grupo
// access token de usuario
$accessToken = "...";
// dados para envio da publicacao no feed
$feed_data = array(
"message" => "Site Oficial do php !",
"link" => "http://www.php.net",
);
$response = $fb->post("/$id_grupo/feed", $feed_data, $accessToken);
$graphNode = $response->getGraphNode();
echo 'ID da Postagem: ' . $graphNode['id'];
Eventos
Gerenciar publicações de:
Notícias
Fotos
Vídeos
Consultar publicações da linha do tempo
Consultar participantes, interessados
Automatizar a con rmação de presença
(rsvp_event)
Publicando em eventos
// access token de usuario
$accessToken = "...";
// dados para envio da publicacao no feed
$feed_data = array(
"message" => "Site Oficial do php !",
"link" => "http://www.php.net",
);
$response = $fb->post("/$id_evento/feed", $feed_data, $accessToken);
$graphNode = $response->getGraphNode();
echo 'ID da Postagem: ' . $graphNode['id'];
Páginas
Gerenciar publicações de:
Notícias
Fotos
Vídeos
Eventos
Consultar publicações da linha do tempo
Publicando em páginas
// access token de página
$accessToken = "...";
// dados para envio da publicacao no feed
$feed_data = array(
"message" => "Site Oficial do php !",
"link" => "http://www.php.net",
);
$response = $fb->post("/me/feed", $feed_data, $accessToken);
$graphNode = $response->getGraphNode();
echo 'ID da Postagem: ' . $graphNode['id'];
PLATAFORMAS/INTEGRAÇÕES
Facebook Canvas - Jogos da Web
Guia da Página
DIALOGS
Share Dialog
Login Dialog
Requests Dialog
Send Dialog
Go Live Dialog
...
Requests Dialog
Send Dialog
BUSCANDO
TIPOSDEPESQUISAS
Usuários
Páginas
Eventos
Grupos
Locais
/search?type=user&q=pasqua& elds=id,name,link
{
"id": "813707511973384",
"name": "Marco Pasqualini",
"link": "https://www.facebook.com/app_scoped_user_id/8137075119
},
{
"id": "248478062193482",
"name": "Pasquale Pasquini Leone",
"link": "https://www.facebook.com/app_scoped_user_id/2484780621
},
/search?
type=page&q=ecommerce& elds=id,name,descripti
{
"id": "1481167252194330",
"name": "Ecommerce na Prática",
"description": "Somos uma Empresa de Educação focada em Ajudar p
"link": "https://www.facebook.com/ecommercenapraticablog/"
},
{
"id": "1664297203810529",
"name": "Wayguru Ecommerce",
"link": "https://www.facebook.com/wayguruecommerce/"
},
/search?
type=event&q=linux& elds=id,name,start_time,
place{location{country,city,latitude,longitude}}
{
"id": "1381693305207957",
"name": "Linux",
"start_time": "2017-10-24T19:00:00+0400",
"place": {
"location": {
"country": "Armenia",
"city": "Yerevan",
"latitude": 40.181014099515,
"longitude": 44.525401136958
},
"id": "261859337201788"
}
},
/search?
type=group&q=php& elds=id,name,privacy
{
"id": "14811750159",
"name": "PHP Brasil",
"privacy": "OPEN"
},
{
"id": "178960242679993",
"name": "php",
"privacy": "CLOSED"
}
/search?type=place&q=café& elds=id,name,link
&center=-23.509220,-46.625734&distance=1000
{
"id": "438481102913194",
"name": "Viore Café",
"link": "https://www.facebook.com/pages/Viore-Caf%C3%A9/4384811
},
{
"id": "363567900381192",
"name": "Café Piu Piu",
"link": "https://www.facebook.com/CafePiuPiu/"
},
{
"id": "508095475924033",
"name": "Café Girondino",
"link": "https://www.facebook.com/CafeGirondinoOficial/"
}
REQUISIÇÕESBATCH
Várias operações em um únicao requisição
Até 50 operações
$batch = [
$fb->request('POST', '/me/feed', $data), // usuario
$fb->request('POST', '/me/feed', $data, $accessTokenPagina),
$fb->request('POST', "/$idGrupo/feed", $data), // grupo
$fb->request('POST', "/$idEvento/feed", $data), // evento
];
$responses = $fb->sendBatchRequest($batch);
Rate Limiting
~200 chamadas por hora por usuário
100 Usuários -> 20.000 por hora
após atingir o limite é necessário aguardar um
breve período de tempo
REVISÃODOAPLICATIVO
Itens Aprovados por Padrão
REQUISITOSPARAREVISÃO
Ícone do aplicativo (1024x1024)
URL da Política de Privacidade
Categoria do Aplicativo
Aprovaçãode de Itens (permissões)
Enviando Itens para Aprovação
Liberando para apenas para conhecidos
VERSIONAMENTO
Fique de olho na versão da API do seu App
ChangeLog
https://developers.facebook.com/docs/graph-api/changelog
~ 3 versões por ano
~ 2 anos de tempo de vida
Requisitando a API com versão mais recente
// instancia do facebook
$fb = new FacebookFacebook([
'app_id' => '',
'app_secret' => '',
'default_graph_version' => 'v2.11'
]);
Ferramenta de Atualização de API
https://developers.facebook.com/tools/api_versioning
FUNÇÕESDEPRECIADAS/NÃO
POSSÍVEIS
Alterar foto de per l do usuário
Ler mensagens do inbox do usuário
(read_mailbox) <= v2.3
Ler noti cações do usuário
(manage_noti cations) <= 2.3
Lista completa de amigos (/me/friends)
Lista de pessoas que curtiram uma página ↓
Gerar curtidas via App ↓
FQL - Facebook Query Language
Criar grupos / eventos
Enviar convites de eventos
Consultar grupos que o usuário participa
Personalização de publicações no feed
Publicar no mural de amigos
...
"Talk is cheap. Show me the code." - Linus Torvalds
https://github.com/dpasqua/graphapi-php-scripts
OBRIGADO!
http://douglaspasqua.com
https://www.facebook.com/pasquablog

Graph API - Desenvolvimento para Facebook