PDA

Ver la Versión Completa : [ SOLUCIONADO ] Extraer datos despues de hacer HTTP get


Rbcheca
22/08/15, 07:12:22
Hola, continuando este hilo: http://www.htcmania.com/showthread.php?t=1057026, he decidido abrir un nuevo tema para centrarme en la extracción de los datos que me devuelve un HTTP get.

He conseguido aislar lo que me interesa, que es una url, pero el primer problema que se me presenta es que es una cantidad de datos enorme, y como a mi lo que me interesa es sacar los datos de las últimas 24h, por ejemplo, la primera separación de variable va a ser todo lo que esté antes de la fecha de ayer, el problema es que la fecha en el documento esta en el formato: Fri, 14 Aug 2015, y aqui ya me quedo un poco en blanco, El feed al que le hago el http get solo tiene datos de la última semana, por lo que creo que sería buena idea separar la variable a partir del dia de la semana de ayer, pero el texto está en formato mon, tue, wed etc y aquí ya me pierdo del todo.

La otra opción es la de por día del mes pero tenemos el mismo problema, el formato 14 Aug.

En las pruebas que he hecho, metiendo la fecha manualmente en el separador, he conseguido aislar la url como he dicho, otra duda que me asalta es si puedo buscar por palabras claves la información que está dentro de la variable.

Por favor, solo decirme si voy bien encaminado o si el planteamiento está totalmente errado, y si me podeis dar alguna pista para continuar.

Muuuchas gracias!!!

WillyWeb
22/08/15, 11:21:46
Yo diría que vas por buen camino si estás sacando algo de los que necesitas, ¿no? :sisi1:

Tendrás que estudiar detenidamente ese feed. Ver si tiene bloques identificables. El orden de esos bloques. Una estructura típica del enlace que buscas. Todo eso ayuda.

WillyWeb
22/08/15, 14:20:12
Estoy tonto. Es un feed, claro que tiene estructuras identificables X-D

Tendrá una pequeña cabecera con los datos de la web que origina el feed y luego bloques <item></item> con todos los datos de cada una de las series publicadas. Cada uno de esos bloques tendrá un <title></title> que seguramente tendrá el nombre de la serie y un <link></link> que llevará a su correspondiente página en la que tendrás los enlaces a los torrent. Seguro que tiene más cosas, pero creo que eso es todo lo que necesitas.

Los bloques <item> los puedes sacar con una expresion regular de este tipo...

<item>(.|\s)*?</item>

... en la acción "Buscar y reemplazar". En "Variable" pones "%HTTPD" (contiene el resultado de HTTP Get). Quita las marcas de "Multilínea" y de "Una sola coincidencia". Y en "Almacenar coincidencia en" pones el nombre de una variable local, por ejemplo "%items".

Con eso tienes un array de tasker (%items1, %items2 ... &itemsXX) con todos los <item> del feed. Si haces un bucle que recorra ese array creo que podrás buscar los nombres de serie/peli que te interesan con una simple búsqueda con comodines (*<title>*nombre serie*</title>*). El bucle sería algo así...

For %item en %items() << así haces referencia al array completo

Si encuentras en un %item uno de los nombres que te interesa te sales del bucle y sigues con el proceso.

Ahora toca sacar la URL de la página, que también se puede hace con una expresión regular, pero esta vez (gracias mlesir) es un poco diferente...

(?<=<link>).*?(?=</link>)

En variable pones "%item" y en almacenar resultado pones "%url". Y con eso ya puedes ir a la página de la serie a buscar tus codiciados enlaces .torrent

¿Hasta aquí todo está claro? :loco:

Rbcheca
22/08/15, 14:37:27
Está muy claro, muy bien explicado, a ver si soy capaz de llevarlo a cabo, madre mia cuanto sabeis, eso no lo saco yo solo ni en un millon de años.

Me queda la duda de como hacer para que no se repitan resultados de una busqueda a otra, es decir si ma da el resultado que busco "A" y me lo notifica, como hago para que si a la siguiente vez sigue ahi "A" lo omita y no lo tenga en cuenta como resultado valido.

Me pongo a ello enseguida, que pinta muy bien :aplausos::aplausos::aplausos:

WillyWeb
22/08/15, 14:47:22
Podrías guardar en un archivo de texto el contenido de <pubDate> de cada <item> que te ha interesado seguir. Cuando proceses el feed por segunda vez tendrás que verificar que una coincidencia de nombre de serie no ha sido procesada antes comprobando que su <pubDate> no está en ese archivo de texto.

WillyWeb
22/08/15, 14:54:56
He visto una posible causa de error :(

Al buscar el título de la serie quita las etiquetas. Tal y como está no funcionará porque entre esas etiquetas existen retornos de carro. Lo deberías dejar como ... *nombre serie*

Rbcheca
22/08/15, 19:16:00
Bueno, me ha surgido un primer problema que viene por mi total desconocimiento de los elementos nuevos que me has enseñado, antes de nada aclarar que cuando pregunto algo así, es por que ya le he dado mil vueltas a los tutos y a google y no he sacado nada en claro, entiendo que el tiempo de los demás es tan importante como el mio.

Al hacer http get no se me guardan los datos en %HTTPD, por lo que he hecho un leer archivo (el que me ha creado http get) y guardar en la variable %HTPD, y el siguiente paso ok.

Hasta el punto de sacar los bloques de <item> todo claro y funcionando, me ha dejado flipado lo de (.|\s)*?", que me gustaría entender que es, pero he buscado y no he encontrado nada:facepalm:

Luego con lo de "El bucle sería algo así... For %item en %items() << así haces referencia al array completo" entiendo que es lo que en tasker está en "tarea-for" y que entre los parentesis de "%items()" tengoo que poner los terminos que quiero buscar.

Ahí me asalta una duda, ¿tengo que poner el nombre de la serie completo, o vale con unas palabras clave) por ejemplo, ¿tengo que poner "perico el de los palotes hdtv 720p" o puedo buscar por "perico palotes 720p"?

En la siguiente parte, la de "Si encuentras en un %item uno de los nombres que te interesa te sales del bucle y sigues con el proceso." ahi WillyWeb, lo siento mucho si que no he entendido nada.

Tampoco tengo claro si he hecho la tarea como tu me has dicho:

1.HTTP Get
servidor: "puerto"el feed" "tipo mime: txt/xml" "archivo de salida: archivo.html"

2.leer archivo: archivo.html a %HTPD

3. buscar y reemplazar: variable %HTPD buscar <item>(.|\s)*?</item> "almacenar coincidencias en %items
Luego hago un flash con %items2 y compruebo que me devuelve un resultado correcto de todo el contenido de un "<item></item>"

A partir de ahi me hago la picha un lio y no se por donde seguir, al poner el For %item en %items(), suponiendo que como he dicho está bien, me sale la flechita y ya no se si el buscar y reemplazar va dentro o no.

Cuanto trabajo te estoy dando Willy, si me mandas a freir esparragos lo entenderé perfectamente. :dios:

WillyWeb
22/08/15, 20:19:26
Bueno, me ha surgido un primer problema que viene por mi total desconocimiento de los elementos nuevos que me has enseñado, antes de nada aclarar que cuando pregunto algo así, es por que ya le he dado mil vueltas a los tutos y a google y no he sacado nada en claro, entiendo que el tiempo de los demás es tan importante como el mio.

Hombre, eso lo daba por supuesto :ok:

Al hacer http get no se me guardan los datos en %HTTPD, por lo que he hecho un leer archivo (el que me ha creado http get) y guardar en la variable %HTPD, y el siguiente paso ok.

Eso no debería pasar. El comportamiento por defecto de "HTTP Get" es guardar el resultado en la variable global %HTTPD ... ¿seguro que has escrito bien el nombre de la variable?

Y por cierto, si no necesitas conservar un valor para algo es mejor usar variables locales (nombre en completamente en minúsculas). Son más rápidas y no malgastas recursos.

Hasta el punto de sacar los bloques de <item> todo claro y funcionando, me ha dejado flipado lo de (.|\s)*?", que me gustaría entender que es, pero he buscado y no he encontrado nada:facepalm:

Es una expresión regular que traducido al lenguaje humano dice algo así como ... cualquier carácter o código de nueva línea repetido cualquier número de veces. Eso es justo lo que tienes entre las etiquetas <item> e </item>.

Luego con lo de "El bucle sería algo así... For %item en %items() << así haces referencia al array completo" entiendo que es lo que en tasker está en "tarea-for" y que entre los parentesis de "%items()" tengoo que poner los terminos que quiero buscar.

La acción que inicia un bucle está en "Tareas > For". En el campo "Variable" tienes que poner el "%item" que te he comentado antes y en el campo "Ítems" pones lo de "%items()". Con eso le dices a Tasker que recorra todos los elementos del array "items" poniendo temporalmente el contenido de cada uno de ellos en la variable "%item". Así puedes repetir con comodidad cualquier serie de procesos para cada elemento del array. El bucle lo tienes que cerrar con "Tareas > End For"

Ahí me asalta una duda, ¿tengo que poner el nombre de la serie completo, o vale con unas palabras clave) por ejemplo, ¿tengo que poner "perico el de los palotes hdtv 720p" o puedo buscar por "perico palotes 720p"?

Tasker admite comodines a la hora de hace comparaciones en determinados sitios. En tu ejemplo debería funcionar algo así ... *perico*palotes*720p*

Cada asterisco equivale a poner "aquí entra cualquier cosa". Ten eso presente si el resultado no es el esperado. :silbando:

En la siguiente parte, la de "Si encuentras en un %item uno de los nombres que te interesa te sales del bucle y sigues con el proceso." ahi WillyWeb, lo siento mucho si que no he entendido nada.

Puede que salir del bucle no sea la mejor solución en este caso :rolleyes:

Creo que sería mejor un "If" con su correspondiente "End If" que encerrase el proceso que pienses seguir cuando encuentres lo que buscas. Naturalmente la condición de ese If debería ser que dentro de %item se encuentre el nombre de la serie que buscas usando lo de los comodines.

...

El proyecto no es complicado, pero el laborioso. De momento vas bien, pero te quedan muchas cosas por resolver que no te he querido contar para no asustarte ya que tienes pocas tablas con Tasker. Vamos poco a poco ;-)

Rbcheca
22/08/15, 20:53:17
Lo de %HTTPD he leído en un tuto de este foro que aveces falla pero ahora no lo encuentro, no se yo si es que son demasiados datos ya que en ayuda pone que %HTTPD máx 4K, no se si se referirá a eso.

Para lo demás... necesito procesarlo lentamente para entenderlo.

Enviado desde mi Nexus 5 mediante Tapatalk

WillyWeb
22/08/15, 21:09:53
Lo he probado ahora mismo y he podido cargar los 251KB del feed en %HTTPD sin problemas. Es cierto que en la documentación dice que esa variable está limitada a 4KB, pero por lo que he podido comprobar eso no ya es cierto.

Una cosa que puede ocasionar que %HTTPD no tenga nada dentro es que HTTP Get no tenga tiempo de completar la descarga. Prueba subiendo el valor de "Cuenta atrás".

Realmente es indiferente la forma en que llegues a tener el contenido del feed en una variable. Si copiarlo a un archivo y luego leerlo en una variable te funciona, pues perfecto. Eso sí, yo usaría una variable local para no desperdiciar más memoria.

Rbcheca
22/08/15, 21:20:59
Pues el motivo no era el tiempo, era que en tipo mime tenía puesto txt/xml, comprobado y recomprobado, ahora ya lo guarda correctamente.

WillyWeb
22/08/15, 21:22:52
Si lo dejas en blanco también funciona :ok:

Rbcheca
23/08/15, 17:04:21
Bueno, después de hacer los pasos que me indicó WillyWeb, tasker tenía problemas para manejar el volumen de datos que había dentro de <item></item>, entonces en vez de eso hice buscar y reemplazar sobre <link>(.|\s)*?</link>, que guarda solo el enlace al torrent, en el mismo enlace están todos los datos que mas adelante usaré para filtrar lo buscado.

Una vez que tengo todos los enlaces del feed en la variable %items, los filtro por palabras clave de la siguiente manera:

For variable %item Ítems %items()

If condicción %item coincide *perico*palotes*720*

O

%item coincide *quien*madruga*dios*ayuda*

ahora tengo en la variable %item los dos enlaces buscados pero con las etiquetas <link></link>

1.<link>Http://blablabla/perico-palotes-720/</link>
2.<link>Http://blablabla/a-quien-madruga-dios-le-ayuda/</link>

Le quito las etiquetas con (?<=<link>).*?(?=</link>) Yo también te lo agradezco mlesir ;)

Buscar y reemplazar variable %item buscar (?<=<link>).*?(?=</link>) almacenar coincidencias en %link.

Ahora escribo esos dos links en un archivo para ver como los trabajo luego:

Escribir archivo link.txt Texto %link

Mi intención es ejecutar esta tarea completa dos veces al día, para que compruebe si hay algo nuevo y me lo notifique, pero necesito que si me da un resultado, las siguientes veces que se ejecute no me devuelva un resultado que ya me dió.

Tengo dos ideas para hacerlo, una es crear una variable global con cada busqueda coincidente, y que lo haga automaticamente, y cuando encuentre una coincidencia con mi búsqueda primero mire que no la ha encontrado antes, y en caso de que ya la tenga no me la devuelva, luego hacer que cada 10 días limpie esas variables para volver a ser usadas, 10 días por que el feed solo guarda la última semana.

La otra opción que se me ocurre es que mire en el archivo de texto %link para ver si ya está ahí el enlace, creo que esta es mejor, pero la verdad que ahora mismo no tengo ni idea de como llevarlas a cabo... :facepalm: .....Pero estoy en ello :)

Rbcheca
23/08/15, 17:05:55
Bueno, después de hacer los pasos que me indicó WillyWeb, tasker tenía problemas para manejar el volumen de datos que había dentro de <item></item>, entonces en vez de eso hice buscar y reemplazar sobre <link>(.|\s)*?</link>, que guarda solo el enlace al torrent, en el mismo enlace están todos los datos que mas adelante usaré para filtrar lo buscado.

Una vez que tengo todos los enlaces del feed en la variable %items, los filtro por palabras clave de la siguiente manera:

For variable %item Ítems %items()

If condicción %item coincide *perico*palotes*720*

O

%item coincide *quien*madruga*dios*ayuda*

ahora tengo en la variable %item los dos enlaces buscados pero con las etiquetas <link></link>

1.<link>Http://blablabla/perico-palotes-720/</link>
2.<link>Http://blablabla/a-quien-madruga-dios-le-ayuda/</link>

Le quito las etiquetas con (?<=<link>).*?(?=</link>) Yo también te lo agradezco mlesir ;)

Buscar y reemplazar variable %item buscar (?<=<link>).*?(?=</link>) almacenar coincidencias en %link.

Ahora escribo esos dos links (ya sin etiquetas) en un archivo para ver como los trabajo luego:

Escribir archivo link.txt Texto %link1 (pensaba que sería %link, pero no se porque es %link1)

Mi intención es ejecutar esta tarea completa dos veces al día, para que compruebe si hay algo nuevo y me lo notifique, pero necesito que si me da un resultado, las siguientes veces que se ejecute no me devuelva un resultado que ya me dió.

Tengo dos ideas para hacerlo, una es crear una variable global con cada busqueda coincidente, y que lo haga automaticamente, y cuando encuentre una coincidencia con mi búsqueda primero mire que no la ha encontrado antes, y en caso de que ya la tenga no me la devuelva, luego hacer que cada 10 días limpie esas variables para volver a ser usadas, 10 días por que el feed solo guarda la última semana.

La otra opción que se me ocurre es que mire en el archivo de texto %link para ver si ya está ahí el enlace, creo que esta es mejor, pero la verdad que ahora mismo no tengo ni idea de como llevarlas a cabo... :facepalm: .....Pero estoy en ello ;-)

WillyWeb
23/08/15, 17:16:10
En el primer "Buscar y reemplazar", en lugar de usar "<link>(.|\s)*?</link>" utiliza esto otro "(?<=<link>).*?(?=</link>)". De esa forma la lista de %items ya te sale sin las etiquetas <link> y te ahorras tener que quitarlas después.

Rbcheca
23/08/15, 17:18:01
lo hice, pero me daba error, tengo pendiente volver a hacerlo, pero quería avanzar un poco antes de mirarlo

Enviado desde mi Nexus 5 mediante Tapatalk

Rbcheca
23/08/15, 17:44:45
Hice algo mal por que ahora no me ha dado ningun error. :-)

WillyWeb
23/08/15, 18:34:50
Bueno, pues ahora que has llegado hasta aquí te enseño mi versión. Es algo muy básico que hace lo mismo que has hecho tú. Espero aportarte ideas nuevas...

BuscaEnFeed (666)
A1: Establecer variable [ Nombre:%feed A:http://www.htcmania.com/external.php?forumids=969 Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%busca A:*javascript*/*blue* Calcular:Apagado Añadir:Apagado ]
A3: HTTP Get [ Servidor:Puerto:%feed Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida:feed.xml Confiar en cualquier Certificado:Apagado ]
A4: Buscar y Reemplazar Contenido de Variable [ Variable:%HTTPD Buscar:(?<=<title>).*?(?=</title>) Ignorar Caso:Apagado Multilínea:Apagado Una sola coincidencia:Apagado Almacenar Coincidencias En:%titles Reemplazar Coincidencias:Apagado Reemplazar Con: ]
A5: Buscar y Reemplazar Contenido de Variable [ Variable:%HTTPD Buscar:(?<=<link>).*?(?=</link>) Ignorar Caso:Apagado Multilínea:Apagado Una sola coincidencia:Apagado Almacenar Coincidencias En:%links Reemplazar Coincidencias:Apagado Reemplazar Con: ]
A6: Establecer variable [ Nombre:%lista A:%titles(#?%busca) Calcular:Apagado Añadir:Apagado ]
A7: Separar variable [ Nombre:%lista Separador:, Eliminar base:Apagado ]
A8: Escribir archivo [ Archivo:feed.txt Texto:%lista Añadir:Apagado Añadir Nueva Línea:Encendido ]
A9: For [ Variable:%num Ítems:%lista() ]
A10: Escribir archivo [ Archivo:feed.txt Texto:%titles(%num) ... %links(%num) Añadir:Encendido Añadir Nueva Línea:Encendido ]
A11: End For

Con A1 he metido en una variable la URL del feed. En este ejemplo he usado el de este foro.

Con A2 he metido en una variable una lista de términos a buscar separados por una barra. He usado el asterisco para poder localizar las palabras clave en cualquier posición. Por cierto, yo he preferido hacer la búsqueda en el <title> del tema. Si tú prefieres hacerlo en el <link> tendrás que cambiar A6.

Con A3 se descarga el feed y se guarda su contenido en %HTTPD. Lo del archivo lo he usado para depurar y se puede eliminar.

Con A4 y A5 se crean dos array. Uno con los todos los <title> y otro con los <link>. Ojo porque el primero de la lista no corresponde a un <item> aunque eso no es demasiado importante en este caso.

Con A6 se genera una lista separada por comas con los números de los elementos del array que contienen los términos de búsqueda guardados en A2. En mi caso el array que he usado es %titles pero puedes poner el otro y funcionará igual.

Con A7 se crea un array con esa lista de números separados por comas.

Con A8 escribo esa lista de números en un archivo de texto (sólo para comprobar).

Con el bucle A9-A11 añado a ese mismo archivo el contenido de cada elemento del array de títulos y enlaces que corresponde a cada número localizado en A6.

...

No es bonito, pero es muy rápido. Y además el uso de recursos se mantienen al mínimo, que ya sabes que en este caso es un factor crítico.

Rbcheca
23/08/15, 18:48:38
Ostras Willy, necesito horas para descifrar y comprender eso, hasta hace tres días usaba tasker para encender y apagar el wifi... :cry: pero está muy chulo, me pongo ahora mismo.

A10 llega hasta donde hemos llegado con la otra forma, la de escribir los enlaces ¿no?

WillyWeb
23/08/15, 18:53:10
Sí, se guarda el <link> y el <title> de cada <item>.

Y no creo que te cueste "días" entenderlo. Es básicamente lo mismo que has hecho hasta ahora, aunque puede que usando alguna acción diferente.

Rbcheca
23/08/15, 18:59:39
Tienes razón, creo que ya lo tengo, hay un par de cosas que no estoy seguro, voy a escribirlo en tasker que seguro lo comprendo mejor.

Rbcheca
23/08/15, 20:29:34
Si no entiendo mal, teniendo los numeros de A6 y A7, se hace mucho más fácil no repetir los enlaces ya filtrados ¿no?

Rbcheca
23/08/15, 20:31:39
Si no entiendo mal, teniendo los numeros de A6 y A7, se hace mucho más fácil no repetir los enlaces ya filtrados ¿no?

WillyWeb
23/08/15, 20:52:40
Si no entiendo mal, teniendo los numeros de A6 y A7, se hace mucho más fácil no repetir los enlaces ya filtrados ¿no?

Eso puede parecer, pero esos número cambian cada vez que se añade algo al feed. Me temo que no valen para lo que quieres hacer.

La manera de saber si el feed contiene novedades sería verificar la fecha/hora de actualización del feed mirando el valor de la etiqueta <lastBuildDate> que está al principio de todos los feed. La pega es que eso sólo te dice que el feed tiene cambios, no que esos cambios te interesen.

No lo he meditado mucho y puede que tenga fallos, pero se me ha ocurrido algo...

La primera vez que corre la tarea guardas el primer resultado de la búsqueda. La vez que ejecutes esa tarea comparas ese resultado guardado con el primer resultado de la nueva búsqueda. Si son iguales el feed no contiene nada que te interese indistintamente de que tenga cosas nuevas.

Debería funcionar. Es cosa de intentar ponerlo en marche. :silbando:

Rbcheca
23/08/15, 20:57:24
y si hay alguna novedad sobreescribir el existente por el nuevo.

Enviado desde mi Nexus 5 mediante Tapatalk

WillyWeb
23/08/15, 21:06:14
Exacto :ok:

Le estoy dando vueltas para ver cómo hacerlo con la información que ya está guardada en el archivo de texto :loco:

Ya te contaré.

WillyWeb
25/08/15, 17:14:21
Por fin he podido sacar un rato para darle un empujón a esto...

BuscaEnFeed (666)
A1: Establecer variable [ Nombre:%feed A:URL del feed Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%busca A:*una*cosa*/*otra*cosa* Calcular:Apagado Añadir:Apagado ]
A3: HTTP Get [ Servidor:Puerto:%feed Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida:feed.xml Confiar en cualquier Certificado:Apagado ]
A4: Buscar y Reemplazar Contenido de Variable [ Variable:%HTTPD Buscar:(?<=<title>).*?(?=</title>) Ignorar Caso:Apagado Multilínea:Apagado Una sola coincidencia:Apagado Almacenar Coincidencias En:%titles Reemplazar Coincidencias:Apagado Reemplazar Con: ]
A5: Buscar y Reemplazar Contenido de Variable [ Variable:%HTTPD Buscar:(?<=<link>).*?(?=</link>) Ignorar Caso:Apagado Multilínea:Apagado Una sola coincidencia:Apagado Almacenar Coincidencias En:%links Reemplazar Coincidencias:Apagado Reemplazar Con: ]
A6: Establecer variable [ Nombre:%nums A:%titles(#?%busca) Calcular:Apagado Añadir:Apagado ]
A7: Separar variable [ Nombre:%nums Separador:, Eliminar base:Apagado ]
A8: Leer línea [ Archivo:feed.txt Línea:2 A la variable:%antes ]
A9: Establecer variable [ Nombre:%ahora A:%titles(%nums1) Calcular:Apagado Añadir:Apagado ]
A10: Si (if) [ %antes ~ %ahora ]
A11: Flash [ Texto:Nada nuevo Largo:Apagado ]
A12: Leer Archivo [ Archivo:feed.txt A la variable:%lista ]
A13: Else
A14: Flash [ Texto:Cosas nuevas Largo:Apagado ]
A15: Establecer variable [ Nombre:%lista A:... Notificado el %DATE a las %TIME ...(aquí dos líneas en blanco) Calcular:Apagado Añadir:Apagado ]
A16: For [ Variable:%num Ítems:%nums() ]
A17: Establecer variable [ Nombre:%lista A:... Notificado anteriormente ...(aquí dos líneas en blanco) Calcular:Apagado Añadir:Encendido ] Si (if) [ %antes ~ %titles(%num) ]
A18: Establecer variable [ Nombre:%lista A:%titles(%num)(aquí una línea en blanco)%links(%num)aquí dos líneas en blanco) Calcular:Apagado Añadir:Encendido ]
A19: End For
A20: Escribir archivo [ Archivo:feed.txt Texto:%lista Añadir:Apagado Añadir Nueva Línea:Apagado ]
A21: Fin si (End if)
A22: Pop-Up [ Título:Feed Filtrado Texto:%lista Imagen de fondo: Disposición:VisorTXT Cuenta atrás (segundos):600 Mostrar sobre bloqueo pantalla:Encendido ]


He cambiado ligeramente mi propuesta anterior...

A1 y A2: Definen el feed y los términos de búsqueda.

A3, A4 y A5: Cargan el feed en %HTTPD y sacan los <title> y los <link> en los array correspondientes.

A6 y A7: Localizan los <title> que contienen los términos de búsqueda y crea un array con sus posiciones dentro del array correspondiente.

A8: Carga en la variable %antes la segunda línea de la lista de resultados anterior.

A9: Guarda en una variable %ahora el primer resultado de la lista de resultados actual.

A10, A11 y A12: La idea es comparar el primer resultado actual y anterior para ver si el feed contiene cambios que interesen. Cuando el feed no contiene nada nuevo (%antes y %ahora son iguales) se notifica con un flash y se carga la lista de resultados anterior en una variable.

A13 y A14: Cuando el feed contiene novedades (%antes y %ahora son diferentes) se notifica con un flash.

A15: Inicia la variable que contendrá la lista de resultados con la fecha y la hora actual.

A16-A19: Bucle que recorre todos los elementos del array que coinciden con los términos de búsqueda.

A17: Añade a la lista de resultados una marca que indica que desde ese punto los resultados ya se habían notificado antes (el elemento procesado es igual que %antes).

A18: Añade a la lista de resultados cada <title> y <link> localizados en A6.

A20 y A21: Guarda la lista de resultados en un archivo de texto y termina el bloque condicional iniciado en A13 (si el feed tiene novedades).

A22: Muestra en una escena personalizada el contenido de la lista de resultados. La anterior si el feed no contenía novedades o la nueva si contenía cosas nuevas.

* Ojo a las anotaciones (aquí xxx líneas en blanco).
* La escena personalizada "VisorTXT" la he hecho clonando la escena "Pop-Up" que se crea automáticamente al añadir la acción "Pop-Up" por primera vez. He ajustado las propiedades de sus elementos para poder leer con comodidad la lista de resultados.

Creo que esto hace lo que tú querías :rolleyes:

Rbcheca
25/08/15, 18:05:44
Maaadre mía, que bueno, voy a ver si soy capaz de transcribir todo eso en tasker.

Una pregunta por curiosidad, te dedicas a la programación, o esto lo has aprendido por que te gusta?

Ha sido muy divertido, GRACIAS!!!

WillyWeb
25/08/15, 18:11:14
Soy autodidacta y he estudiado el tema porque hacerme mis propias aplicaciones me ha facilitado el trabajo durante toda mi vida profesional... y además me lo paso pipa :risitas:

Rbcheca
25/08/15, 18:26:23
La verdad es que si, ha sido muy divertido (y frustrante a veces) pero según iban saliendo las cosas me daba un poco de "subidón", me gustaría aprender más sobre esto, ¿me puedes dar alguna recomendación de libros o web por donde espezar de cero? Como has visto me falta toda la base, saco las cosas con el método cientifico "ensayo y error", pero resulta muy tedioso y acabas desesperandote.

WillyWeb
25/08/15, 18:35:27
Pues hombre, en el caso de Tasker deberías empezar por leer con detenimiento el Tutorial que los amigos ATaskREADOS han puesto el principio de este subforo. :ok:

Eso junto a las "userguide" que ofrece el propio programador de Tasker son lectura obligatoria...

http://tasker.dinglisch.net/
http://tasker.wikidot.com/

:silbando:

Rbcheca
25/08/15, 18:58:10
En la 3 pones archivo de salida feed.xml, y en la 8 leer linea de feed.txt, ¿Está bien?

WillyWeb
25/08/15, 18:59:57
Sí, aunque el xml lo puedes eliminar. No hace falta para nada. Sólo si quieres leer el feed para comprobar su contenido.

Rbcheca
25/08/15, 20:05:14
Impresionante tio, funciona a la perfección, no entiendo ni papa de lo que he puesto en las tareas pero las entenderé (algún día)

Reitero, muchas gracias.

WillyWeb
25/08/15, 20:25:42
Impresionante tio, funciona a la perfección...

Hombre, ¿y qué esperabas? :sisi1:

...no entiendo ni papa de lo que he puesto en las tareas pero las entenderé (algún día)

De A1 hasta A7 es lo mismo de antes. Leer el feed, sacar titles y links y buscar lo que te interesa.

Lo que está entre A13 y A21 también estaba antes para componer la lista de resultados. En la primera versión escribías las líneas directamente al archivo y ahora se añaden a una variable y luego se escribe toda la lista de una vez.

Lo único diferente/añadido es lo de detectar las novedades no notificadas, que ya te he contado en qué consiste. Si el primer resultado de antes es igual que el de ahora la lista no ha cambiado, y en caso contrario sí.

Reitero, muchas gracias.

Ha sido entretenido. Y ya tengo una tarea que hace en un segundo lo que yo hacía a mano dedicando un buen rato cada día ;-)

Ahora te toca mejorarlo ... que se baje el torrent directamente no estaría mal :silbando: ... pero ese pez ya no te lo doy yo :risitas:

:cucu:

Rbcheca
25/08/15, 20:56:55
Hombre, ¿y qué esperabas?

Pues esperaba cagarla al transcribirlo y luego volverme loco para ver donde me había equivocado.

Ha sido entretenido. Y ya tengo una tarea que hace en un segundo lo que yo hacía a mano dedicando un buen rato cada día

Si ya decía yo que esto es muy útil, me extraña que no se haya interesado más gente...

Ahora te toca mejorarlo ... que se baje el torrent directamente no estaría mal ... pero ese pez ya no te lo doy yo

Ya lo tengo pensado, incluso la forma... Pero ahora me he pasado los tutos de ataskreados al kindle para empollarlos por la noche, pero... volveré... :sisi1:

WillyWeb
25/08/15, 21:06:00
Lo que hace esta tarea es una función básica de cualquier lector de feeds. En resumidas cuentas simplemente te dice que tienes un tema nuevo sobre algo que te interesa. :rolleyes:

Añadir a eso más funciones ya es otra historia. Suerte.