sábado, 16 de agosto de 2008

Rails + Flickr = Flickr_fu!

Esses dias andei testando o funcionamento do Rails + Flickr, pra isso procurei um plugin que fizesse o serviço pesado. Ao ir direto no site do Flickr e procurando sobre sua API podemos ver que eles indicam 3 plugins, flickr-ruby, flickr e rflickr.

O detalhe é que todos eles estão desatualizados, sendo que o rflickr parece ser o mais utilizado pelo pessoal conforme pode-se notar aqui.

Fiz alguns testes tanto com o flickr e rflickr, sendo que em nenhum dos casos consegui fazer o que eu queria, até porque parece que por estarem desatualizados a documentação não bate com o funcionamento real, não sei, pode ter sido "berozice" minha, mas, enfim, acabei ficando de saco cheio e resolvi dar mais uma passeada na net antes de partir pra ignorância e fazer tudo na mão grande.

Com um pouco mais de pesquisa acabei encontrando um outro plugin chamado Flickr_Fu desenvolvido por Ben Wyrosdick que me apreceu bem atualizado e como vocês podem ver ele está hospedado no GitHub, o que prova que seu criador está antenado. =P


Bem, dando continuidade fui testá-lo e então resolvi fazer esse post com o procedimento para usá-lo de forma simples pois não encontrei muita coisa falando sobre ele, apenas esse post que por acaso já ajuda bastante.

Mãos à obra!

Primeiro passo, instalar o plugin: ( gem install flickt-fu ). Note que é instalada uma gem dependende xml-simple se não me engano.

Segundo passo, pegar sua KEY do Flick, ou seja com essa chave você poderá ter acesso ao Flickr através de sua API. Ahhh.. antes que eu esqueça, quando for solicitar a chave dê preferência a pedir uma chave NÃO COMERCIAL para fazer seus testes, pois a chave do tipo comercial pode levar meses pra ser liberada, a minha por exemplo demorou 4 meses pra chegar o_O.

Terceiro passo, crie um arquivo com extensão YML (YAML) e salve em um diretório do seu projeto. Por padrão criamos dentro da pasta /config e se salva como flickr.yml

Quarto passo, insira dentro do arquivo flickr.yml o seguinte conteúdo:



key: SUA_KEY_FLICKR
secret: SEU_SECRET_FLICKR
token_cache: token.yml


Ou seja, insira a chave que você pegou no Flickr e o segredo também, os dois são informados quando você cria a KEY. Observe a terceira linha, ela informa qual o arquivo que você vai utilizar para guardar o token que será fornecido ao se estabelecer a conexão com o Flickr.

Quinto passo, crie um controller no seu projeto Rails ( script/generate controller FlickrTest ).

Sexto passo, no seu controller utilize esse código:



require 'flickr_fu'

before_filter :connect

def get_photos
@photos = @flickr_account.photos.search(:user_id => SUA_ID_FLICKR, 'per_page' => 200, 'page' => 1)
end

def get_url
render :text => @flickr_account.auth.url(:write)
end

def get_token
@flickr_account.auth.cache_token
end

def connect
@flickr_account = Flickr.new("#{RAILS_ROOT}/config/flickr.yml")
end


Antes de continuar pegue o seu ID Flickr, que pode ser conseguido facilmente através desse site.

A explicação do código acima é a seguinte:

1 - Carregamos a biblioteca Flickr_fu

2 - Antes de rodar qualquer action instanciamos a classe Flickr e disponibilizamos na variável @flickr_account

3 - A action get_photos irá retornar todas as 200 primeiras fotos públicas que estão na sua conta Flickr. Observe que aqui já temos acesso às fotos públicas de qualquer usuário Flickr, bastando para isso apenas trocar o ID do usuário.

Agora vem a parte boa...

4 - A action get_url vai mostrar na tela um link que deve ser acessado para que sua conta Flickr autorize o sistema a trabalhar com as fotos, inclusive as privadas. Observe o símbolo :write, ele informa ao Flickr que você espera uma autorização de escrita, em outras palavras, você poderá fazer upload de fotos direto do seu sistema, pesquisar fotos restritas, adiconar comentários, tags e fazer qualquer alterção que faria direto no flickr. Verifique a documentação do plugin para outros tipos de acesso, por exemplo :read.

5 - Por último, a action get_token armazena no arquivo token.yml a permissão de acesso ao site (verifique que é criado um arquivo token.yml na raiz do seu projeto), ou seja, após rodar essa action não será mais necessário pedir autorização da sua conta para que o sistema possa acessá-lo irrestritamente.

Daí pra frente é só ler a documentação e usar!

Bem, dúvidas sugestões ou qualquer comentário é bem vindo.

Abraço!


UPDATE 18/02/2009

O flickr-fu agora está hospedado no github (http://github.com/commonthread/flickr_fu/tree/master)

Lembre-se de se for o caso adicionar o source git na sua lista:

gem sources -a http://gems.github.com

Depois você pode fazer uma procura por "flickr_fu"...

sudo gem search flickr_fu --remote

Nenhum comentário: