Dass meine Beiträge für die Kategorie weekly links eine Zeit lang pausiert haben, lag auch daran, dass mich das Kopieren der Links ziemlich genervt hat.
Was macht man also als Programmierer, wenn der Leidensdruck hoch genug ist – man liest eine API (in diesem Fall die von delicious.com), nimmt die Programmiersprache seiner Wahl (bei mir Groovy) und schafft Abhilfe.
Der Urvater der online Lesezeichenverwalter delicious.com stellt eine REST basierte API bereit. Groovy bietet mit dem Modul HTTPBuilder ein mächtiges Tool, dass einem die Arbeit mit HTTP basierten Resourcen extrem erleichtert.
Nach einer erfolgreichen Authentifizierung und einer gültigen Anfrage erhält man eine XML Antwort, die so aussehen könnte:
1 2 3 4 5 6 7 8 9 10 | <posts tag="" user="user"> <post href="http://www.weather.com/" description="weather.com" hash="6cfedbe75f413c56b6ce79e6fa102aba" tag="weather reference" time="2005-11-29T20:30:47Z" /> ... <post href="http://www.nytimes.com/" description="The New York Times - Breaking News, World News & Multimedia" extended="requires login" hash="ca1e6357399774951eed4628d69eb84b" tag="news media" time="2005-11-29T20:30:05Z" /> </posts> |
Testen kann man erst einmal auf der Kommandozeile mittels curl:
> curl https://user:passwd@api.del.icio.us/v1/posts/recent
Bestimmte URL’s wie z.B. posts/all sollte man nicht zu oft aufrufen, da sie limitiert sind. Macht man es doch (wie ich) erhält man den Fehler 999. Besser ist es da nur die letzten Einträge (per Default 15) über posts/recent anzufragen. Das ganze Programm sah dann bei mir so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import groovyx.net.http.* import groovy.util.slurpersupport.GPathResult class DeliciousBookmarkClient { static main(args) { def dc=new DeliciousBookmarkClient() dc.request() } public request () { try { // Authentifizierung def rc = new RESTClient( 'https://username:password@api.del.icio.us/v1/posts/recent' ) rc.auth.basic "username", "password" // anfragen und überprüfen der Antwort def resp=rc.get("count":"5") assert resp.status == 200 assert ( resp.data instanceof GPathResult ) def recentPosts=resp.data.post println "Anzahl posts "+recentPosts.size() // HTML Aufbereitung des Links und der Beschreibung println "<dl>" recentPosts.each{post-> def desc=post.@description.text() def href=post.@href.text() println " <dt><a href=\"$href\">$desc</a></dt>" println " <dd>$desc</dd>" } println "</dl>" } catch (e) { println e.response.status println e.message } } } |
Über die API lassen sich natürlich auch Lesezeichen hinzufügen und löschen. Das gilt auch für Tags und Tag Bundles. Damit bleiben keine Wünsche offen.




January 1st, 2011 at 7:30 am
[...] ähnlichen Artikel habe ich vor einiger Zeit auch für meinen Ex – Lesezeichenverwalter del.icio.us [...]