And After - Design e Tecnologia por Sua Conta!
O desenvolvedor é um blog sobre desenvolvimento web, não tratando apenas de programação mas também compartilhando experiências, métodos, debates e tendências da internet.

O Desenvolvedor é um blog de www.andafter.org
Assinar o Feed RSS

Guilherme Serrano

[@]
[www]

Graduado em design, viciado em web, adoro desenvolvimento, mashups, usabilidade, o universo e tudo mais.

Vivo de e para internet. :)

Status
Karma: 68536
Opiniões: 30

Mais deste autor


Indexando todas as imagens de um texto - jQuery

Indexando todas as imagens de um texto - jQuery

Muito bomEste texto foi classificado como Muito bom
Em Internet, Programação
Por Guilherme Serrano
13 de Janeiro de 2009

Script de um "crawler" que indexa as imagens de um texto dentro de uma div. Utilizando server-side, dá pra fazer coisas interessantes...

RSS Acompanhe O Desenvolvedor por Feeds!


Como vocês já devem estar cansados de ler, estou desenvolvendo algumas novidades para o And After mas isso está rendendo ótimos frutos, principalmente com jQuery (e ultimamente com SQL).

Para uma das novas features eu precisava indexar todas as imagens utilizadas nos posts do site. Resolvi cadastrar tudo no banco de dados, mas a dúvida era... como automatizar isso tudo?

Como estava estudando jQuery resolvi deixar de lado o server-side, utilizando apenas quando necessário: para inserir os dados no banco. Quase todo o resto foi feito com javascript, especificamente com jQuery.

Dica de leitura: Excelentes truques e dicas para jQuery

Objetivo do script
Encontrar todas as imagens de um texto e inserir estas imagens no banco de dados guardando as informações: url (src), descrição (alt) e qual o texto utilizou a imagem (definido por server-side). Ao final, passar para o próximo post do banco de dados e repetir o processo até que as imagens de todos os posts tenham sido indexadas.

 

Etapas de funcionamento

Explicarei em passos simples o funcionamento do script:

  1. O script server-side seleciona o post no Banco de Dados
  2. Através o jQuery o script "lê" o texto e busca pelas imagens
  3. Para cada imagem encontrada é executado um script server-side (post por ajax) que insere a imagem no banco de dados
  4. Ao final da indexação das imagens daquele post o script redireciona a página para o próximo post

 

Irei publicar aqui apenas a programação client-side, que é o foco deste post para facilitar o entendimento, deixando o script resumido. Também ocultei as funções de redirect (para passar os itens "post" do banco de dados) para o script ficar mais amplo.

O objetivo aqui é mostrar como funciona e estimular idéias :)

 

Indexando todas as imagens de um post

/*
 * Finding images in a div and list (or execute any action) with all images
 *
 * Copyright (c) 2009 Guilherme Serrano
 * Dual licensed under the MIT
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://www.guilhermeserrano.com.br
 * http://www.andafter.org
 * 
 */
 
