Manipulando fotos no facebook com sdk para php

Introdução

Neste artigo vamos aprender algumas dicas sobre como manipular imagens/fotos no facebook através de uma app usando o sdk do PHP: upload e marcação de fotos, enviando fotos para fanpage e diretamente para dentro de álbums.

Para que você possa utilizar os scripts abaixo é preciso que você crie uma aplicação no facebook. Caso tenha dúvidas de como criar apps para o facebook, acesse meu artigo anterior que trata sobre desse assunto.

Publicando fotos no perfil do usuário

O script abaixo é um aplicativo do facebook que simplesmente publica fotos diretamente no perfil do usuário. Como não estamos especificando nenhum álbum, a foto é inserida dentro de um álbum especial que tem o mesmo nome do aplicativo que você criou no facebook. Caso o álbum não exista, ele será criado. Altere o appid e o secret code de acordo com a sua aplicação.

<?php

include "facebook-php-sdk-master/src/facebook.php";

// APP Config
define('APP_ID', '');
define('APP_SECRET', '');

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => APP_ID,
  'secret' => APP_SECRET,
));
 
// habilita suporte para upload de arquivos
$facebook->setFileUploadSupport(true);
 
// obtem o id do usuario
$user = $facebook->getUser();
 
if ($user) { // usuario logado
        try {

            // verificar permissao
            $permissions = $facebook->api("/me/permissions");

            $perms = [];
            foreach($permissions['data'] as $perm) {
                if($perm['status'] == 'granted') {
                    $perms[] = $perm['permission'];
                }
            }

            // solicita a permissao ate que o usuario aceite para poder continuar
            if(!in_array('publish_actions', $perms)) {
                $loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions, user_photos'));
                header("Location: " . $loginUrl);
                exit;
            }

            // publicar foto

            // dados para envio da publicacao da foto
            $post_data = array(
                    "message" => "teste_" . time(),
                    "image" => '@' . realpath("resources/douglas.jpg"), // localizacao da foto
            );

            // publica foto na timeline
            $data['photo'] = $facebook->api("/me/photos", "post", $post_data);
            echo "Foto publicada com sucesso!";
 
        } catch (FacebookApiException $e) {
                // tratamento de excecao
                echo($e);
                $user = null;
        }
} else {
        // usuario nao logado, solicitar autenticacao e permissão publish_actions
        $loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions'));
        echo "<a href=\"$loginUrl\">Facebook Login</a><br />";
        echo "<strong><em>Voc&ecirc; n&atilde;o esta conectado..</em></strong>";
}

Alguns pontos a serem destacados no script acima:

  • A linha de código abaixo é obrigatória caso esteja fazendo upload de arquivos pela sua aplicação.
  • // habilita suporte para upload de arquivos
    $facebook->setFileUploadSupport(true);
    
  • Solicitar permissão publish_actions para que o aplicativo possa publicar fotos no perfil do usuário.
    $loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions'));
    
  • Validar se realmente o usuário aceitou a permissão publish_actions antes de tentar publicar:
  • // verificar permissao
    $permissions = $facebook->api("/me/permissions");
    
    foreach($permissions['data'] as $perm) {
        if($perm['status'] == 'granted' && $perm['permission'] == 'publish_actions') {
            // publicar foto
            // ...
        }	
    }
    
  • Publicando a foto. Um novo álbum será criado com o nome da aplicação no perfil do usuário.
  •                 // publica foto na timeline
                    $data['photo'] = $facebook->api("/me/photos", "post", $post_data);
    

Marcando (tagging) fotos

Através da Graph API do facebook é possível fazer marcação nas fotos publicadas pelo usuário diretamente pelo App. É importante ter o ID do usuário de facebook que deseja marcar na foto. Veja exemplo abaixo como marcar o próprio usuário na foto publicada.

// dados da marcacao
$tag = array (
      'tag_uid' => $user,
      'x' => 10,
      'y' => 10,
);
$tags[] = $tag;

