Ich spiele herum und versuche, Code zu schreiben, um mithilfe der tr.im- APIs eine URL zu verkürzen.
Nachdem ich http://docs.python.org/library/urllib2.html gelesen hatte , versuchte ich:
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 ist 200 (ich denke, es sollte 202 sein). Die URL ist gültig, aber die grundlegende HTTP-Authentifizierung scheint nicht funktioniert zu haben, da die verkürzte URL nicht in meiner URL-Liste enthalten ist (unter http://tr.im/?page=1 ).
Nachdem ich http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly gelesen hatte, versuchte ich auch:
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()
Aber ich bekomme die gleichen Ergebnisse. (response.code ist 200 und die URL ist gültig, aber nicht in meinem Konto unter http://tr.im/ gespeichert .)
Wenn ich anstelle der grundlegenden HTTP-Authentifizierung Abfragezeichenfolgenparameter verwende, wie folgt:
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()
... dann ist nicht nur die URL gültig, sondern sie wird auch in meinem tr.im-Konto aufgezeichnet. (Obwohl response.code immer noch 200 ist.)
Es muss jedoch etwas mit meinem Code nicht stimmen (und nicht mit der API von tr.im), weil
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...kehrt zurück:
{"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"}
... und die URL erscheint in meiner Liste der URLs unter http://tr.im/?page=1 .
Und wenn ich renne:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... wieder bekomme ich:
{"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"}
Der Hinweiscode lautet 201 und die Nachricht lautet "tr.im URL Already Created [yacitus]".
Ich muss die grundlegende HTTP-Authentifizierung nicht korrekt durchführen (in beiden Versuchen). Kannst du mein Problem erkennen? Vielleicht sollte ich schauen und sehen, was über das Kabel gesendet wird? Das habe ich noch nie gemacht. Gibt es Python-APIs, die ich verwenden kann (möglicherweise in pdb)? Oder gibt es ein anderes Tool (vorzugsweise für Mac OS X), das ich verwenden kann?
"WWW-Authenticate"
und den Code 401 eingeben, bevor urllib2 (oder httplib2) Ihre Anmeldeinformationen sendet. Siehe meine Antwort unten .