| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 15:42:07
|
RaphaelSantos
JavaGuru
Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline
|
Pessoal, gostaria de poder melhorar esse algoritmo ou ainda se existir alguma classe que ja o faça, qual seria???
meu programa envia msg html onde o usuario digita uma url e o programa envia o conteuodo do mesmo para o destinatario...
o que acontece...a classe URL e URLConnection retorna a url do site porem as imagens e links sao referencias por local..
exemplo.
num determinado, se vc exibir o codigo fonte vai ter trechos assim
a classe url retorna isso tb e se eu enviar desse jeito, no email nao vai a imagem... ai eu tenho que ler toda a string url e onde tiver <img src="/img/tltl.gif" eu substituir para <img src="www.uol.com.br/img/tltl.gif" supondo que a imagem estivesse hospedada no uol...
a fução que implementei foi
so que ainda assim tem sites que vem defeituosos..
pq?
primeiro pq tem sites que usam aspas duplas <img src="/img/tltl.gif" outros aidna usam aspas simples <img src='/img/tltl.gif'
outros tem partes que ja estao completos <img src="http://www.uol.com.br/img/tltl.gif" e nesses casos o programa também extrai e recoloca, perdendo tempo.
Entao minha pergunta é.. tem como ler os caracteres e numa cajadada só, ja verificar se o link está absoluto, caso nao, ele ja substituir o href, o src ou backgroud... pq pela minha implementação, como podem ter visto, eu varro a string toda 1x para cada analise(ou seja, 1 vez para src, outra vez para href e outra para background) e isso pq ai tou considerando apenas apsas duplas... se for colocar aspas simples, dobrara o tempo de verificação.
ficou grandinho mas espero que esteja bem claro
qualquer duvida, podem falar
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 16:33:26
|
Dieval Guizelini
Virtual Machine Man
![[Avatar]](/images/avatar/9fc92b9c69b711dcb880ccb743fc6f06.jpg)
Membro desde: 05/07/2006 14:39:44
Mensagens: 570
Localização: Curitiba - PR
Offline
|
Se eu entedi bem o que você quer,
pelo menos uma das coisas é enviar e-mail em formato html com imagens inclusas (embedded) correto?
Neste caso você pode dar uma olhada na api da SUN JavaMail:
http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html
Os e-mails devem ser multiparte, as imagens vão como anexo e são referenciadas por IDs. De qualquer forma você teria que fazer o processamento de substituição de URLs.
Neste caso vale a pena dar uma olhada em aplicações que fazem virtual proxy html... eles fazem o que você pretende fazer (eu acho).
fw
Ps: [editado] Para strings, pesquisas e substituições de uma olhada em expressões regulares, elas são muito rápidas e ajudam muito.[/editado]
|
Sun Certified Java Programmer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 16:44:42
|
RaphaelSantos
JavaGuru
Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline
|
Dieval Guizelini wrote:Se eu entedi bem o que você quer,
pelo menos uma das coisas é enviar e-mail em formato html com imagens inclusas (embedded) correto?
Neste caso você pode dar uma olhada na api da SUN JavaMail:
http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html
Os e-mails devem ser multiparte, as imagens vão como anexo e são referenciadas por IDs. De qualquer forma você teria que fazer o processamento de substituição de URLs.
Neste caso vale a pena dar uma olhada em aplicações que fazem virtual proxy html... eles fazem o que você pretende fazer (eu acho).
fw
Ps: [editado] Para strings, pesquisas e substituições de uma olhada em expressões regulares, elas são muito rápidas e ajudam muito.[/editado]
vlw pela resposta, mas tou usando o jakartamail, que tb az uso do javamail...
o que eu queria mesmo era melhorar o codigo da url...pq ele ja ta enviando nromal, mas o problema é que nem toda imagem esse acrescenta corretamente o link absoluto da imagem, sem contar, que como vc viu o codigo, ele faz etapas demais para cada parte...
fico no aguardo de alguma sugestao
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 17:07:24
|
gr_marco
JavaChild
Membro desde: 13/05/2005 11:39:03
Mensagens: 142
Localização: Curitiba
Offline
|
Eu acho que você terá que estudar expressões regulares...
Sempre que passei por isto, utilizei esta saída...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 17:09:27
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline
|
gr_marco wrote:Eu acho que você terá que estudar expressões regulares...
Sempre que passei por isto, utilizei esta saída...
Inquestionável.
|
Luis Eduardo Bohrer
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 17:43:49
|
gr_marco
JavaChild
Membro desde: 13/05/2005 11:39:03
Mensagens: 142
Localização: Curitiba
Offline
|
Se quiser um caminho, pode começar por aqui:
http://java.sun.com/docs/books/tutorial/essential/regex/index.html
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2007 22:29:58
|
RaphaelSantos
JavaGuru
Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline
|
obrigado pessoal.
eu ja uso regex em partes do meu programa mas nao faço ideia de como usar nesse problema pq o q eu preciso é acrescentar o link sem mexer em mais nada no resto da estrutura e nao acrescentar quando ja tiver...
se vcs entrarem em alguns sites e mandar exibir o codigo fonte, vera q no msmo codigo tem src ou href que ta com o link absoluto completo e outras que esta apenas o relativo...
ai queria saer como otimizar isso... se ao percorrer a linha, ele ja verifique href, img src, backgroud e/ou outros que eu tenha esquecido que tb é necessario colocar o link completo..
agradeço a todos
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/07/2007 10:09:21
|
gr_marco
JavaChild
Membro desde: 13/05/2005 11:39:03
Mensagens: 142
Localização: Curitiba
Offline
|
Use para efetuar um teste.
Se vc já tem o link capturado, verifica se ele está completo com regexp, caso contrário, concatena a string inicial pra completar o link.
é para ser bem genérico? para qualquer domínio? mesmo assim da pra criar uma expressão para identificar se o link possui algum domínio junto ou não...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/07/2007 11:02:54
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Eu faria o seguinte se não fosse usar um parser HTML (que usei em uma solução parecida com o que você quer fazer):
- Vejo se a linha contém um "<a" (indexOf é um pouco mais rápida que uma expressão regular) ou um "><img".
- Se ela tiver um "><a", você pode usar as expressões regulares de sua preferência.
- Deixe as expressões regulares pré-compiladas (use Pattern.compile).
Eu preferi usar um parser HTML para evitar alguns problemas que ocorrem quando você não consegue levar tudo em conta em suas expressões regulares - sempre sobra uma ponta solta (como um tag que em vez de ficar todo em uma linha, é quebrado em várias linhas, como:
e isso é muito chato para consertar. Você acaba ficando com expressões regulares extremamente complexas e difíceis de manter.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/07/2007 13:11:57
|
RaphaelSantos
JavaGuru
Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline
|
thingol, o parse html que vc se refere seria isso?
http://sourceforge.net/project/showfiles.php?group_id=24399
com isso eu posso fazer o que pretendo??? como poderia ser???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/07/2007 13:19:22
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Usando um parser HTML, você pode pegar o texto original, e efetuar as substituições de maneira simples. (Não usei esse parser que você mostrou no SourceForge.net; na verdade, eu peguei um código de um parser da Microsoft, muito bobo por sinal, e o alterei. É que tinha de pôr um parser dentro de uma applet e tinha muitas limitações de espaço.)
|
|
|
 |
|
|