$(function (){  
	var imag = $(´#finder´).find(´img´); //find all images
	var i = 0
	if(imag.length==0){ 
		item.html(´
  • Nenhuma imagem neste texto
  • ´) } imag.each(function(){ var url = $(this).attr(´src´); //get img url var titulo = $(this).attr(´alt´); //get img description (alt) var item = $(´
  •  
  • ´) //create item list $.post(´server-side.asp?a=add´, { url: url, titulo: titulo, id_post: id_post}, //POST data to server side script function(data){ i = i+1 item.html(data) $(´#imagens´).animate({opacity: 1}, 5000).append(item) //print data and pause 5s }); }) })

     

    No arquivo server-side.asp eu tenho um script que verifica se a imagem já está cadastrada no banco de dados, se ela não está cadastrada então cadastro e retorno um html "Imagem X cadastrada com sucesso no banco" ou "A imagem X já existe no banco". Esta mensagem é a variável data, que é printada pelo jQuery   no meu elemento #imagens.

     

    [update] Depois do comentário do Anderson Baldner resolvi tornar mais intuitivo, adicionando o html de forma "completa", chamando o jQuery e também chamando o arquivo de javascript. [/update]

    Html

    
    
    
    Aqui vai o texto que contém as imagens que você deseja indexar.

     

    Utilizando server-side e algumas alterações neste script criei um "mini-crawler" que percorreu todos os posts do meu banco de dados indexando as imagens e suas informações em um banco de dados, independente as imagens estarem hospedadas no meu servidor ou não.

     

    Curiosidade

    Esse script foi desenvolvido para aplicação "interna", utilizando um delay de 2 segundos por post o script levou 1 hora e 30 minutos para percorrer de forma automática 800 posts do And After e indexar 2.659 imagens no banco de dados. Poderia ser feito de forma reduzindo um pouco o delay, mas como não estava com pressa e não queria "consumir" o banco (sou cagão e não sou programador, então melhor previnir né?) deixei ele light.

     

    É apenas um exemplo do que é possível, dá pra fazer muita coisa com um pouco de criatividade, espero ter ajudado a despertar alguma idéia nestas cabeças geniais que leio por aí! :)

    Indexar feeds dos blogs que você gosta, para selecionar posts pelas imagens por exemplo é só umas das idéias possíveis... haha ;)

    Lembre-se que Programar é Grátis, exercite-se!

    O que você achou do texto?

    • Muito ruim
    • Ruim
    • Regular
    • Bom
    • Muito bom
    Sua opinião é o que faz a comunidade funcionar, colabore para isso!

    Tags: crawler, jquery, javascript, internet, web, services

    Enviar para um amigo
    Você pode comentar, assinar o feed, conhecer mais sobre o autor e ajudar a divulgar este artigo em sua ferramenta favorita através dos botões abaixo.
    • Rec6
    • ueba
    • linkk
    • dihitt
    • linkloko
    • websapiens
    • linkto
    • Eu curti

    Comentários

    Rodrigo Maia
    [www]

    13/1/2009 17:45:00

    Muito interessante mesmo, afinal é bem mais fácil pegar links com jquery do que com expressão regular.
    Valeu pela dica.

    [Responder este comentário]

    Guilherme Serrano
    [www]

    13/1/2009 17:58:00

    Exatamente Rodrigo!

    A primeira coisa que pensei quando queria indexar as imagens foi em Expressões Regulares, mas como eu domino este demônio da programação (ainda) resolvi buscar outras alternativas.

    Manipular/procurar objetos no HTML é muito intuitivo e acredito que bem mais simples que ER mesmo... hehe

    ps: por indicação do Julio Greff (http://juliogreff.net/) vou ler o livro "Expressões Regulares - Uma abordagem divertida", que pelo que vi parece ser bem interessante :)

    []´s

    Guilherme Serrano
    [www]

    13/1/2009 18:00:00

    Epa, eu errei o comentário acima, o correto é:

    "mas como eu NÃO domino este..." hehe :)

    Chris Benseler
    [www]

    13/1/2009 19:31:00

    É mais fácil, sim, mas eu acredito que em termos de performance seja pior. Para textos pequenos, não há impacto, mas para coisas maiores...
    *vou, inclusive, criar um benchmark para isso! Fiquei na dúvida! hehe

    Rodrigo Maia
    [www]

    14/1/2009 13:57:00

    Tenho o livro também e recomendo e também recomendo a leitura.

    tem também o site http://guia-er.sourceforge.net/ que é do mesmo autor do livro.

    [Responder este comentário]

    Anderson Baldner

    27/1/2009 03:06:00

    primeiramente boa madrugada a todos...perdão pela minha imensa ignorância diante do assunto,mais é q eu to começando a estudar javascript agora.meu ramo é mais PHP,por isso venho pedir um auxilio de vocês.
    eu gostaria de saber como eu executo esse script.Na verdade eu entendi a lógica perfeitamente,mais me parece q falta alguns arquivos JS.a página PHP q verificaria se a palavra existe no DB se existe ele naum adiciona se naum ele adiciona eu sei fazer...peço auxilio mesmo na parte javascript.
    att a tds
    Anderson Baldner


    [Responder este comentário]

    Guilherme Serrano

    27/1/2009 09:49:00

    Buenas Anderson...

    O Javascript é só o que está no post mesmo, será que você não esqueceu de chamar a biblioteca jQuery no seu html? Fiz um update no artigo, adicionando as duas chamadas de javascript.


    Lembro que quando eu chamo de "html" o arquivo na verdade pode ser um PHP, que chama dinamicamente o texto que você quer indexar as imagens... mas o texto deve ser inserido dentro da DIV "finder"

    Anderson Baldner

    29/1/2009 04:11:00

    buenas guilherme ^^
    po kra,eu devo estar fazendo algo errado aqui.
    eu fiz o arquivo PHP q faz a consulta e tal,mais não deve estar 100%...se vc tivesse algum exemplo "pronto" que pudesse me passar rpa eu estudar,eu agradeceria muito =)
    tenho um certo fascinio por essas paradas de indexação,to até pegando um pouco de express~es regulares pra estudar...enfim.
    se desse pra quebrar essa eu agradeceria muito
    forte abraço
    e obrigado pela ateção =)

    [Responder este comentário]

    Guilherme Serrano

    29/1/2009 08:51:00

    Sem problemas Anderson, vou fazer o que eu já deveria ter feito a tempo aqui, liberar um espaço só para subir os exemplos que eu e o Chris publicamos! :)

    Assim que eu subir isso eu comento aqui para avisar, beleza?

    []`s

    Anderson Baldner

    29/1/2009 17:10:00

    ok camarada =)

    mais uma vez,vlw pelo interesse.
    vale frizar que é dificil encontrar alguém que sabe e tem paciencia de ensinar.

    forte abraço guilherme
    paz

    [Responder este comentário]

    Rafael
    [www]

    7/7/2009 15:10:00

    Valeu Guilherme, esse código vai ser bem útil pra mim, não sei quando, mas vai.

    [Responder este comentário]

    Guilherme Serrano
    [www]

    7/7/2009 17:21:00

    Que bom! Eu usei ele hoje, depois de um bom tempo que desenvolvi... hehe

    Deixe seu comentário!

    Nome (requerido)

    E-mail (requerido - não será divulgado)

    URL

    Quanto é 4 + 1?




    web tracker