У меня есть сценарий Python, который не сортирует URL-адреса на основе ответа, отправленного here. До сих пор это работало довольно хорошо, например, с youtu.be
, goo.gl
, t.co
, bit.ly
и tinyurl.com
. Но теперь я заметил, что он не работает для собственного URL-фильтра Flickr flic.kr.Unshorten Flic.kr URLs
Например, когда я ввожу URL
https://flic.kr/p/qf3mGd
в браузере, я получаю правильно перенаправлены
https://www.flickr.com/photos/[email protected]/15911453212/
Однако, при использовании в unshorten тот же URL с помощью сценария Python, я получаю следующие переадресации
https://flic.kr/p/qf3mgd
http://www.flickr.com/photo.gne?short=qf3mgd
http://www.flickr.com/signin/?acf=%2Fphoto.gne%3Fshort%3Dqf3mgd
https://login.yahoo.com/config/login?.src=flickrsignin&.pc=8190&.scrumb=[...]
таким образом, заканчивая на странице входа Yahoo. Unshort.me, кстати, может правильно удалить URL. Что мне здесь не хватает?
Вот полный исходный код моего сценария. Я наткнулся на некоторых патологических случаях с оригинальным сценарием:
import urlparse
import httplib
def unshorten_url(url, max_tries=10):
return __unshorten_url(url, [], max_tries)
def __unshorten_url(url, check_urls, max_tries):
if max_tries == 0:
if len(check_urls) > 0:
return check_urls[0]
return url
if url in check_urls:
return url
unshortended = ''
try:
parsed = urlparse.urlparse(url)
h = httplib.HTTPConnection(parsed.netloc)
h.request('HEAD', url)
except:
return None
try:
response = h.getresponse()
except:
return url
if response.status/100 == 3 and response.getheader('Location'):
unshortended = response.getheader('Location')
else:
return url
#print max_tries, unshortended
if unshortended != url:
if 'http' not in unshortended:
return url
check_urls.append(url)
return __unshorten_url(unshortended, check_urls, (max_tries-1))
else:
return unshortended
print unshorten_url('http://t.co/5skmePb7gp')
EDIT: Полный рабочий пример с t.co
URL
Ммм ... это не полный сценарий, и ошибка, скорее всего, за пределами здесь. Не могли бы вы избавиться от некоторых некритических бит и опубликовать более полный образец кода? –
Изменил его на автономный скрипт – Christian