Pergunta

Acabei de coletar vários dados do Google Buzz e quero saber quais postagens do Buzz fazem referência aos mesmos artigos de notícias.O problema é que muitos dos links nessas postagens foram modificados por encurtadores de URL, então pode ser que muitos URLs encurtados distintos apontem para o mesmo artigo de notícias.

Dado que tenho milhões de postagens, qual é a maneira mais eficiente (de preferência em python) de

  1. detectar se um URL é um URL encurtado (de qualquer um dos muitos serviços de encurtamento de URL, ou pelo menos o maior)
  2. Encontre o “destino” do URL encurtado, ou seja, a versão longa e original do URL encurtado.

Alguém sabe se os encurtadores de URL impõem limites rígidos de taxa de solicitação?Se eu mantiver isso em 100/segundo (todos vindos do mesmo endereço IP), você acha que terei problemas?

ATUALIZAÇÃO E SOLUÇÃO PRELIMINARAs respostas levaram à seguinte solução simples

import urllib2
response = urllib2.urlopen("http://bit.ly/AoifeMcL_ID3") # Some shortened url
url_destination = response.url

É isso!

Foi útil?

Solução

A maneira mais fácil de obter o destino de um URL encurtado é com urllib. Dado que o URL curto é válido (código de resposta 200), o URL será devolvido a você.

>>> import urllib
>>> resp = urllib.urlopen('http://bit.ly/bcFOko')
>>> resp.getcode()
200
>>> resp.url
'http://mrdoob.com/lab/javascript/harmony/'

E é isso!

Outras dicas

(AFAIK) A maioria dos encurtadores de URL acompanha os URLs já reduzidos; portanto, várias solicitações para o mesmo mecanismo com o mesmo URL retornarão o mesmo código curto.

Como foi sugerido, a melhor maneira de extrair o URL real é ler os cabeçalhos de uma resposta a um pedido de URL reduzido. No entanto, alguns serviços de encurtamento (por exemplo, bit.ly) fornecem um método da API para devolver o URL longo

  1. Faça uma lista dos encurtadores de URL mais usados ​​e expanda-a enquanto descobre novos, depois verifique um link para um item da lista.

  2. Você não sabe para onde o URL aponta, a menos que o siga, então a melhor maneira de fazer isso é seguir o URL abreviado e extrair o cabeçalho http da resposta para ver para onde ele vai.

Eu acho que com 100 solicitações por segundo você certamente pode ter problemas (eu acho que o pior que pode acontecer é eles colocarem seu IP na lista negra como spammer).

A solução postada só funciona para o python 2.x, para python 3.x você pode fazer isso

import urllib.request as urlreq
link = urlreq.urlopen("http://www.google.com")
fullURL = link.url

Para obter o URL completo.

Pelo que li, essas respostas abordaram a segunda pergunta. Eu estava interessado na primeira pergunta. Depois de visualizar uma lista de cerca de 300 encurtadores, parece que a melhor maneira de detectá -los é simplesmente colocá -los em uma lista ou regex e procurar uma combinação com qualquer um deles.

"|".join(z1)
'0rz.tw|1link.in|1url.com|2.gp|2big.at    
r1 = re.compile("|".join(z1),flags=ic)

Em seguida, usando o R1 para combinar como regex contra o que você está tentando encontrar os encurtadores de URL (Mail, etc ...)

Uma lista muito boa está aqui: longurl.org/services

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top