Facebook php sdk, postando mensagens no mural do usuário
Introdução
Já mostramos em artigo anterior como publicar (upload) e marcar fotos na linha do tempo dos usuários. Neste artigo, vamos mostrar algo mais simples. Como postar mensagens simples na linha de tempo do usuário. Não iremos fazer o upload de fotos, será simples publicação de textos no feed de notícias, podendo linkar imagens e vídeos externos. É um método bem parecido com o visto anteriormente, porém com algumas pequenas diferenças.
Um dos pré-requisitos é que você já tenha criado uma app no facebook. Mais detalhes, acesso o meu outro artigo, Criando Aplicativos Para Facebook Usando SDK Do PHP
Para que sua app possa postar mensagens na linha de tempo do usuário, você deve solicitar a permissão publish_actions.
Solicitando permissão publish_actions.
// solicita permissao publish_actions $loginUrl = $facebook->getLoginUrl(array("scope" => "publish_actions")); header("Location: $loginUrl");
Post simples no feed de notícias
Vamos demonstrar abaixo a forma mais simples de publicação no mural através de app. Os principais campos são message, name e link.
$facebook->api("/me/feed", "post", array( 'message' => "Site para desenvolvedores da linguagem PHP", 'name' => "Site Oficial do PHP", 'link' => "http://www.php.net", ));
Descrição dos campos
- link: Link anexado na publicação
- name: Nome do link
- message: A mensagem contida na publicação
Veja o resultado comentado:
Linkando uma imagem no post
Veja que no post anterior não parametrizamos nenhuma imagem. O próprio mecanismo de post do facebook escolheu uma imagem “relevante” contida no link informado no post. Porém, através da lib do sdk, podemos determinar qual vai ser a imagem anexada no post. Para isso, informamos o campo picture.
Veja código abaixo:
$facebook->api("/me/feed", "post", array( 'message' => "Site para desenvolvedores da linguagem PHP", 'name' => "Site Oficial do PHP", 'link' => "http://www.php.net", 'picture' => "http://www.exemploteste.com.br/elefante-php.png", ));
A única diferença aqui é o campo picture que foi adicionado. Ele informa qual será o link para uma imagem anexada no post. Vale atentar aqui, que a imagem não será publicada no perfil do usuário do facebook. Ela não será incluída dentro de nenhum álbum do usuário, como já vimos no artigo anterior, Manipulando fotos no facebook com sdk para php. Será incluído apenas um link para uma imagem externa, acessível através de uma URL.
Veja abaixo o print da postagem:
Veja que agora definimos a imagem que será exibida junto com a postagem. Diferente do post anterior que o próprio mecanismo do facebook escolheu uma imagem para ser anexada.
Linkando um vídeo no post
Veremos agora, como incorporar na postagem, um link para vídeo. No caso é um link para um vídeo no youtube: PHP Tutorial #1. Para tal, devemos usar o parâmetro source. Vamos trocar o campo picture do exemplo anterior pelo campo source.
$facebook->api("/me/feed", "post", array( 'message' => "Tutorial básico de PHP no Youtube", 'name' => "Video Aula de PHP", 'link' => "http://www.youtube.com/watch?v=Txj4mj5yom0", 'source' => "http://www.youtube.com/e/Txj4mj5yom0", 'caption' => "www.youtube.com", ));
Veja que no código acima, informamos o parâmetro source que deve ser um link direto para o vídeo. Esse video poderá ser assistido dentro do próprio facebook. A URL definida no parâmetro link será aberta em uma nova janela quando você clicar no link da postagem. Nesse caso será aberto a página do youtube referente à vídeo aula.
Veja abaixo o print da postagem:
Perceba também, nessa última postagem, que usamos um novo parâmetro chamado caption. É o caption do link exibido logo abaixo do nome (campo name) da postagem. Ao invés de exibir o link www.youtube.com/watch?v=Txj4mj5yom0, será exibido somente www.youtube.com
Verificando Permissões
Antes de realizar a postagem no feed do usuário é aconselhado verificar se o usuário realmente aceitou a permissão publish_actions. Uma vez que o usuário pode não ter aceito a permissão ou tê-la revogado em algum momento. O código abaixo pode ser usado para fazer essa validação:
// verificar permissao $permissions = $facebook->api("/me/permissions"); foreach($permissions['data'] as $perm) { if($perm['status'] == 'granted' && $perm['permission'] == 'publish_actions') { // pode publicar } }
Referência
Para mais opções referente a postagem de mensagens no facebook, acesse a documentação oficial: http://developers.facebook.com/docs/reference/api/post/
como postar no mural de alguem que tem o app instalodo?
oi Rafael, é possível postar no mural do usuário que tenha o app instalado através de access_token.
Vou publicar como trabalhar com access_token em próximos posts. Enquanto isso, além de pesquisar no google, leia algum dos docs abaixo:
http://developers.facebook.com/docs/opengraph/using-app-tokens/
https://developers.facebook.com/docs/authentication/
Boa sorte!
Obrigado, vou tentar.
Olá camarada, muito legal esse tutorial. Parabéns!
Deixa-me te perguntar uma coisa: Teria como, através de uma aplicação em php similar a essa, onde eu envie uma Mensagem a uma(s) pessoa(s)? Aquela Mensagem provada?
Obrigado pela atenção e sucesso.
Talles
Obrigado pelo contato Talles. Pelo que eu andei pesquisando, não existe uma documentação clara sobre esse tópico. Muitos dizem que não é possível enviar mensagens privadas pela app. Mas ainda vou estudar o caso e realizar alguns testes.
De qualquer forma, selecionei alguns links que podem te ajudar com o assunto:
http://stackoverflow.com/questions/2574431/facebook-api-send-private-messages-to-friends
http://stackoverflow.com/questions/2943297/how-send-message-facebook-friend-through-graph-api-using-accessstoken
http://stackoverflow.com/questions/4363515/sending-private-messages-through-facebook-api
Como fazer aplicativos para pagina do facebook utilizando foto e nome do perfil???
Ex:https://www.facebook.com/photo.php?fbid=159972967478697&set=a.159972960812031.40956.100003979854403&type=3&theater
Você gostaria de um aplicativo para publicar fotos em uma página do facebook ?
Verifique o artigo:
http://wp.me/pdjRF-Jm
Verifique a sessão Publicando fotos em uma fanpage do artigo acima.
Obrigado e Boa Sorte!
Olá amigo, primeiramente meus parabéns pelos artigos, estão sendo de grande valia. Criei um app que publica uma foto no mural do usuário, está funcionando ok, porém estou com problema de permissão, a foto fica aguardando aprovação do usuário. Quando eu coloco o código abaixo a tela do app abre branca:
/* obtem as permissões atuais que usuário tem em relação a sua aplicação */
$permissions = $facebook->api(“/me/permissions”);
/* verifica se o usuário já autorizou a publicação de fotos para a sua aplicação */
if (!array_key_exists(‘publish_stream’, $permissions[‘data’][0])) {
/* solicita permissão */
header( “Location: ” . $facebook->getLoginUrl(array(“scope” => “publish_stream”)) );
exit;
}
Tem alguma ideia do que pode ser?
Obrigado.
Olá Adriano,
Se o seu código abriu a tela em branco, provavelmente o usuário (você) aceitou as permissões da aplicação corretamente. Verifique as configurações de privacidade de sua conta. Talvez esteja bloqueando algo:
Menu -> Configurações de Privacidade -> Linha do Tempo e Marcação.
Boa sorte!
boa noite! parabéns pelos artigos são muito uteis….
estou criando um app simples em java para postar no murais de amigos….
pergunta: $facebook->api(“/me/feed”, “post”, array(
na sintaxe acima “/me” é o nome do usuário que estou postando no painel? em outras palavras se eu colocar fernando (meu usuário) vai postar no meu mural, se eu colocar rafael, por exemplo, vai postar no mural do rafael?
abs,
Bom dia Luiz! Legal que esta sendo útil.
O /me é uma referência para o usuário logado que esta acessando sua app no momento.
Você pode postar no mural do outro usuário usando o seu username como você citou. Ou você pode usar o ID do usuário também (Eu prefiro). Ex:
/10000101010100/feed
Você pode obter o id e outras informações do usuário usando a URL abaixo:
https://graph.facebook.com/username
Lembre-se que para postar no mural de outro usuário ele terá que ter permitido sua app poder efetuar essa operação.
Boa sorte!
Ola companheiro, muito bom os tutoriais!
É possível eu obter os dados do usuario através do e-mail de login dele?
Muitos exemplos mostram como recuperar atraves do id ou nome de usuario, mas precisaria de algo assim
http://graph.facebook.com/email@gmail.com
Obrigado pela Atenção
Denis
Olá Denis! Obrigado pelo feedback.
A informação do email do usuário não é publica através da API do facebook. Para obter o email do usuário pelo aplicativo você precisa solicitar a permissão “email”. Veja:
http://developers.facebook.com/docs/reference/login/email-permissions/
Não existe uma forma de busca de usuários por email! Um exemplo: Você consegue obter a lista de amigos do usuário que esta acessando sua aplicação, mas nessa lista, você não tem acesso ao email deles. A não ser que algum desses amigos também tenha aceitado a sua aplicação e fornecido a permissão de acesso ao email.
Outro exemplo, é que não existe uma permissão chamada friends_email, assim como existe friends_photos ou friends_location, etc..
Boa sorte!
Otima dica.. porém queria tirar uma duvida acredito que não tem muito a ver com o topico em si porém nao consegui resolver…
por exemplo, quando tento acessar pelo facebook o meu aplicativo exemplo fb.com/meuapp2
Aparece que deu falha para carregar a pagina no caso onde está hospedado o aplicativo que é no meu dominio…
sabe dizer o que sera isso?
Olá Roni! Como esta configurado sua app? Você configurou ela como Website with Facebook Login? como Page Tab? ou App on Facebook?
Se esta em dúvida, acesse o link https://developers.facebook.com/apps e entre nas configurações do seu aplicativo.
Boa sorte!
post show de bola! … uma questão adicional: como faço para manter uma base de dados com todos os usuarios que me concederam permissão de postagem no mural, para que, numa outra ocasião eu possa postar novamente em todos eles?
Olá Celso,
Verifique o artigo abaixo que trata exatamente sobre esse assunto.
Facebook sdk, publicação offline no mural do usuário com access token
O importante é guardar o id do usuário do facebook em sua base de dados.
Lembre-se que nada impede que o usuário remova as permissões do seu aplicativo da conta dele.
Boa sorte!
Como faço para marcar amigos na publicação?
Olá Alex,
Me parece que essa opção de marcação foi desabilitada na API. Existia uma forma usando o formato: @[user_id:1:name] ! Porém pelo que andei verificando não funciona mais. Cheguei até a testar por aqui e não funcionou.
Através da API é possível mencionar onde esteve (place) e com quem esteve (tags) no local. Mais detalhes sobre esses parâmetros, verificar os links:
(Veja que o parâmetro tags da postagem exige o parâmetro place)
https://developers.facebook.com/docs/reference/api/user/#posts
http://stackoverflow.com/questions/10864307/tag-friends-on-a-feed-post-with-php-facebook-sdk
Boa sorte!
Ja tentei com esses exemplos, porem sem sucesso. Só consegui marcar paginas como “place”. Gostaria de marcar é uma pessoa, por enquanto nada.
Olá Alex,
Na documentação do facebook, diz que não é possível marcar pessoas diretamente através de API (Algumas funções do facebook não é possível fazer diretamente pela API). É possível apenas marcar pessoas quando você marca páginas (através do place). Utilize juntamente o parâmetro tags com o place e veja se consegue algum resultado:
Para ver como usar o parâmetro tags: (NOTE: You cannot specify this field without also specifying a place)
https://developers.facebook.com/docs/reference/api/user/#posts
Boa sorte!
Tentei novamente, mas sem sucesso. Será que preciso de alguma outra permissão?
Douglas, nesse caso é somente para uma página pessoal, e quando eu tenho uma página que gerencia outras ?
Exemplo, tenho uma conta Carlos, que gerencial Rafael, Paulo, e a João. Caso eu queria postar na João como faço ? pois o /me/ só ira postar na raiz (Carlos);
Carlos, Você esta querendo postar em fan page ou no perfil de usuário normal?
Douglas,
Seria uma Fan page.
Olá Carlos,
Veja o exemplo no link:
https://gist.github.com/dpasqua/6221072
No exemplo mostra como fazer publicação em fan page. Basta informar o ID da fan page no início do script, na parametrização. O usuário que esta acessando o app tem que ser administrador da fan page que deseja publicar.
Caso queira um processo para publicar na fan page automaticamente (robô automatizado), siga as instruções abaixo:
http://www.douglaspasqua.com/2013/02/09/facebook-sdk-publicando-fotos-na-fan-page-com-access-token/
Obrigado!
Douglas, sensacional cara !
Porém usando o primeiro Link, é o que manda a minha necessidade, porém não consegui cara, gerei o Token com sucesso.
Mas não consigo fazer a publicação, você teria Skype, ou telefone ?
Amigo, seu tutorial me ajudou bastante. Muito obrigado! Abraço!
Que bom que ajudou! Boa sorte! Abraço!
Olá Douglas, parabéns pelo tutorial, só estou com uma dúvida com relação a visualização do post, fiz um post semelhante ao que você fez no exemplo, porém só eu vejo ele na pagina do Facebook, entrei em outro Facebook e ele não aparece, já alterei no próprio post que pode ser visto pelo publico e pelos amigos, tem que dar alguma permissão nas configurações do aplicativo?
Olá Linyker,
Pode ser que a opção SandBox Mode do seu aplicativo esteja habilitada. Para saber mais sobre o SandBox Mode, veja o meu outro artigo:
http://www.douglaspasqua.com/2013/04/18/dicas-para-testar-aplicativos-para-facebook-durante-o-desenvolvimento/
PS: Para fazer um teste válido, faça o login no facebook com um outro perfil que seja “amigo” do perfil onde foi feito a postagem e entre na página do perfil do usuário, só para garantir.
Boa sorte!
Douglas parabéns pelo post, falta muito material nacional de qualidade, você tem ajudado muito.
Como faço para postar no mural do amigo ao invés do meu? Tentei trocar o /me pelo ID mas dá erro.
Olá Daniel,
Muito grato que o material esta sendo bem aproveitado!
Não é possível postar diretamente no mural de um usuário caso ele não tenha aceitado o seu aplicativo. Também é necessário que o usuário tenha aceitado a permissão publish_stream. É uma mecanismo de segurança do Graph API.
Um dica que talvez ajude: Depois que o usuário aceitou o aplicativo e permitiu o publish_stream, você pode guardar o ID dele e posteriormente realizar publicações offline no mural de acordo com o que esta descrito no seguinte tutorial:
Facebook sdk, publicação offline no mural do usuário com access token
Boa sorte!
Amigão… realmente muito bom o tutorial, resolvi o antigo problema e funcionou direitinho, porem agora…. Aparece essa mensagem:
—Conectar no aplicativo
—Você não esta conectado..
—Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /home/storage/8/84/75/site1380665544/public_html/admin/facebook-php-sdk-master/src/base_facebook.php on line 1264
Eu clico em conectar ele “pisca” a tela e volta para a mesma mensagem!!!
Foi coisa de minutos, postei alguns itens em meu mural, sai da conta e entrei em outra… quando voltei… PAU!
Outras coisas que notei:
1- As postagens somente ficam visíveis pra mim e não para todos, tem alguma dica?
2- Não posta quando está off-line (sem estar logado)…
Quebrei a cabeça a noite toda com isso, preciso de uma luz!
Abraços e obrigado!
Acho que arrumei… hehehehehehe
Coloquei as mesmas permissões listadas no código e na lista do app do facebook, e mais algumas!
foi somente isso!
Segue lista de permissões
User & Friend Permissions: email user_about_me user_photos friends_about_me
Permissões ampliadas: manage_pages publish_stream read_stream
No código:
$facebook = new Facebook(array(
‘appId’ => ‘XXXXXXXXXXXXXXXXXXXX’,
‘secret’ => ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’,
‘cookie’ => true, #adicionei essa linha
));
Abraços e obrigado
Oi Christian, Legal que funcionou!
Uma dica para quando ocorrer esses problemas com token ou sessão, exclua o aplicativo do perfil do seu usuário (Configurações da Conta -> Aplicativos), encontra o seu aplicativo e exclua ele. Faça o logoff no facebook, feche o navegador e reinicie o processo. Isso limpa qualquer sessão presa ou conflito de acesso.
Em relação à somente você estar vendo as publicações, pode ser o SandBox Mode que esta ativo. Para saber mais sobre o SandBox Mode, verifique meu outro artigo:
http://www.douglaspasqua.com/2013/04/18/dicas-para-testar-aplicativos-para-facebook-durante-o-desenvolvimento/
Boa sorte!
Agora sim tá funcionando corretamente (acho eu! hehehehe) fiz uma cacetada de testes e até agora não deu nenhum pau!!! Porem usei o código fornecido pelo próprio face… acho que está mais atual, sabe como é o Facebook… não avisam nada e agente que se ferra, igual o twitter… mas enfim, estou colocando o link para o código usado!
https://developers.facebook.com/docs/php/howto/postwithgraphapi/
Abraços e até a próxima atualização do Faceboooooooooooooooooooook!!!
Obrigado pelo feedback!
Abraços!
Parabéns pelos artigos sobre o Facebook, ajudou demais!
Olá amigo tenho acompanhado seus posts muito bons.
poderia ajudar a todos apresentando um tutorial de como postar no mural das pessoas players de webradio.
antes era possivel somente publicando o link no feed agora exige app_id.
vejamos como era antes:
titulo da webradio
antes bastava ter um https seguro e usar os codigos acima agora não sei como ficou.
obrigado
Eder
Olá Eder,
Muito bom que esta gostando dos posts.
Obrigado pela sugestão!
Eu não cheguei a utilizar essa funcionalidade. Se possível, me envie mais links sobre o assunto.
(eu acho que partes do seu comentário foram cortadas)
Obrigado.
Muito bom mesmo, mas tenho uma dúvida… Como faço para publicar no perfil de todos os usuários que tiverem o aplicativo instalado? Só to conseguindo publicar em um usuário, isso eu logar no perfil, e abrir o link .php que está esse código ai… Aguardo respostas!
Olá Pedro,
Para publicar no mural de todos usuários que instalaram o seu aplicativo, será necessário guardar o ID do usuário em um banco de dados para poder realizar a postagem posteriormente usando um access token de aplicativo. O processo mais detalhado desta solução é descrito neste outro artigo:
http://www.douglaspasqua.com/2013/03/26/facebook-sdk-publicacao-offline-no-mural-do-usuario-com-access-token/
Boa sorte!
Olá Douglas, primeira mente obrigado por compartilhar seu conhecimento conosco. Funcionou perfeitamente. O código tá show. Mas me surgiu uma dúvida: Como faço pra chamar esse código por um botão sem dar refresh na página. Será que rola via ajax. Se sim, como?
Um grande abraço e mais uma vez obrigado.
Atte.
Dam
Ola Douglas parabens pelos artigos! Gostaria de tirar uma duvida na função post, dessa maneira que vc fez o post é automatico, mas eu gostaria de abrir aquela janela pro usuario comentar o post e quando ele der o ok aparecer na timeline dele, como se fosse um share, que modificação preciso fazer ali na função ?
Olá Andre,
Você pode utilizar os Dialogs já prontos do próprio facebook integrado no seu aplicativo. Sugiro analisar as possibilidades neste link:
https://developers.facebook.com/docs/dialogs/
Boa sorte!
Opa beleza esstou começando agora com a API do facebook como php e estou com uma duvida,
claro se tiver como esclarecer para min fico muito grato.
Tipo eu faço a postagem tudo normal. Ele posta no mural corretamente e gostaria de saber se tem como pegar a url dessa ultima postagem?
Grato =)