Bir URL'yi kısaltmak için tr.im API'lerini kullanmak için biraz kod yazmaya çalışıyorum .
Http://docs.python.org/library/urllib2.html okuduktan sonra şunu denedim:
TRIM_API_URL = 'http://api.tr.im/api'
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='tr.im',
uri=TRIM_API_URL,
user=USERNAME,
passwd=PASSWORD)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
response.code 200'dür (202 olması gerektiğini düşünüyorum). url geçerli, ancak temel HTTP kimlik doğrulaması işe yaramadı, çünkü kısaltılmış URL, URL listemde bulunmuyor ( http://tr.im/?page=1 adresinde ).
Http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly'yi okuduktan sonra şunu da denedim:
TRIM_API_URL = 'api.tr.im/api'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
Ama aynı sonuçları alıyorum. (response.code 200 ve url geçerli, ancak http://tr.im/ adresindeki hesabıma kaydedilmemiş .)
Temel HTTP kimlik doğrulaması yerine sorgu dizesi parametreleri kullanırsam, şunun gibi:
TRIM_API_URL = 'http://api.tr.im/api'
response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
% (TRIM_API_URL,
url_to_trim,
USERNAME,
PASSWORD))
url = response.read().strip()
... o zaman sadece url geçerli değil, tr.im hesabıma kaydediliyor. (Response.code hala 200 olmasına rağmen.)
Yine de kodumda bir sorun olmalı (ve tr.im API'sinde değil), çünkü
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...İadeler:
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"200","message":"tr.im URL Added."},"date_time":"2009-03-11T10:15:35-04:00"}
... ve URL http://tr.im/?page=1 adresindeki URL listemde görünüyor .
Ve koşarsam:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... yine anlıyorum:
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"201","message":"tr.im URL Already Created [yacitus]."},"date_time":"2009-03-11T10:15:35-04:00"}
Not kodu 201'dir ve mesaj "tr.im URL'si Zaten Oluşturuldu [yacitus]" şeklindedir.
Temel HTTP kimlik doğrulamasını doğru yapmamalıyım (her iki denemede de). Benim sorunumu anlıyor musun? Belki de tel üzerinden neyin gönderildiğine bakmalıyım? Bunu daha önce hiç yapmadım. Kullanabileceğim Python API'leri var mı (belki pdb'de)? Veya kullanabileceğim başka bir araç var mı (tercihen Mac OS X için)?
"WWW-Authenticate"
urllib2 (veya httplib2) kimlik bilgilerinizi göndermeden önce site 401 döndürmeli ve kodlamalıdır. Aşağıdaki cevabıma bakın .