Ver Mensaje Individual
  #1  
Viejo 13/06/13, 03:20:39
Avatar de ATaskREADOS
ATaskREADOS ATaskREADOS no está en línea
Miembro del foro
Mensajes: 180
 
Fecha de registro: ene 2013
Mensajes: 180
Tu operador: Otra
Mencionado: 0 comentarios
Tagged: 1 hilos
Tasker para principiantes. Lección 4. El procesamiento de datos en variables

Con autorización expresa del autor, este artículo es una traducción del original ubicado en
http://www.pocketables.com/2012/09/b...rocessing.html
Beguinners guide to Tasker, by Andreas Ødegård
Original Copyright @ 2006-2012 CrowdGather. All rights reserved
Tasker para principiantes. Lección 4: El procesamiento de datos en variables.

a01-tasker-data-processing-608x323.jpg

Una vez vistos los conceptos básicos, las variables en general y las escenas ( http://www.htcmania.com/showthread.php?p=8821039 ), es el momento de profundizar en algo un poco más específico: Procesamiento de datos utilizando variables. Es más bien una característica implícita de los temas anteriores, pero también es (en mi opinión) una de las características más poderosas de Tasker.

¿Procesamiento de datos en variables?

En cierto modo estoy inventando esta expresión, pero es un buen término para referirnos a este aspecto de Tasker. Mediante el procesamiento de datos en variables me refiero a cómo se puede trabajar con los datos almacenados en las variables, extraer información de ello, creando sus propios contextos, y así sucesivamente y así sucesivamente. En mi Tasker tengo varios perfiles y tareas que utilizan esta característica, y algunos de ellos han sido publicados antes. El locutor de eventos del calendario y el sistema de anuncios meteorológicos son ejemplos de procesamiento de datos variables. Se trata de tomar algunos datos -texto, en otras palabras- y trabajar con ellos hasta que usted consigue lo que necesita.

Fuentes de datos

Para entender realmente el poder de procesamiento de datos variables primero tiene que darse cuenta de cuántas posibles fuentes de datos hay por ahí. Más o menos cualquier cosa que se almacena en forma de texto se puede utilizar en Tasker, si se sabe manejar. Son fuentes potenciales de datos las páginas web, los datos del calendario, los documentos de texto, etc. Si ve algún texto, lo más probable es que pueda utilizarlo en Tasker, es así de simple. Los datos meteorológicos, noticias locales, fases lunares, horóscopos, artículos, lo que sea. ¿Quiere crear un perfil que se active cuando su horóscopo cite la palabra dinero? No hay problema.

También es importante entender la diferencia entre lo que ve y lo que un ordenador ve. Una página web es vista por el ordenador como texto puro, una mezcla de referencias a imágenes, textos, normas sobre cómo diseñar la página, etc. En la mayoría de navegadores, pulsar CTRL+U nos lleva al “código fuente” de la página, lo que mostrará lo que el ordenador ve: la página web en forma de texto puro. El caos de texto que te saluda cuando nos fijamos en la fuente puede ser aterrador al principio, pero como se verá más abajo, también puede ser de gran utilidad.

La lectura de datos en variables

La primera parte de cualquier sistema basado en fuentes de datos externas es poner los datos en una variable, para que podamos trabajar con ella. Hay muchas maneras de hacer esto, pero algunas de las acciones más relevantes son Leer-archivo, HTTP-Get, Captar-voz y Consulta-de-variable. Sin embargo, en los ejemplos nos centraremos en los datos recopilados con HTTP-Get, ya que es el más difícil de trabajar, y el más poderoso.
  • Leer-archivo lee un archivo almacenado en la memoria interna y coloca su texto en una variable.
  • HTTP-Get se utiliza para obtener (el texto de origen de) una página web y colocar su texto en la variable %HTTPD.
  • Captar-voz se usa para escuchar para la entrada de voz, que luego se convierte en texto y se almacena en la variable %VOZ. Esta es la base de un asistente de voz casero como mi Nelly.
  • Consulta-de-variable muestra un cuadro de diálogo pidiendo un valor variable. Excelente para cosas como entradas rápidas para la lista de tareas pendientes, tareas relacionadas con contabilidad, archivo, etc.
HTTP Get

HTTP Get (que se encuentra en la categoría de acciones de Red) es quizás la acción de recogida de datos más versátil, ya que le permite cargar páginas web en variables. Pero tiene sus peculiaridades. En teoría, se carga el contenido de la página web en la variable incorporada (interna) %HTTPD. Sin embargo, en algunos dispositivos, como el mío, %HTTPD simplemente no contiene los datos correctos (o cualquier otro dato) después de usar HTTP Get. En estos casos, una solución excelente es usar HTTP Get con la opción de guardar el resultado en un Archivo-de-salida, seguida de otra acción Leer-archivo que pase el texto a una variable. Esto se verá así en varios ejemplos a continuación, aunque debo señalar que la forma correcta de hacer las cosas (cuando funciona bien) es el uso simple de HTTP Get para llenar directamente la variable %HTTPD. Por otra parte, para trabajar libremente con los datos, normalmente necesitaremos tenerlos en variables de usuario, lo que significa tener que copiar el contenido de %HTTPD a otra variable, y eso también son dos acciones, igual que si utilizamos HTTP Get y luego Leer-archivo.

En la pantalla de configuración de HTTP-Get, verá varios campos, los dos primeros son del servidor: Puerto y Ruta. Como regla general, en la casilla del Puerto pondremos el dominio (como por ejemplo .COM) y cualquier otra cosa que le preceda; y el resto en la casilla de Ruta. Por ejemplo, la URL
http://www.pocketables.com2012/09/beginners-guide-to-tasker-part-3-scenes.html
Se dividiría en estos dos campos:
Servidor: Puerto: http://www.pocketables.com

Ruta de acceso: 2012/09/beginners-guide-to-tasker-part-3-scenes.html
En teoría, tras ejecutar la acción, el contenido de esa URL debe quedar en %HTTPD. Si eso no ocurre, utilice el campo Archivo-de-salida para guardar el texto en un archivo (por ejemplo pocketables.txt) y luego use la acción Leer-archivo para obtener la información de ese archivo.

Herramientas de procesamiento de datos

Una vez que tenemos los datos en una variable, comenzaremos con el trabajo para utilizarlos. A menudo, especialmente si carga las páginas web enteras en una variable, la variable se convierte en un barullo de texto. Siempre es una buena idea hacer estas configuraciones de Tasker delante de un ordenador, de modo que usted pueda tener el texto completo delante. Si está trabajando con una página web, por ejemplo, es buena idea tener el código fuente (CTRL+U) de la página a la vista, para obtener una mejor perspectiva de lo que hay en la variable de Tasker. Vas a verme hacer esto en el vídeo del ejemplo 2.

A continuación voy a explicar algunas de las herramientas más comunes que se utilizan trabajando con datos. Todas son acciones que manipulan el contenido de una variable, y como tales, se encuentran en la categoría de variable. No voy a describir todas las posibilidades, pero sí las más importantes.

Separar-variable
a02-variablesplit.jpg
Felicidades, usted acaba de conocer la acción más importante que existe para este tipo de configuración de Tasker. Separar-Variable bien podría llamarse Rebanar-variable o Despiezar-variable, porque lo que hace es que separa el contenido de una variable en partes más pequeñas. Cuenta con dos campos de configuración relativamente simples: Nombre y Separador. Nombre es el nombre de la variable que desea cortar en trozos, y Separador es el carácter o expresión que se usa como referencia para dividir el contenido de la variable.

Por ejemplo, digamos que usted tiene una variable %Aficiones que contiene el texto "fútbol,hockey,natación".

En ese caso, usar una coma (,) como separador, hará que la "motosierra" se dirija a todas las comas y cortará el texto en esos puntos. Los separadores se destruyen en el proceso. Esto crea nuevas variables derivadas de la original y que están numeradas, conteniendo cada una un trozo del texto inicial. En el caso del ejemplo, se llega a las siguientes variables:
%Aficiones1: fútbol
%Aficiones2: hockey
%Aficiones3: natación
Usted acaba de utilizar las comas como puntos para separar una sola variable en pequeñas partes individuales. Este método es el alfa y el omega del procesamiento de datos en variables. Al elegir los separadores correctos puedes cortar variables enormes que contienen las páginas web enteras, obteniendo trozos más pequeños y manejables que contienen sólo la información que necesitamos. Puede separar una página web meteorológica para obtener solo el pronóstico del tiempo, o separar un sitio de noticias para usar los titulares.

Aquí es donde resulta útil todo el texto "raro" que hay en una página web. Con mucha frecuencia podemos usar como separadores las etiquetas que se utilizan para asignar formato a partes específicas de una página web, lo que nos permite coger de la página web las partes que nos interesan. Encontrar un buen separador es algo fácil si se tiene la fuente en un ordenador junto con CTRL+F (buscar texto en la página).

Como ejemplo, echemos un vistazo a pocketables.com. Supongamos que queremos crear una lista de los artículos que aparecen en su página principal, con los títulos y sus enlaces. Cargamos la página en la variable %Pocketables. Poniendo esa fuente en un navegador (que es también lo que hay en %Pocketables), vemos cómo cada artículo aparece en el código fuente:
a03-pcom1.jpg
Las etiquetas (como <h3>) que hay en ese texto son las que le dicen al navegador cómo mostrar la página normalmente. Tasker ve este código cuando se carga una página web en una variable como esta. Todo lo cual es una ventaja, ya que podemos utilizar estas etiquetas como separadores.

En este caso, vemos que el enlace a cada artículo está inmediatamente precedido por <h3><a href=". Pulsando CTRL+F en un navegador de ordenador, y usando la búsqueda de <h3><a href=" en el código fuente, veremos que hay sólo 10 apariciones, lo que significa que sólo se usa antes de cada uno de los diez artículos en la página principal. Si hubiera 20, se puede suponer que fue utilizada dos veces para cada artículo. Si hubiera 175, podríamos suponer que fue utilizado con otro criterio. Queremos que el separador sea lo más exclusivo posible, y en este caso, <h3><a href=" nos daría 11 variables "secundarias" (la primera sub-variable contendría lo que hay antes de la primera aparición del separador, y por lo tanto el número de variables secundarias será uno más que el número de apariciones del separador).

Así, la variable %Pocketables4 contiene todo el texto entre las apariciones <h3><a href=" número 4 y <h3><a href=" número 5. Como se puede ver en la imagen de arriba, esto sigue siendo un texto mucho mayor de lo que queremos:
a04-pcom2.jpg
Sin embargo, como se puede ver, la dirección URL es seguida inmediatamente por " title =". Esto significa que... si cada variable hija se divide de nuevo utilizando este separador, la primera de las variables hija de segunda generación contendrá la URL, y sólo la URL. Un ejemplo de este tipo de variable sería %Pocketables41. Esta no es la variable hija número 41, sino más bien la primera variable hija de la variable %Pocketables4.

%Pocketables42 contendrá entonces todo lo que hay después de " title =" hasta el final de la original %Pocketables4. Esta variable comienza con el título del artículo, y luego añade un montón de "basura" final. Usando el mismo método que hemos hecho para obtener la URL, separamos %Pocketables42 utilizando el separador "> , que es el texto que va a continuación del título. Estamos entonces a la izquierda con un hijo de tercera generación, %Pocketables421, que contiene sólo el título del artículo.

En resumen, he aquí un fragmento de código con las partes pertinentes resaltados. Los tres fragmentos de texto rojo son los distintos separadores usados, el azul es el hijo de segunda generación (%Pocketables41 en el ejemplo), y púrpura/rosa es el hijo de tercera generación (%Pocketables421). El texto al final es sólo una versión abreviada de toda la basura que hemos cortado.
<h3><a href="http://www.pocketables.com/2012/09/tv-show-favs-for-android-hits-version-3-0.html" title="TV Show Favs para Android accesos versión 3.0">TV Show Favs para Android accesos versión 3.0</a></h3>
Al utilizar este método de división simple, se van cortando los datos en los trozos adecuados y se obtienen variables que se pueden utilizar directamente en otra parte. Por ejemplo, podría tener una acción Abrir-URL con %Pocketables41 en el campo de dirección URL y una acción Decir con %Pocketables421 en el campo de texto: de esa forma Tasker abre una URL al tiempo que vocaliza el título de la página que está abriendo.

En este caso, usted tendría que hacer este proceso de división 10 veces con el fin de obtener separadamente la información de los 10 artículos referenciados en la página. Esto supone una gran cantidad de acciones y una gran cantidad de variables, y conviene recordar que cada división crea variables que usted no necesita. Por lo tanto, es aconsejable utilizar las variables locales (letras minúsculas) para este tipo de trabajo, para no abrumar innecesariamente la lista de variables de Tasker. He utilizado variables globales en el ejemplo, que podría ser adecuado si es necesario usar esas variables en otras tareas, pero hay que ser conscientes de los efectos secundarios y tomar una decisión adecuada.

Debo señalar que es posible automatizar el proceso de división de múltiples variables múltiples veces, utilizando bucles que usen una acción para cada variable específica. Esto se hace mediante el uso de matrices, que son esencialmente variables básicas con variables hijas. La variable %Pocketables anterior es una matriz que contiene %Pocketables1, %Pocketables2, y así sucesivamente. Tras eso, es posible especificar un conjunto de acciones que se ejecutarán para cada variable de la matriz, como por ejemplo, todos los hijos de %Pocketables. Sin embargo, no voy a entrar ahora en el uso detallado de matrices, que podría complicar más un asunto que ya es complejo. Mi consejo es seguir con el "método manual" hasta que se haya dominado. Además, a menos que usted está usando una exagerada cantidad de variables, el método manual a menudo puede ser más fácil para entender lo que se está haciendo.

También debe tenerse en cuenta que si se divide en más de 10 partes, las variables de segunda generación comenzarán a tener el mismo nombre que las variables de la primera generación. Por ejemplo, %Pocketables11 puede ser el hijo 11 (undécimo) de %Pocketables o puede ser el primer hijo de %Pocketables1. Si la variable %Pocketables11 de la primera generación es importante, usted no querrá que su valor sea sobrescrito al crear la variable de segunda generación %Pocketables11.

A menudo es complejo hacer un seguimiento de todas las variables hijo, por lo que se debe jugar cuidadosamente con los separadores utilizados para las divisiones. A veces es más prudente separar varias veces con el fin de crear variables hijas bien numeradas en vez de tratar de obtener el resultado en pocas divisiones. Así, en el ejemplo anterior, para obtener el título se podría haber utilizado el separador " title=" , que precede directamente al título que buscamos. Sin embargo (en el momento de escribir estas líneas) ese separador aparece 99 veces lo cual es un problema porque genera 100 variables hijas de primera generación. Esto no sólo es más difícil de tratar que un esquema de nombres estático, además resulta que algunos de los separadores comunes en las páginas web a menudo varían en número según la página se actualiza, lo que complica mucho más el asunto. El esquema de nomenclatura creado en el ejemplo no tiene este problema.

Como he dicho, mientras se está trabajando con esto, es una buena idea tener abierta en el ordenador una versión del texto que se está dividiendo. Eso, combinado con CTRL+F para buscar texto hace que sea mucho más fácil "cortar por los lugares correctos".

Sección-de-variable
a05-variablesection.jpg
La acción Separar-variable puede ser la herramienta más importante para este tipo de trabajo, pero no es la única. Otra gran ayuda es la acción Sección-de-variable, que está diseñada para obtener una parte específica de una variable y tirar el resto por la ventana virtual. Por desgracia no funciona en base a separadores, sino en números de caracteres.

La pantalla de configuración de Sección-de-variable dispone de cinco opciones a considerar. La primera es el Nombre, que es simplemente el nombre de la variable que desea seccionar. El segundo es Desde, que indica a partir de cuál número de carácter hay que comenzar a extraer el resultado; por ejemplo, si desea omitir las tres primeras letras de una variable, hay que poner 4 aquí. La Longitud establece el número de caracteres que se van a incluir en el corte; por ejemplo, elegir 7 caracteres permitiría extraer la palabra "manzana" completa. La opción Encajar hace que la longitud del texto seleccionado se reduzca automáticamente en el caso de que se acabe el contenido de la variable antes de lo previsto, como por ejemplo si se tratan de extraer diez caracteres cuando la variable solo contiene cinco; lo cual es muy conveniente si no sabemos de antemano la longitud del texto inicial. Por último, Almacenar-resultado-en permite guardar el resultado en una variable diferente a la que tenía el texto original.

Bien pero ¿para qué sirve esta función? Es excelente para eliminar caracteres innecesarios que están al principio de las variables. A menudo esto ocurre porque resulta imposible separar las variables por la razón de que esos textos son distintos en cada aparición, o bien porque habría que usar un separador de aparición tan frecuente que también fragmentaría datos que no queremos separar.

Por ejemplo, digamos que usted desea obtener el tiempo (horas y minutos) de una variable cuyo contenido sea de este tipo:
13:30:52.000-04:00
Claro, usted podría separar utilizando los dos puntos como separador, pero eso también separa los minutos de las horas. Usted podría terminar con las variables en forma de %tiempoparcial1, %tiempoparcial2 y %tiempoparcial3, que contendrían respectivamente 13 , 30 y 52.000-04, respectivamente. Luego se podría volver a montar el tiempo con una acción Establecer-variable, %tiempoparcialx a %tiempoparcial1:%tiempoparcial2, y así se terminaría con un % tiempoparcialx que contendría 13:30.

O bien se puede usar directamente la acción Sección-de-variable a partir del 1 carácter con una longitud 5 y así se obtiene 13:30 de inmediato.

En muchos casos, la Sección-de-variable es una alternativa a Separar-variable, pero es una alternativa que a menudo le puede ahorrar un montón de trabajo. Debe saber que es otra opción que puede ser muy útil.

Buscar-y-reemplazar
a06-variablesr.jpg
La acción Buscar-y-reemplazar es una característica relativamente nueva, y tengo sentimientos encontrados respecto a ella. En teoría, debería ser muy útil reemplazando fragmentos de variables en diferentes circunstancias. En la práctica, se trata de una característica que francamente todavía está en fase beta.

El primer problema es que no utiliza el sistema estandarizado de Tasker para coincidencia de patrones, sino que utiliza expresiones regulares reales. Así, para utilizar un comodín no hay que poner * , sino .* (hay que añadir un punto justo antes del asterisco). Esto será una complicación grave si está acostumbrado a la coincidencia de patrones para las condiciones Si(If), y no tiene experiencia usando expresiones regulares reales.

[Nota del traductor: he dudado si debía omitir el siguiente párrafo, y finalmente decido mantenerlo en el documento por fidelidad al texto original (escrito en septiembre de 2012) pero en realidad el párrafo ha quedado obsoleto y por eso le he degradado el color. En noviembre de 2012, el desarrollador de Tasker actualizó a la versión 1.3 y ahí resolvió lo que el autor de este documento menciona a continuación como “segundo problema”. Ya no hay tal “segundo problema” ni para esa versión ni para las siguientes]
El segundo problema es que Buscar-y-reemplazar no es compatible con variables. Si usted tiene una variable y dentro de ella pretende buscar las coincidencias con el contenido de otra variable, no funcionará: Tasker no usará el contenido de la segunda variable sino que utilizará directamente su nombre como si se tratase de cualquier otro texto. Según el desarrollador de Tasker esto está en la lista de tareas para arreglar desde hace varios meses, pero todavía no ha sido resuelto.

En pocas palabras, en este momento la acción Buscar-y-reemplazar es como el patito feo de la caja de herramientas de Tasker, y todavía está pendiente de convertirse en un hermoso cisne. Debido a esto, yo no quiero perder mucho tiempo con este asunto, pero te daré un pequeño ejemplo de cómo se puede usar en algunos casos.

En el anterior ejemplo de la página principal de Pocketables, obtuvimos la URL mediante la división en múltiples ocasiones. Usted podría conseguir lo mismo usando Reemplazar Buscar variables y la cadena de búsqueda siguientes:
<h3><a href=".*"
Esta sería la búsqueda de cualquier mención de <h3><a href=", seguido del comodín no-estándar (.*), y terminando con un ". Esto devuelve resultados (variables para cada situación) del tipo siguiente:
<h3><a href="http://www.pocketables.com/2012/09/tv-show-favs-for-android-hits-version-3-0.html"
El comodín equivale aquí a la dirección URL, que hemos "cercado" al colocar un comodín en la cadena entre dos piezas que lo delimitan. Tenemos que usar<h3><a href=" aquí con el fin de capturar las direcciones URL que están a continuación (no todas las URL en el código), y " es necesario para detener la inclusión de absolutamente todo lo que sigue a la URL. Así, nos encontramos con alguna información basura en el comienzo y el final. Podemos usar Sección-de-variable a partir del carácter 1 con una longitud de 13 para deshacerse del principio, pero debido a la longitud variable de la URL, es necesario Buscar-y-reemplazar o bien Separar-variable usando el separador " para deshacerse de él. Por lo tanto, nos quedamos con tres acciones de todos modos, lo que significa que no es infinitamente superior a Separar-variable. Personalmente yo uso Separar-variable casi exclusivamente, porque al menos sé dónde lo tengo en lo que respecta a la sintaxis de coincidencia de patrón y el soporte de variables.

[Este artículo continuará en otro mensaje, en http://www.htcmania.com/showthread.php?p=9099208 ]

Última edición por ATaskREADOS Día 30/06/13 a las 23:28:10
Responder Con Cita
Los siguientes 6 usuarios han agradecido a ATaskREADOS su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]