Criando um app em PHP para postar fotos na timeline do usuário do Facebook

A primeira coisa a fazer quando se vai trabalhar com o Facebook é buscar a versão do SDK mais recente, seja ele em PHP ou Javascript, e incluir em seu código.

require 'src/facebook.php';

Em seguida inclua o Id e o App Secret fornecidos no cadastramento da sua aplicação no Facebook. Não tratarei deste cadastro aqui pois é muito simples e com uma rápida pesquisa surgem milhares de resultados.

$appId = 'XXXXXXXX';
$appSecret = 'XXXXXXXXXX';

Cria o objeto, executa a classe e testa a conexão com o usuário:

$facebook = new Facebook(array('appId' => $appId, 'secret' => $appSecret));
$user = $facebook->getUser();
if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

Se o usuário não estiver logado, dê a oportunidade:

if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  /* Esse escopo pode ser bem menor, utilize de acordo com a sua necessidade */
  $loginUrl = $facebook->getLoginUrl(array('scope' => 'read_stream,user_website,user_videos,user_status,user_religion_politics,user_relationship_details,user_relationships,user_questions,user_photos,user_notes,user_location,user_likes,user_interests,user_groups,user_events,user_education_history,user_checkins,user_activities,email,offline_access,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown'));
}

Habilite o upload da API.

$facebook->setFileUploadSupport(true);

Verifique as permissões concedidas

if ($user) {
  try{
    $permissions = $facebook->api("/me/permissions");
    if(!array_key_exists('publish_stream', $permissions['data'][0])){
      header("Location: " . $facebook->getLoginUrl(array("scope"=>"publish_stream")));
      exit;
    }
}

Aqui você criará o seu álbum. Para postar uma foto na timeline do usuário em tamanho grande, você deve criar um álbum no perfil do usuário para depois efetuar a postagem, do contrário, só é possível efetuar a postagem com a foto em miniatura.

    $album_name = 'Nome do seu álbum';
    $album_details = array('name'=>$album_name);

    /* Procura todos os álbuns do usuário para evitar que se crie um álbum repetido */
    $albuns = $facebook->api("/me/albums");
    $hasAlbum = false; // Parte do princípio que não existe o álbum.

    /* 
     * Para cada álbum encontrado, verifique se já não existe um com o mesmo nome.
     * Se já existir pega o ID do álbum
     */
    foreach($albuns['data'] as $album){
      if($album['name']==$album_name){
        $hasAlbum=true;
        $album_id = $album['id'];
      }
    }

    if(!$hasAlbum){
      $create_album = $facebook->api("/".$user."/albums", "POST", $album_details);
      $album_id = $create_album['id'];
    }

Use somente se quiser incluir uma mensagem junto com a foto, pode resgatar via $_POST

    $photo_details = array('message'=>'');

Aqui é muito importante que se use o caminho físico do arquivo no seu servidor, ou caso tenha feito um formulário para upload resgate via $_FILE.

    $file = "/home/dominio/public_html/img/foto.jpg";
    $photo_details['image'] = '@' . realpath($file);

    $upload_photo = $facebook->api('/' . $album_id . '/photos', 'post', $photo_details);

Se estiver tudo certo ao executar o script, você terá criado um álbum, postado uma foto e compartilhado na timeline do usuário.

14 respostas para “Criando um app em PHP para postar fotos na timeline do usuário do Facebook”

  1. Fala amig blz?
    Ótimo post, mas fiquei com uma duvida. Eu estou desenvolvendo um app em que a pessoa pega fotos comuns que ela ja tem no PC/Note e aplica alguns filtros e depois posta no facebook. Eu não entendi bem qual metodo e como descrever o caminho para pegar essas fotos ja com os filtros aplicados e postar, vc comentou sobre usar $_FILE mas não entende bem. Vc poderia mostrar um exemplo com upload das fotos (no meu caso das fotos ja com os filtros aplicados).

    valeu

    1. Oi Bene!
      O exemplo permanece o mesmo, a diferença é que você terá que criar um passo a mais produzindo o formulário para o upload da imagem, enviando o formulário via POST e ao invés de usar um caminho fixo na variável $file que eu criei com o caminho fixo do meu servidor, você puxa essa informação do POST enviado por meio da função $_FILE. Importante: $file é a minha variável, $_FILE pertence ao PHP.
      Agora eu estou meio apertado para publicar um exemplo, mas o upload de imagens com php é muito fácil de achar 🙂

  2. ola estou desenvolvendo um aplicativo que precisa postar fotos randomicamente e sobrepostas.
    ex: ele pega a foto do usuario logado e sobrepoe uma imagem no servidor e posta no mural do usuario..
    gostaria queme ajudasse

    1. Olá Paulo!
      A parte de postar no mural do usuário é como está descrita no texto, o que você terá que fazer antes é pré-processar esta imagem e aplicar na variável onde pede o endereço da foto.
      Existem algumas classes em PHP para se trabalhar com imagens, dê uma olhada neste link: http://www.php.net/manual/pt_BR/book.image.php
      Eu só usei até o momento para reduzir tamanho de imagem e aplicar marca d’água, mas é possível fazer qualquer tipo de trabalho.

  3. Oie Wildiney, bom post muito bom! Mais o problema é que eu não seii mexer muito com PHP. Queria pedir sua ajuda. queria saber se vc poderia fazer uma video aula explicando e mostrandop passo a passo como criar um app desses. Lhe aconselho a Postar no Youtube que muitas pessoas hj procuram muito esse tipo de video aula. Obrigado Pela Atenção!

  4. Execelente este artigo, fiz um apanhado de artigos e estou construindo minha aplicação da maneira que preciso e o seu foi peça chave.
    Agora ficou uma dúvida, como faço para guardar a permissão de forma permanente no meu site para que quando o usuário logar (não usando a conta facebook, mas usando uma conta normal) e este, no passado ja ter dado autorização para postar em sua timeline, o sistema automaticamente atualizar o a timeline dele sem necessidade que ele toda vez que postar tenha que logar na sua conta via facebook.

    Imagino que deve se guardar um token no banco de dados e usa-lo, mas até o momento não vi nenhum artigo que mostre isso..

  5. Olá, estou aprendendo API do Facebook, e estou com uma dificuldade nesse exemplo que vc postou. segue o erro:

    Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /home/wislonco/public_html/app/src/base_facebook.php on line 1106

  6. Olá, gostaria de saber se este seu script ele envia só para meus amigos ou envia para toda rede do facebook independente de ser amigo ou nao. Pois eu queria um script que fizesse justamente isso, que possa enviar pra toda rede do facebook independete de ser amigo ou nao. Estou aprendendo sobre isso e estou gostando de saber sobre isso. Assim que eu conseguir fazer isso quero postar aqui pra que todos tenha este tipo de informação pois acho que pode ser util pra alguem um dia. Desde já grato por todos e aqueles que puderem contribuir.

    1. Oi Íris!
      Que eu saiba não existe um meio “legal” de enviar mensagens para toda a rede do Facebook.
      Quando você produz o aplicativo e o usuário acessa, ele passa por uma página de aceite onde ele diz como a sua aplicação deve se comportar quanto ao compartilhamento, acesso de informações pessoais, etc.
      Nesse ponto o usuário define se deixa o seu aplicativo publicar na timeline dele, se será visível para todos, somente para amigos ou somente para ele, permite ou não o acesso aos dados pessoais e também pode permitir o acesso à rede de amigos do usuário, ou seja, neste ponto você consegue a lista de amigos desse usuário mas não a autorização para publicar na timeline deles. Isso seria crucial para que você conseguisse enviar mensagem para os usuários do facebook.
      Isso se faz necessário para evitar que comecemos a receber SPAM na nossa timeline.

  7. Olá, Wildiney! Acho que no bloco de códigos que contém a linha 21 está faltando fechamento “}”. Pelo menos aqui estava acusando erro. Coloquei o fechamento e tirei o “try {“. Parece que funcionou. Vou testar. Abraços!

  8. e ae Wildiney, achei interessante seu artigo, é realmente oq preciso, quero que o usuário envie através do meu site para o face dele a foto tirada, porém, não estou conseguindo. Quando coloquei esses códigos todos, o conteúdo da minha página simplesmente sumiu, poderia me dá uma luz? poderia mandar o código inteiro de um exemplo funcionando? ja agradeço..abraço

    1. Oi Diego!

      O que você tem que fazer é mudar o valor da variável $file para o endereço do seu arquivo. Esse valor pode ser resgatado via $_POST, $_GET ou $_REQUEST. No meu texto consta $file = “/home/dominio/public_html/img/foto.jpg”; Sempre siga este padrão para indicar o seu arquivo.

      Aconselho a ler o código e entender “a conversa”, tem muita coisa que dá para ser melhorada. Outra opção é usar uma classe que disponibilizei no Github https://github.com/wildiney/appsonface. Está funcional mas é uma primeira versão.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *