Atualização 10/02/2015
O site esta no momento fora do ar. O CoudBees.com aonde ficava hospedado tirou do ar pois a conta era gratuita somente para projetos em desenvolvimento e como eu parei de atualizar o código eles tiraram do ar.
Olá. Nos últimos dias trabalhei neste pequeno projeto Grails que chamo de MangueJobs. É um mural de empregos das cidades de Macaé, Campos e Região. Inicialmente faço uma busca nos feeds públicos de algumas páginas e grupos do Facebook. Depois, faço uma validação da mensagem antes de exibi-la no mural.
Ambiente Utilizado
- IDE Groovy/Grails Tool Suite 3.0.0
- Grails 2.0.4
- JDK 1.7.0
- Hospedado no CloudBees.com
Plugins
- facebook-sdk version 0.4.6
Características
- O Projeto não utilizada banco de dados.
Arquivos Criados
- MuralController.groovy
- mural/index.gsp
- src/groovy/Anuncio.groovy
- webapp/css/custom.css
Arquivos Modificados
- layouts/main.gsp
- conf/Config.groovy
- conf/UrlMapping.groovy
- webapp/css/main.css
Andamento
Depois de criado o projeto, instalei, configurei e testei o plugin facebook-sdk. Para o teste é necessário ter um Id e um Secret fornecidos pelo Facebook. Bastou incluir o código abaixo no arquivo: Config.groovy
//Facebook SDK Plugin
grails.plugin.facebooksdk.app.id = IDDOAPP
grails.plugin.facebooksdk.app.permissions = [] // Ex. ['email','user_photos']
grails.plugin.facebooksdk.app.secret = SECRETDOAPP
...
O passo seguinte foi criar o MuralController.groovy. Adicionei o FacebookContext do plugin e declarei um mapa com os grupos e outro com as páginas.
FacebookContext facebookContext def grupos = ["RECRUTA CAMPOS RJ":"332054513537019","RECRUTA EMPREGOS MACAÉ RJ":"299476493497382","EMPREGOS CARATINGA MG - MACAÉ RJ":"181172948674195"]
def paginas = ["EMPREGOS CAMPOS MACAÉ OFFSHORE":"352431094785650","EMPREGOS TI RJ":"EmpregosTiRj", "EMPREGA MACAÉ":"EmpregaMacae"]
A busca dos anúncios é feita através de um método que retorna um Set<Anuncio> a partir do retorno do método facebookCliente.fetchConnection().
def appAccessToken = facebookContext.app.getToken(true)def facebookClient = new FacebookGraphClient(appAccessToken) Set<Anuncio> lista = new TreeSet<Anuncio>(); def myFeed = facebookClient.fetchConnection(idObjeto+"/feed")
Como os anúncios são exibidos fora do Facebook, sem o contato de quem escreveu, somente os anúncios que contém ao menos um email no corpo do texto são considerados válidos. E como as vezes as pessoas publicam o mesmo anúncio em dois ou mais grupos, implementei o método compareTo(Object o) na classe Anuncio.groovy.
@Override
public int compareTo(Object o) {
if(this.is(o)) return 0
if(this.mensagem.equals(o.mensagem)){
return 0
}else{
if(this.mensagem.compareTo(o.mensagem)>0){
return 1;
}else{
return -1;
}
}
return 0;
}
Outro passo foi criar um método para ordenar a lista e no def index() um tratamento para paginação e ordenação. Ajustei o main.gsp e o main.css e criei a mural/index.gsp e custom.css.
No index.gsp incluí a Tag de comentários do Facebook.
Por último ajustei o UrlMappings.groovy para apontar direto para o MuralController
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(controller:"mural",action:"index")
"500"(view:'/error')
}
Fico muito contente em poder compartilhar. Caso queiram mais detalhes sobre a implementação é só deixar um comentário com a dúvida.