1 6 _ 5 1
Flickr API Demo
Postado por: Neto Leal em: Flash , Nerd stuffs , WebDevelopment
Que o Flickr é bom, todo mundo sabe. Mas poucos imaginam o quanto ele pode oferecer aos desenvolvedores. Um recurso interessante é o uso de sua API para acesso a partir de aplicações externas ao Flickr. Eu já comentei aqui que tinha criado minha própria API para isso. Mas acabei voltando atrás e refiz todo o mural usando uma API já pronta criada por Kelvin Luck. As classes criadas por ele são completas. Com elas é possível não só ler informações a partir do Flickr, mas também ter acesso a TODOS os recursos de lá como se você estivesse navegando dentro do proprio Flickr.

Como nunca mais tinha escrito nenhum post técnico aqui, resolvi fazer um exemplo simples para quem estiver interessado em iniciar uma aplicação do gênero em Flash possa ter seus passos iniciais facilitados.

O primeiro passo para você que quer desenvolver sua "Flash-Flickr-Application" é criar um cadastro no Flickr. Pra isso acesse www.flickr.com. Se você já tiver uma ID do Yahoo nem precisará preencher formulários. Depois entre em www.flickr.com/services e solicite uma APIKey. Vão te fornecer uma senha bem grande para você usar para acessar a API do Flickr remotamente.

O segundo passo é ler a documentação e registrar seu domínio no site do Flickr. Isso pode ser feito acessando www.flickr.com/services. Como já deve ser de conhecimento de todos, o FlashPlayer 8 não permite que sejam acessados documentos diretamente fora do servidor onde o arquivo SWF está hospedado. Isso significa que se você estiver rodando localmente um swf e tentar uma ação do tipo "meuMovieClip.loadMovie('http://static.flickr.com/42/84392637_5474d426a7_m.jpg')" a imagem será carregada normalmente. Porém se você hospedar esse mesmo SWF em um servidor web, não irá funcionar por uma questão de segurança do Flash Player. É por isso que o registo do seu domínio é importante.

Terceiro passo: vá até o site do Kelvin Luck (http://www.kelvinluck.com/projects/flashr-a-flickr-api-wrapper-for-flash) e baixe as classes criadas por ele para facilitar a nossa vida (Thanks Kelvin!). O que fazer com as classes ? Bom, você pode descompactar o arquivo ZIP no mesmo diretório que seus arquivos .FLA ou pode por direto na pasta 'classes' na instalação do Flash 8.

O exemplo que segue abaixo faz uma consulta simples que busca as fotos públicas de um determinado usuário do Flickr e as retorna.

import com.kelvinluck.flickr.Flickr;
import com.kelvinluck.flickr.FlickrResponseListener;
import com.kelvinluck.flickr.Person;
import com.kelvinluck.flickr.Photo;
import mx.utils.Delegate;

//Sua apiKey fornecida pelo Flickr.com
var api:String = "sua_api_key_do_flickr";

//Seu nome de usuário (aquele endereço original que você tinha antes de criar um 'alias')
var un:String = "seu_nome_de_usuario";

//Criando a instância do objeto da classe Flickr
var flickr:Flickr = Flickr.getFlickr();
//O ResponseListener irá receber todas as ocorrências de retorno dos métodos
//executados pelo flickr. É ele quem recebe os callbacks
var resp:FlickrResponseListener = new FlickrResponseListener();

//Função para iniciar a aplicação
function inicia():Void{
    //Definindo qual apiKey será usada para executar os métodos no Flickr (obrigatório)
    flickr.apiKey = api;
    //Configurando os callbacks
    configuraRespListener();
    //Efetuando a busca de fotos
    buscaFotosPublicas();
}

//Função para buscar as fotos públicas no Flickr
function buscaFotosPublicas():Void{
    //Método que busca as fotos públicas
    //Pâmetros:
    //nsid: String => User Name (definido na variável 'un')
    //extras: String => Critérios extras de filtro
    //perPage: Number => Número de fotos por página (default = 100)
    //page: Number => Número da página recuperada (default = 1)
    flickr.peopleGetPublicPhotos(un);
}

//função para configurar o ResponseListener
function configuraRespListener():Void{
    //callback do método peoploGetPublicPhotos
    resp.onPeopleGetPublicPhotos = Delegate.create(this, recebeFotos);
    /*
    O uso da classe Delegate é interessante para não perder a referência
    ao objeto representado por 'this' na função 'recebeFotos'
    Ex.:
        //Requer MovieClip no Stage. Nome de instância 'mcTeste"
        import mx.utils.Delegate;
        var mcTeste:MovieClip;
        
        function testeSemDelegate():Void{
            trace("Sem Delegate: " + this); //Aparece: _level0.mcTeste
        }
        function testeComDelegate():Void{
            trace("Com Delegate: " + this); //Aparece: _level0
        }
        mcTeste.onPress = testeSemDelegate;
        mcTeste.onRelease = Delegate.create(this, testeComDelegate);
    */
}

//Função final, executada quando as fotos do Flickr são recebidas pela aplicação
//Parâmetros: usuario: Person => Objeto que representa o usuário consultado

function recebeFotos(usuario:Person):Void{
    //Método getPhotos retorna um array de objetos do tipo 'Photo'
    var fotos:Array = usuario.getPhotos();
    //Loop exibindo no output o título de todas as fotos recebidas
    for(var i = 0, t = fotos.length; i < t; i++){
        //Recuperando a foto relativa ao iterador 'i'
        var foto:Photo = fotos[i];
        //Exibindo o título
        trace(foto.title);
    }
}

//Iniciando a aplicação
inicia();


Agora que você já viu a API funcionando, é só soltar a imaginação e fazer sua própria Flickr Application!