Manipulando fotos no facebook com sdk para php

Posted on junho 28, 2012. Filed under: Facebook, PHP | Tags:, , |

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
// incluir a lib fo facebook
require 'src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXXXXX',
  'secret' => 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',
));

// habilita suporte para upload de arquivos
$facebook->setFileUploadSupport(true);

// obtem o id do usuario
$user = $facebook->getUser();

if ($user) { // usuario logado
        try {
                // verifica se o usuario permitiou o aplicativo publicar fotos em seu perfil
                $permissions = $facebook->api("/me/permissions");
                if(!array_key_exists('publish_stream', $permissions['data'][0])) {
                    header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
                    exit;
                }

                // dados para envio da publicacao da foto
                $post_data = array(
                        "message" => "teste_" . time(),
                        "image" => '@' . realpath("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
        $loginUrl = $facebook->getLoginUrl();
        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_stream para que o aplicativo possa publicar fotos no perfil do usuário.
    // verifica se o usuario permitiou o aplicativo publicar fotos em seu perfil
    $permissions = $facebook->api("/me/permissions");
    if(!array_key_exists('publish_stream', $permissions['data'][0])) {
        header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
        exit;
    }
    
  • 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 ou através da aplicação. Você precisa do id da foto e do id do usuário que deseja marcar na foto. Além disso, você precisa requisitar a permissão user_photos e friends_photos para permitir que a aplicação marque as fotos do usuário.

  • Solicitando as permissões necessárias para fazer a marcação (publish_stream, user_photos, friends_photos)
  • // verifica se o usuario permitiou o aplicativo publicar e marcar fotos em seu perfil
    $permissions = $facebook->api("/me/permissions");
    if(!array_key_exists('publish_stream', $permissions['data'][0])
       ||  !array_key_exists('user_photos', $permissions['data'][0])
       ||  !array_key_exists('friends_photos', $permissions['data'][0])) {
           header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, user_photos, friends_photos")) );
           exit;
    }
    
  • Marcando a foto. É necessário especificar a localização da marcação na foto. No exemplo abaixo, ficou 10% à partir do topo e 10% à partir da esquerda.
  • // publica foto
    $data['photo'] = $facebook->api("/me/photos", 'post', $post_data);
    
    // obter o id da foto publicada anteriormente
    $photo_id = $data['photo']['id']; 
    
    // dados do perfil do usuario
    // obter o id do usuario para marcar a foto
    $user_profile = $facebook->api('/me');
    
    // marcar a foto com posição 10% acima e 10% à esquerda
    $argstag = array('to' => $user_profile['id']);
    $argstag['x'] = '10';
    $argstag['y'] = '10';
    
    // realizando a marcacao
    $datatag = $facebook->api('/' . $photo_id . '/tags', 'post', $argstag);
    echo "Foto publicada e marcada com sucesso!";
    

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:

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

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("/2191499203549/photos", "post", $post_data);

Publicando fotos em uma fanpage

Para quem não sabe, uma fanpage é uma página personalizada criada dentro do facebook. É uma maneira de divulgar o seu negócio, sua empresa, produtos, bandas, artistas, etc…

É possível publicar fotos diretamente na fanpage através de uma aplicação do facebook. O usuário usado na aplicação deve ser administrador da fanpage. Além disso ele deve permitir à aplicação publicar em sua página através da permissão manage_pages.

Estamos assumindo que você já tenha criado a sua fanpage. Portanto, o primeiro passo para poder publicar fotos nela, é obter o seu id. Abra a página da fanpage, clique em Editar Página -> Atualizar Informações. O id da fanpage estará na URL do navegador:

No caso do exemplo acima, o ID da fanpage ficou: 354256421309739

Vamos as próximas etapas:

  • Solicitando as permissões necessárias para publicar na fanpage (publish_stream e manage_pages)
  •         $permissions = $facebook->api("/me/permissions");
            if(!array_key_exists('publish_stream', $permissions['data'][0])
               ||  !array_key_exists('manage_pages', $permissions['data'][0])) {
    
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) );
                exit;
            }
    
    
  • Em seguida, obter o access_token da fanpage. Devemos informar o access_token na hora da publicação da foto. Para obter o token, precisamos informar o id da fanpage.
  • /* obter token */
    $fanpage_id = "354256421309739"; // id da fanpage
    $page_info = $facebook->api("/$fanpage_id?fields=access_token"); // solicitando o token
    $fanpage_token = $page_info['access_token']; // token
    
  • Finalmente, executamos a função para publicar a foto diretamente na fanpage.
  • $post_data = array (
          "message" => "teste_" . time(),
          "image" => '@' . realpath("douglas.jpg"),
          'access_token' => $fanpage_token,
    );
    
    $data['photo'] = $facebook->api("/me/photos", 'post', $post_data);
    echo "Foto publicada com sucesso na fanpage!";
    
    Ler Post Completo | Make a Comment ( 60 so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: