Siguiendo con la aplicación de prueba que estoy pensando en hacer de la que os hablé el otro día
Hoy vamos a ver cómo sacar el token que nos servirá para autentificarnos contra Toodledo y obtener nuestras tareas de su servidor. Para ello tenemos que parsear la respuesta XML y buscar el elemento <token> para leer su contenido. Hay varias maneras de hacer esto, y parece que la más adecuada para esta aplicación es utilizar Linq to XML (que nos abstrae del XML en sí, y nos da acceso fácil al contenido), pero al menos una vez en la vida hay que parsear una cadena de texto a mano, así que en esta entrada utilizaré un objeto XmlTextReader para leer secuencialmente el XML hasta encontrar la información que buscamos (supuestamente ésta es la manera más rápida de parsear un archivo XML, así que no está de más conocerla por si en algún momento Linq es demasiado pesado cuando tengamos miles de tareas en nuestro Toodledo).
Hay que tener en cuenta que nos encontraremos una linea de información de la versión del xml, que no vamos a utilizar por ahora. Y a partir de ahí, ir leyendo hasta que encontremos un elemento que tenga el nombre esperado (token en este caso). Llegados a este punto, sacamos el contenido y salimos del bucle.
Fácil, ¿no?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private string getXmlValue(string _xml,string _element) { string result=""; XmlTextReader textReader = new XmlTextReader(new System.IO.StringReader(_xml)); textReader.WhitespaceHandling = WhitespaceHandling.None; while (textReader.Read()) { if(textReader.NodeType == XmlNodeType.Element && textReader.Name == _element) { result = textReader.ReadElementContentAsString(); break; } else { // Avoid parsing the xml definition, as it does not have closing element if (textReader.NodeType != XmlNodeType.XmlDeclaration) { if (!textReader.ReadToFollowing(_element)) break; } } } return result; } |
[Método visto (entre otros lugares) aquí.]
De este modo, pasando nuestra nueva función la cadena que nos devolvió Toodledo, ya tendríamos el token que utilizaremos para generar la clave de autenticación para acceder a nuestras tareas.
1 2 3 | string respuesta = "<?xml version='1.0' encoding='UTF-8'?>\n<token>bar</token>" string token=getXmlValue(respuesta,"token"); |
Y ya tendríamos token= “bar” :D
Nota aclaratoria: Esta serie de artículos no pretenden ser un manual sobre cómo escribir una aplicación real. Son sólo una prueba de concepto, una serie de notas y trozos de código ineficientes, posiblemente incorrectos, sin comprobación de errores y potencialmente peligrosos para la integridad de vuestra tostadora. Usar con precaución. No me hago responsable de lo que ocurra si tratáis si quiera de compilar este código.
Si realmente queréis hacer una aplicación de este tipo, un buen punto de partida sería utilizar la API sharpgtd de Doug Reichard (que probablemente sea lo que yo haga pronto :)




