Saltar para: Post [1], Comentários [2], Pesquisa e Arquivos [3]

SAPO developers blog

SAPO developers blog

Puny URL

Março 16, 2009

jac

O SAPO sempre se prezou pela inovação e experimentação e esta semana lança um novo serviço: o Puny URL.

Apesar de à primeira vista o Puny URL parecer apenas um outro compactador de URLs, traz uma inovação excelente: Unicode.

O Puny URL compacta um URL de duas formas diferentes, retornando um URL compacto típico e um outro mais compacto ainda, fazendo uso de caracteres Unicode.

Para uma melhor compreensão do serviço colocamos algumas questões à equipa da Pesquisa do SAPO, que desenvolveu este sistema:

Q: Quantos URLs conseguem ter na plataforma?
   
R: Os que quiseres :) As PunyURLs em Unicode permitem ter aproximadamente 41,000 URLs únicas comprimidas num único caracter; com dois caracteres existem 1,7 mil milhões de combinações possíveis.

Q: Este serviço fornece alguma API para developers que queiram integrar este serviço nas suas aplicações?

R: Sim! Fornecemos uma API nos Web Services do SAPO em http://services.sapo.pt/Metadata/Service/PunyURL e fornecemos uma "Bookmarklet" que os utilizadores podem acrescentar à sua barra de favoritos para criar automaticamente uma PunyURL para a página que estejam a ver.

Q: Que casos práticos de utilização prevêem?

R: O Twitter, o envio de URLs por SMS, dizer um endereço na internet que é complicado pelo telefone... as URLs no formato http://br3.sl.pt são bastante práticas para soletrar - não há maiúsculas nem minúsculas. Essencialmente situações em que a brevidade seja importante. No caso da PunyURL em Unicode poupamos *imenso* espaço, e pode ser útil em serviços como o Twitter, em que se clica na URL.

Q: Como é que isto funciona por baixo e que tecnologia está envolvida?

R: Os serviços de compressão existentes de URLs têm uma base de dados por detrás que mapeia a URL enviada para um número. A URL comprimida é o número convertido de base 10 - o nosso sistema de algarismos - para base 62 - 26 letras maíusculas + 26 letras minúsculas mais os dez algarismos.

O número 500,000 é assim convertido para '264w' em base 62.

No PunyURL funcionamos de forma ligeiramente diferente em *ambas* as URLs comprimidas que fornecemos.

Os browsers modernos permitem caracteres acentuados, como é o caso do domínio da Força Aérea Portuguesa, http://www.forçaaérea.pt/.

Na realidade, o domínio 'forçaaérea.pt' é convertido em 'xn--foraarea-u0aw.pt', através dum sistema de codificação chamado "Punycode", definido no RFC 3492.

Estas regras de conversão permitem que caracteres Unicode europeus, russos e asiáticos possam ser utilizados em domínios.

No PunyURL utilizamos os caracteres dos diversos planos asiáticos, o que nos permite definir o número 500,000 em apenas dois caracteres: 㐋촔.

Assim o serviço pode armazenar milhões de endereços dos nossos utilizadores e continuar a fornecer domínios curtos sem termos de reciclar endereços, o que significa que ficam sempre permanentes.

No caso dos endereços em ASCII, http://b.oi.sl.pt/, utilizamos um truque de DNS chamado "Wildcarding" que permite que endereços não criados vão parar a determinado site. É o que acontece há já alguns anos com o SAPO: http://perl.sapo.pt/ resulta numa pesquisa pela palavra 'perl', porque o domínio .sapo.pt aponta para a Pesquisa do SAPO quando não existe um hostname definido.

No caso do www.sapo.pt, este está definido e não vai à pesquisa do SAPO.

Q: Que protecções contra spam foram implementadas?

R: Verificamos quais os hosts de destino, não permitimos referências circulares e monitorizamos a sua utilização. No entanto, disponibilizamos o serviço de "preview"; se se acrescentar um '-' ao final de uma PunyURL consegue-se ver qual o destino da mesma sem ter de visitar o destino.

Por exemplo: http://b.kp.sl.pt/-.

Para gerar uma Puny URL a partir de qualquer página na Internet arraste o seguinte link para a sua barra de favoritos: PunyURL.

 

5 comentários

Comentar post

Mais sobre mim

Subscrever por e-mail

A subscrição é anónima e gera, no máximo, um e-mail por dia.

Arquivo

  1. 2012
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2011
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2010
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2009
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D