Echando código: Más de Flickr con Java y XML-RPC

Bueno, después de resolver mi problema usando Perl y al API de Flickr decidí hacerlo ahora con Java; Pero en esta ocasión quise irme a bajo nivel ya que siempre me ha llamado la atención el protocolo XML-RPC. Para procesar las peticiones y respuestas de XML-RPC utilizaré el proyecto de Jakarta XML-RPC.

Decidí empezar despacio, y como es la primera vez que uso el API, sólo quiser obtener mi identificador de usuario numérico usando mi nombre registrado (en esta caso josevnz). Lo primero que hay que hacer es familiarizarse con el uso de los tipos de datos de XML-RPC y su correspondientes tipos en Java. Una vez hecho esto y viendo el tipo de salida que nuestra librería en Java debería generar podemos empezar con el código:

   1:package com.blogspot.elangelnegro.flickr;
2:
3:import java.util.ResourceBundle;
4:import java.util.Properties;
5:import java.util.Vector;
6:import java.util.Hashtable;
7:
8:import java.net.URL;
9:
10:import java.io.IOException;
11:
12:import org.apache.xmlrpc.XmlRpcClient;
13:import org.apache.xmlrpc.XmlRpcException;
14:
15:/**
16: *
17: *
18: *
19: *
20: * For more information, please check the following URLS:
21: * <ul>
22: * <li> <a href="http://www.flickr.com/services/api/misc.urls.html">Flickr URL format</a>
23: * <li> <a href="http://www.flickr.com/services/api/">Description of the API</a>
24: * <li> <a href="http://www.flickr.com/forums/help/5304/">The problem I had to solve :)</a>
25: * <li> <a href="http://ws.apache.org/xmlrpc/client.html">Apache XML-RPC</a>
26: * </ul>
27: *
28: */
29:public final class FlickrBackup {
30:
31: private static final ResourceBundle BUNDLE =
32: ResourceBundle.getBundle(FlickrBackup.class.getName());
33:
34: private static final Properties CONFIG = System.getProperties();
35:
36: /**
37: *
38: * @param args Command line args
39: * <ul>
40: * <li>args[0] Is the Flickr user
41: * <li>args[1] is the password for that account
42: * <li> args[2] is the directory where we will save all the photos
43: * </ul>
44: * @throws Exception if there is any error while downloading the pictures
45: */
46: public static void main(String [] args) throws Exception {
47: Vector params = new Vector();
48: Hashtable struct = new Hashtable();
49: XmlRpcClient xmlrpc = null;
50: try {
51: xmlrpc = new XmlRpcClient(
52: BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.url")
53: );
54:
55: struct.put(
56: "api_key",
57: BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key")
58: );
59: struct.put(
60: "username",
61: args[0]
62: );
63: params.add(struct);
64: String result =
65: (String) xmlrpc.execute ("flickr.people.findByUsername", params);
66: System.out.println(
67: BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages") +
68: ": " +
69: result
70: );
71: } catch (XmlRpcException xmlexp) {
72: throw xmlexp;
73: } catch (IOException ioexp) {
74: throw ioexp;
75: } finally {
76: struct.clear();
77: params.clear();
78: }
79: }
80:
81:}

Y el correspondiente archivo de propiedades:

   1:com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.url=http://www.flickr.com/services/xmlrpc/
2:# Old key: 24e618762a874d9ff507d255dd95f854
3:com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key=XXXXXX
4:# Connecting as
5:com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages=Connecting as

La corrida de ejemplo es:

[josevnz@localhost FlickrBackup]$ java -jar dist/FlickrBackup-1.0.jar sdelmont
Exception in thread “main” org.apache.xmlrpc.XmlRpcException: User not found
at org.apache.xmlrpc.XmlRpcClient$Worker.execute(XmlRpcClient.java:457)
at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:163)
at com.blogspot.elangelnegro.flickr.FlickrBackup.main(FlickrBackup.java:64)
[josevnz@localhost FlickrBackup]$ java -jar dist/FlickrBackup-1.0.jar novato
Connecting as:

Novato

[josevnz@localhost FlickrBackup]$

Hmmm, no me devuelve una estructura sino el XML. Me sale usar un DOM para procesar el XML.

Por cierto, buscando en Google, me conseguí esta presentación de Power Point y Flickr. Realmente interesante, no importa si usted es un desarrollador o un administrador de redes ya que tiene para satisfacer la curiosidad de todos. Definitivamente Flickr es la compañia de la cual todo el mundo está hablando (después de Google) y ahora que Yahoo la compró, su futuro financiero está asegurado.

No pienso colocar el código esta vez. Voy a completarlo y pienso mostrar la aplicación completa en cuanto la tenga lista.