// dados para envio da publicacao da foto
$post_data = array(
      "message" => "teste_" . time(),
      "image" => '@' . realpath("resources/douglas.jpg"), // localizacao da foto
      "tags" => $tags, // tags
);

// publica foto na timeline com marcacao
$facebook->api("/me/photos", "post", $post_data);

Observações:

  • É possível fazer no máximo 40 marcações em uma foto.
  • Você pode obter a lista de amigos (com os IDs) que também aceitaram o mesmo aplicativo fazendo uma requisição em /me/friends solicitando a permissão user_friends.
  • Na marcação você pode especificar a posição x-y que deseja marcar na foto.

Publicando fotos direto no álbum

Nos exemplos anteriores vimos como publicar fotos direto no perfil do usuário. As fotos serão publicadas em um álbum que contém o mesmo nome da aplicação do facebook. Porém, é possível especificar que a foto seja publicada diretamente em um álbum específico. O primeiro passo é já ter esse álbum criado e estar com o ID dele em mãos.

Obter o id do álbum é bem simples. Entre na área de Fotos do perfil, edite o álbum desejado e obtenha o id da URL aberta no navegador:

Captura de Tela 2015-07-15 às 20.28.09

No caso acima, o id do álbum será: 10200673377473382

Antes de continuar com a publicação é importante ressaltar que para publicação em outros albums vamos precisar da permissão user_photos além da publish_actions. Portanto devemos solicitá-la também:

$loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions, user_photos'));

Com o id do álbum em mãos, agora é só utilizar ele na chamada de publicação de fotos. Troque a linha abaixo:

$data['photo'] = $facebook->api("/me/photos", "post", $post_data);

por:

$data['photo'] = $facebook->api("/10200673377473382/photos", "post", $post_data);

Observações:

  • Com a permissão user_photos é possível obter a lista completa dos albums do usuário com seus respectivos ids fazendo uma requisição em /me/albums:
    $albums = $facebook->api('/me/albums', 'get');
    
  • Garantindo que o usuário aceitou também a permissão user_photos:
    // solicita a permissao ate que o usuario aceite para poder continuar
    if(!in_array('publish_actions', $perms) || !in_array('user_photos', $perms)) {
        $loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_actions, user_photos'));
        header("Location: " . $loginUrl);
        exit;
    }
    
Please follow and like us:

Comments

  1. By Ezequiel de Witt

    • mm By pasquati

      • By Ezequiel de Witt

  2. By Ezequiel de Witt

  3. By Ezequiel de Witt

    • mm By pasquati

  4. By fabio

    • mm By pasquati

  5. By Fábio

    • mm By pasquati

      • By Fábio

      • By Fábio

      • By Fábio

      • mm By pasquati

    • mm By pasquati

    • mm By pasquati

        • mm By pasquati

    • mm By pasquati

    • mm By pasquati

  6. By Jeferson Guerrero

    • mm By pasquati

      • By Jeferson Guerrero

        • mm By pasquati

  7. By Jeferson Guerrero

    • mm By pasquati

  8. By Jeferson Guerrero

  9. By Jeferson Guerrero

  10. By Jeferson Guerrero

    • mm By pasquati

    • mm By pasquati

    • mm By pasquati

    • mm By pasquati

    • mm By pasquati

  11. By Marcio Devit

    • mm By Douglas V. Pasqua

  12. By Diego Patrick

  13. By Diego Patrick

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

          • mm By Douglas V. Pasqua

          • mm By Douglas V. Pasqua

  14. By Pablo

    • mm By Douglas V. Pasqua

  15. By Erivelton Sobainski

    • mm By Douglas V. Pasqua

  16. By Márcio

  17. By Alvaro

    • mm By Douglas V. Pasqua

      • By Alvaro

  18. By Renato

    • mm By Douglas V. Pasqua

  19. By André

  20. By João

    • mm By Douglas V. Pasqua

  21. By João

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

Follow

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

Join other followers: