Mar 09

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.

geschrieben von gklinkmann \\ tags: , ,

Keine Kommentare zu “delicious groovy – Lesezeichen automatisieren”

  1. groovy zootool – Lesezeichen automatisieren » all-IT Says:

    [...] ähnlichen Artikel habe ich vor einiger Zeit auch für meinen Ex – Lesezeichenverwalter del.icio.us [...]

Kommentar abgeben

Ja, ich möchte bei Kommentaren benachrichtigt werden!