Jan 01
Einen ähnlichen Artikel habe ich vor einiger Zeit auch für meinen Ex – Lesezeichenverwalter del.icio.us geschrieben.
Mein neuer Dienstleister ist zootool. Über die Gründe des Wechsels habe ich ja erst vor kurzem geschrieben.
Wenn man sich in eine neue Abhängigkeit begiebt, sollte alles Gute erhalten bleiben. So bietet auch zootool über eine API den Zugriff auf die Lesezeichen.
Anders als bei del.icio.us werden die Ergebnisse einer Anfrage aber im JSON Format geliefert, womit das HTTPBuilder Modul von Groovy aber auch keine Probleme hat, wie das Beispiel gleich zeigen wird. Ein verschlüsseltes Passwort und ein API-Key sorgen zusätzlich für mehr Sicherheit.
So, lange genug geredet. Hier ist der Code für einen einfachen zootool Lesezeichen Client:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| package de.koo.groovy.rest
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.1' )
import groovyx.net.http.*
import groovy.util.slurpersupport.GPathResult
import java.security.MessageDigest
import sun.misc.*
public class ZootoolBookmarkClient{
def username
def password
def apikey
public ZootoolBookmarkClient() {
username="<username>"
password="<password>"
apikey="<apikey>"
}
static void main(args) {
def dc=new ZootoolBookmarkClient()
dc.request()
}
/**
* Lesezeichen abfragen und Aufbereitung der Ergebnisse
* im HTML Format als definition list
*/
public request () {
def resp
try {
// Authentifizierung
def url="http://zootool.com/api/users/items/?username=$username&apikey=$apikey"
RESTClient rc = new RESTClient( url )
rc.auth.basic (username.toLowerCase(), getEncodedPassword())
// anfragen und überprüfen der Antwort
def params=[:]
resp=rc.get(params)
assert resp.status == 200
println "<dl>"
resp.data.each {item ->
println " <dt><a href=\"${item?.url}\">${item?.title}</a></dt>"
println " <dd>${item?.title}</dd>"
}
println "</dl>"
} catch (e) {
e.printStackTrace()
}
}
/**
* Passwort Verschlüsselung mit SHA-1 Algorithmus
*/
public getEncodedPassword () {
MessageDigest md = MessageDigest.getInstance('SHA-1')
md.update(password.getBytes('UTF-8'))
return (new BASE64Encoder()).encode(md.digest())
}
} |
Ich wünsche Euch allen (mit und ohne gepflegten Kater) ein frohes und gesundes Jahr 2011.
Zum Schluss noch ein paar hilfreiche Links:
zootool API-Key Generierung
zootool API Doku
Beispiel Code für PHP, Python und Objective-C
.wraptocenter {
display: table-cell;
text-align: center;
vertical-align: middle;
width: ...;
height: ...;
}
.wraptocenter * {
vertical-align: middle;
}
/*\*//*/
.wraptocenter {
display: block;
}
.wraptocenter span {
display: inline-block;
height: 100%;
width: 1px;
}
/**/
Einen ähnlichen Artikel habe ich vor einiger Zeit auch für meinen Ex - Lesezeichenverwalter del.icio.us geschrieben.
Mein neuer Dienstleister ist zootool. Über die Gründe des Wechsels habe ich ja erst vor kurzem geschrieben.
Wenn man sich in eine neue Abhängigkeit begiebt, sollte alles Gute erhalten bleiben. So bietet auch zootool über eine API den Zugriff auf die Lesezeichen.
Anders als bei del.icio.us werden die Ergebnisse einer Anfrage aber im JSON Format geliefert, womit das HTTPBuilder Modul von Groovy aber auch keine Probleme hat, wie das Beispiel gleich zeigen wird. Ein verschlüsseltes Passwort und ein API-Key sorgen zusätzlich für mehr Sicherheit.
So, lange genug geredet. Hier ist der Code für einen einfachen zootool Lesezeichen Client:
package de.koo.groovy.rest
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.1' )
import groovyx.net.http.*
import groovy.util.slurpersupport.GPathResult
import java.security.MessageDigest
import sun.misc.*
public class ZootoolBookmarkClient{
def username
def password
def apikey
public ZootoolBookmarkClient() {
username=""
password=""
apikey=""
}
static void main(args) {
def dc=new ZootoolBookmarkClient()
dc.request()
}
/**
* Lesezeichen abfragen und Aufbereitung der Ergebnisse
* im HTML Format als definition list
*/
public request () {
def resp
try {
// Authentifizierung
def url="http://zootool.com/api/users/items/?username=$username&apikey=$apikey"
RESTClient rc = new RESTClient( url )
rc.auth.basic (username.toLowerCase(), getEncodedPassword())
// anfragen und überprüfen der Antwort
def params=[:]
resp=rc.get(params)
assert resp.status == 200
println ""
resp.data.each {item ->
println " ${item?.title}"
println " ${item?.title}"
}
println ""
} catch (e) {
e.printStackTrace()
}
}
/**
* Passwort Verschlüsselung mit SHA-1 Algorithmus
*/
public getEncodedPassword () {
MessageDigest md = MessageDigest.getInstance('SHA-1')
md.update(password.getBytes('UTF-8'))
return (new BASE64Encoder()).encode(md.digest())
}
}
Ich wünsche Euch allen (mit und ohne gepflegten Kater) ein frohes und gesundes Jahr 2011.
Zum Schluss noch ein paar hilfreiche Links:
zootool API-Key Generierung
zootool API Doku
Beispiel Code für PHP, Python und Objective-C
geschrieben von gklinkmann
\\ tags: groovy, Java, Web
Nov 18
Das passiert, wenn man Objekt Orientierung mit russischen Holzpuppen erklärt:

Quelle und Dank an: Java Grundlagen Kurs 2010
Das passiert, wenn man Objekt Orientierung mit russischen Holzpuppen erklärt:
Quelle und Dank an: Java Grundlagen Kurs 2010
geschrieben von gklinkmann
\\ tags: Java
Aug 12
Fast jede moderne Webanwendung bietet ihre Daten und Funktionalitäten auch über eine REST Schnittstelle (meist im XML und/oder JSON Format) an.
Webframeworks (wie z.B. Rails und Grails), die die Erstellung einer solchen REST Schnittstelle vereinfachen, erfreuen sich unter den Webentwicklern großer Beliebtheit.
Da zumindest
Grails im Hintergrund auch auf dem Webframework
Spring aufsetzt, können auch Entwickler, die Grails nicht einsetzen dürfen oder wollen, mit Spring diese Funktionalität in ihre Anwendung integrieren.
Ein konkretes Beispiel mit dazu gehörigem Tutorial gibt es von StSMedia. Die grundsätzliche REST Integration wird in Teil 2 näher erläutert. Die Umsetzung der ContentNegotiation, also die Auslieferung unterschiedlicher Formate aufgrund der Anfrage (im Accept Header oder durch Erweiterung der URL um die entsprechende Dateiendung) gibt es dann im Teil 7.
Der komplette Sourcecode der Spring Finance Manager Anwendung wird auf Google Code gehostet und steht dort zum Download bereit. Die Version 0.5 basiert zwar noch auf Spring 3 M4, ich konnte die dort implementierte REST Funktionalität aber auch mit Spring 3.0.2 problemlos nutzen.
Links:
REST Artikel im Springsource Blog
Fast jede moderne Webanwendung bietet ihre Daten und Funktionalitäten auch über eine REST Schnittstelle (meist im XML und/oder JSON Format) an.
Webframeworks (wie z.B. Rails und Grails), die die Erstellung einer solchen REST Schnittstelle vereinfachen, erfreuen sich unter den Webentwicklern großer Beliebtheit.
Da zumindest Grails im Hintergrund auch auf dem Webframework Spring aufsetzt, können auch Entwickler, die Grails nicht einsetzen dürfen oder wollen, mit Spring diese Funktionalität in ihre Anwendung integrieren.
Ein konkretes Beispiel mit dazu gehörigem Tutorial gibt es von StSMedia. Die grundsätzliche REST Integration wird in Teil 2 näher erläutert. Die Umsetzung der ContentNegotiation, also die Auslieferung unterschiedlicher Formate aufgrund der Anfrage (im Accept Header oder durch Erweiterung der URL um die entsprechende Dateiendung) gibt es dann im Teil 7.
Der komplette Sourcecode der Spring Finance Manager Anwendung wird auf Google Code gehostet und steht dort zum Download bereit. Die Version 0.5 basiert zwar noch auf Spring 3 M4, ich konnte die dort implementierte REST Funktionalität aber auch mit Spring 3.0.2 problemlos nutzen.
Links:
REST Artikel im Springsource Blog
geschrieben von gklinkmann
\\ tags: Java, Spring