Tasker Para hablar de todo lo relacionado con la aplicación tasker


 
Herramientas
  #1  
Viejo 20/07/16, 03:11:09
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Crear una lista de reproducción en Spotify con canciones similares

Hola: quería compartir el trabajo original y el modificado por mi.

En el original es necesario tener Autospotify, Autotools y Autoweb, al no contar con Autospotify modifiqué las tareas para poder realizarlo solo con Autotools y Autoweb.

Lo que hace es si uno está escuchando una canción en Spotify y le gusta puede crear automaticamente, copiando el vinculo, una lista de reproducción con canciones similares según el sitio Last.fm

También podría modificarse para obtener el nombre de una canción que estemos escuchando, por ejemplo de Soundhound o ingresar manualmente el nombre de un tema y que nos cree la playlist.

Este es el link para el perfil original en inglés
http://forum.joaoapps.com/index.php?...ify-songs.107




Código:
Spotify Modificado (141)
	A1: Si (if) [ %CLIP ~R https://open.spotify.com/track/ ]
	A2: AutoTools Dialog [ Configuración:Dialog Type: 2 Choices
Choice One: No
Choice One Command: false
Choice Two: Yes
Choice Two Command: true
Text: Crear una playlist con canciones similares?
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A3: Si (if) [ %atcommand ~ true ]
	A4: Establecer variable [ Nombre:%url A:%CLIP Calcular:Apagado Añadir:Apagado ] 
	A5: Separar variable [ Nombre:%url Separador:https://open.spotify.com/track/ Eliminar base:Apagado ] 
	A6: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Get a track
Id: %url2 Cuenta atrás (segundos):120 ] 
	A7: Establecer variable [ Nombre:%songname A:%trackname Calcular:Apagado Añadir:Apagado ] 
	A8: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: Obteniendo canciones...
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A9: AutoWeb Web Service [ Configuración:API: Last.fm
API Action: Get similiar songs
Track: %trackname
Artist: %trackartistnames1
Limit: 30 Cuenta atrás (segundos):120 ] 
	A10: Si (if) [ %track_name1 No ajust. ]
	A11: AutoTools Dialog [ Configuración:Dialog Type: Ok
Text: No se encontraron canciones
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A12: Detener [ Con error:Apagado Tarea: ] 
	A13: Fin si (End if) 
	A14: For [ Variable:%num Ítems:1:%track_name(#) ] 
	A15: Establecer variable [ Nombre:%resultado(%num) A:%track_name(%num),%artist_name(%num) Calcular:Apagado Añadir:Apagado ] 
	A16: End For 
	A17: For [ Variable:%similarsongs Ítems:%resultado() ] 
	A18: Array Clear [ Nombre:%items_uri ] 
	A19: Array Clear [ Nombre:%popularity ] 
	A20: Sumar a variable [ Nombre:%array Valor:1 Módulo (wrap around):0 ] 
	A21: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Search tracks 
Q: %resultado(%array) Cuenta atrás (segundos):120 ] 
	A22: Si (if) [ %items_uri1 Ajuste & %trackuri() !~R %items_uri1 & %trackuri() !~R spotify:track:%url2 ]
	A23: Array Push [ Nombre:%trackuri Posición:1 Valor:%items_uri1 Rellenar Espacios:Apagado ] 
	A24: Array Push [ Nombre:%trackpopularity Posición:1 Valor:%popularity1 Rellenar Espacios:Apagado ] 
	A25: Fin si (End if) 
	A26: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: %trackuri(#) canciones encontradas!
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A27: End For 
	A28: Si (if) [ %trackuri(#) > 0 ]
	A29: AutoWeb Web Service [ Configuración:API: Spotify
API Action: My Account Info Cuenta atrás (segundos):120 ] 
	A30: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: Creando playlist.
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A31: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Create playlist
User Id: %my_user_id
Name: canciones similares a %songname
Public: false Cuenta atrás (segundos):120 ] 
	A32: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Add Tracks to a Playlist
User Id: %my_user_id
Playlist Id: %playlist_id
Uris: %trackuri() Cuenta atrás (segundos):120 ] 
	A33: AutoTools Dialog [ Configuración:Dialog Type: 2 Choices
Choice One: No
Choice One Command: false
Choice Two: Yes
Choice Two Command: true
Text: Playlist creada! Escuchar ahora?
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A34: Enviar Intent [ Acción:android.intent.action.VIEW Categ.:Default Tipo Mime: Datos:spotify:user:%my_user_id:playlist:%playlist_id Extra: Extra: Extra: Paquete: Clase: Objetivo:Activity ] 
	A35: Else 
	A36: AutoTools Dialog [ Configuración:Dialog Type: Ok
Text: No se encontraron canciones similares
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A37: Fin si (End if) 
	A38: Fin si (End if) 
	A39: Fin si (End if)
Como siempre, la tarea funciona y también tiene mucho por mejorar, pero hasta aquí llega mi conocimiento y paciencia.


Lo bueno es que, gracias a Willyweb, pude dominar un poco más las variables.

Saludos
Responder Con Cita
Los siguientes 2 usuarios han agradecido a leromaro su comentario:


  #2  
Viejo 20/07/16, 08:41:57
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Un buen ejemplo de cómo utilizar AutoWeb. Seguro que a más de uno se le ocurren nuevas ideas al ver tu trabajo.

¿Te importaría explicar, a grandes rasgos, el funcionamiento de la tarea y de dónde salen esas variables que utilizas? Creo que así será más fácil que te ayuden a mejorar/optimizar la tarea.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #3  
Viejo 20/07/16, 13:38:34
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
A ver Wilyweb, si no lo entiendes...


El perfil se activa cuando se modifica la variable del portapapeles %CLIP
A1 si %CLIP se corresponde con la estructura de un enlace de Spotify
A2 Abre un dialogo donde nos consulta si queremos crear la playlist con canciones similares
A4 y A5 copiamos la parte del link que nos interesa quedandonos solamente el id de la canción
A6 hace una consulta en Autoweb a la API de Spotify solicitando los datos de la canción
nos devuelve la variable %trackname, %trackartistnames() y %popularity
A7 guarda el nombre del tema en otra variable para en A31 colocar el nombre a la playlist
A8 con Autotools crea un dialogo de progreso de la tarea
A9 consulta con %trackname y %trackartistnames1, con Autoweb en la API de Last.fm canciones similares y se puede elegir la cantidad, nos devuelve una lista de canciones similares %%track_name() y %artist_name()
A10 verifica que tengamos la respuesta de la acción anterior o detiene la tarea
A14 bucle que ordena cada canción con su respectivo artista y lo guarda en %resultado

Lo siguiente es la única parte que no entendí del todo pero logré modificar la tarea original para que funcione.
A17 en este bucle hacemos la consulte mediante Autoweb a Spotify de cada uno de los elementos de array %resultado para obtener el uri y popularidad de cada uno. %items_uri() y %popularity(), luego guardandolo en %trackuri y %trackpopularity
Con el dato de popularidad la tarea original, realiza una consulta con Autospotify y elimina las canciones que tienen menos popularidad que la canción original, debido a que la tarea original tenía una acción A8 donde guardaba la popularidad del tema original - 15.
Tendríamos en este caso que eliminar los array de popularidad que sean menores a xxx, eliminar los mismos números del array de %trackuri y continuar. Me pareció que me complicaba y no lo hice.

A26 dialogo que nos dice las canciones encontradas
A28 Si obtenemos al menos una canción (con mi tarea se va a lograr siempre la cantidad inicial porque no descarta los de popularidad baja)
A29 pide el id de spotify y lo guarda en la variable %my_user_id
A30 dialogo que dice creando playlist
A31 crea con el id de usuario obtenido la playlist utilizando variable de A7
A32 agrega la lista de temas obtenida en %trackuri
A33 pregunta si queremos escuchar la playlist
A34 intente que abre spotify en la playlist (no pude encontrar uno que comience a sonar, el original lo hace con Autospotify)

Fin

Lo que veo que se puede mejorar mucho son los bucles A17 a A27, que es donde más tarda la tarea, quizás con javascript.

Gracias Willyweb, en este caso puntual, por explicarme detenidamente y para niños los arrays, algo pequeñito entendí.

Saludos
Responder Con Cita
Los siguientes 2 usuarios han agradecido a leromaro su comentario:
  #4  
Viejo 20/07/16, 13:54:59
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por leromaro Ver Mensaje
A ver Wilyweb, si no lo entiendes...
Eres un cachondo

Gracias por la explicación. Seguro que ahora es más fácil que alguien intente mejorar la tarea. Sobre lo de usar JavaScript para procesar los arrays, pues seguro que se ganaba tiempo, pero el intercambio de variables entre Tasker y JavaScript tiene la pequeña limitación de que no soporta los arrays, así que se tendría que inventar algo para solucionar ese problema. Antes de intentar andar por ese camino sería conveniente optimizar las acciones de esos bucles que comentas. Vamos a dar tiempo para que los compañeros estudien el tema y opinen.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 20/07/16, 19:15:45
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Después de realizar la tarea decenas de veces para ir armándola y terminarla y ver que funciona más o menos bien, digo: ahora voy a hacer una playlist de algo que me guste, resultado: un fracaso!

Las canciones obtenidas de todas las pruebas que hice son la mayoría covers o karaoke de la original (que si está en spotify), tengo que buscar si el error está en la búsqueda de Last.fm o en el loop que no pude controlar bien que manejaba y filtraba la popularidad de los temas.

Trabajo largo por delante.
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 21/07/16, 09:54:57
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por leromaro Ver Mensaje
Después de realizar la tarea decenas de veces para ir armándola y terminarla y ver que funciona más o menos bien, digo: ahora voy a hacer una playlist de algo que me guste, resultado: un fracaso! ...
Veamos si te puedo ayudar con mis comentarios...

Empiezas hablando de un perfil que no pones, y la tarea empieza con un IF (de A1 hasta A39) que te podrías ahorrar perfectamente si ese perfil tiene esta pinta...

Código:
Perfil: DetectaURLSpotify (777)
	Evento: Establecer variable [ Variable:%CLIP Valor: https://open.spotify.com/track/* User Variables Only:Apagado ]
Entrada: Spotify Modificado (141)
...
...
Si de todas formas quieres establecer ese control en la tarea lo puedes hacer con una única acción...

Código:
A1: Detener [ Con error:Apagado Tarea: ] Si (if) [ %CLIP !~ https://open.spotify.com/track/* ]
La forma de sacar el ID de la canción (A4 y A5) puede valer, aunque seguramente se podría hacer con una única acción usando una expresión regular ... ¿qué pinta tiene ese ID?

La consulta al API de Spotify (A6) para obtener los datos de la canción (%trackname, %trackartistnames() y %popularity) no tiene misterio. Muy curioso que el nombre del artista sea un array ¿...?

Tampoco tiene misterio la consulta al API de Last.fm (A9) para conseguir una lista de canciones similares (%track_name() y %artist_name()).

La comprobación de A10 también podría ser "Si (if) [ %track_name(#) = 0 ]". Haces eso mismo en A28 y creo que se entiende mejor.

Y aquí comienza la parte farragosa...

El propósito del bucle A14-A16 está claro por lo que me habías comentado, pero viendo el uso que haces de %resultado() creo que te podrías ahorrar ese array, el bucle que comienza en A17 y llega hasta A27, la variable %similarsongs, que no usas para nada, y el contador %array.

No entiendo la consulta de A21. Pasas al API de Spotify un par "canción,artista" y te devuelve los arrays %items_uri() y %popularity(). Parece que intentas buscar información sobre ese par "canción,artista" pero el resultado tiene pinta de ser una lista de canciones+popularidad que cuadran con los términos buscados ¿...?

En este punto no parece complicado filtrar los resultados que tengan menos popularidad que la canción inicial. Sólo tienes que recorrer el array %popularity() con un bucle como los que ya has hecho antes y añadir a la lista de canciones válidas (%trackuri) las del array %items_uri() que cumplan con tu criterio. Yo diría que A22, que evita repetir canciones en la lista, formaba parte de un bucle que hacía justo lo que te digo.

El resto no parece complicado: Comprobar si finalmente tienes canciones en la lista (A28). Obtener tu ID de usuario de Spotify (A29). Crear una lista de reproducción nueva (A31). Y añadir las canciones de %trackuri() a esa lista (A32).

Y para finalizar decidir si quieres escuchar la nueva lista (A33-A34). ¿Seguro que no existe un intent que pulse el PLAY o que lance la reproducción directamente?


¿Te he aclarado algo, o ha sido peor?
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #7  
Viejo 21/07/16, 14:02:29
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Hola Willyweb: gracias por todo. Cuando creí haber detectado por que no funcionaba...

Paso a explicar lo que hice y por que.

Antes no había exportado la original y puse el link porque me sale distinto y no se por qué.
Pero aquí la exporto:

Código:
[u'Spotify Original (108)\n\tA1: Si (if) [ %CLIP ~R https://open.spotify.com/track/ ]\n\tA2: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: 2 Choices\nChoice One: No\nChoice One Command: false\nChoice Two: Yes\nChoice Two Command: true\nText: Would you like to create a playlist with similar Songs?\nText Size: 20\nUse HTML: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA3: Si (if) [ %atcommand ~ true ]\n\tA4: Establecer variable [ Nombre:%url A:%CLIP Calcular:Apagado A\xf1adir:Apagado ] \n\tA5: Separar variable [ Nombre:%url Separador:https://open.spotify.com/track/ Eliminar base:Apagado ] \n\tA6: AutoSpotify Tracks [ Configuraci\xf3n:Track: spotify:track:%url2\nImage Size: Medium Cuenta atr\xe1s (segundos):40 ] \n\t<Edit these values to your liking!!>\n\tA7: Establecer variable [ Nombre:%popularity A:%astrackpopularity1 - 15 Calcular:Encendido A\xf1adir:Apagado ] \n\tA8: Establecer variable [ Nombre:%songname A:%astrackname1 Calcular:Apagado A\xf1adir:Apagado ] \n\tA9: Si (if) [ %astrackartistnames1 ~R ', u' ]\n\tA10: Separar variable [ Nombre:%astrackartistnames1 Separador:', u" Eliminar base:Apagado ] \n\tA11: Establecer variable [ Nombre:%astrackartistnames1 A:%astrackartistnames1(1) Calcular:Apagado A\xf1adir:Apagado ] \n\tA12: Fin si (End if) \n\tA13: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: Progress\nText: Get similar songs..\nText Size: 20\nUse HTML: false\nIndeterminate: true\nProgress Style: 0\nCurrent Progress: 0\nMax Progress: 100\nClose: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\t<Edit the values to your liking!!>\n\tA14: AutoWeb Web Service [ Configuraci\xf3n:API: Last.fm\nAPI Action: Get similiar songs\nTrack: %astrackname1\nArtist: %astrackartistnames1\nLimit: 30 Cuenta atr\xe1s (segundos):120 ] \n\tA15: Si (if) [ %track_name1 No ajust. ]\n\tA16: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: Ok\nText: No similar songs found:/\nText Size: 20\nUse HTML: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA17: Detener [ Con error:Apagado Tarea: ] \n\tA18: Fin si (End if) \n\tA19: For [ Variable:%similarsongs \xcdtems:%track_name() ] \n\tA20: Array Clear [ Nombre:%astrackuri ] \n\tA21: Array Clear [ Nombre:%astrackpopularity ] \n\tA22: Sumar a variable [ Nombre:%array Valor:1 M\xf3dulo (wrap around):0 ] \n\tA23: AutoSpotify Tracks [ Configuraci\xf3n:Track: %track_name(%array) %artist_name(%array)\nExplicit: Get All\nTrack Popularity: >%popularity\nImage Size: Medium Cuenta atr\xe1s (segundos):40 Continuar Tarea Tras Error:Encendido ] \n\tA24: Si (if) [ %astrackuri1 Ajuste & %trackuri() !~R %astrackuri1 & %trackuri() !~R spotify:track:%url2 ]\n\tA25: Array Push [ Nombre:%trackuri Posici\xf3n:1 Valor:%astrackuri1 Rellenar Espacios:Apagado ] \n\tA26: Array Push [ Nombre:%trackpopularity Posici\xf3n:1 Valor:%astrackpopularity1 Rellenar Espacios:Apagado ] \n\tA27: Fin si (End if) \n\tA28: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: Progress\nText: %trackuri(#) songs found!\nText Size: 20\nUse HTML: false\nIndeterminate: true\nProgress Style: 0\nCurrent Progress: 0\nMax Progress: 100\nClose: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA29: End For \n\tA30: Si (if) [ %trackuri(#) > 0 ]\n\tA31: AutoTools Arrays [ Configuraci\xf3n:Input Arrays: %trackpopularity()|%trackuri()|\nVertical Mode: false\nSeparator: |\nItem Separator: ,\nInput Is File: false\nNames: trackpopularity|trackuri\nSort Arrays: true\nInvert: true\nRandomize: false\nMerge Arrays: false\nMerged Array Name: atmergedarray\nUnique: false\nExact: false\nRegex: false\nCase Insensitive: false\nContains All: false\nClear For Name: false\nClear For All: false Cuenta atr\xe1s (segundos):60 ] \n\tA32: AutoWeb Web Service [ Configuraci\xf3n:API: Spotify\nAPI Action: My Account Info Cuenta atr\xe1s (segundos):120 ] \n\tA33: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: Progress\nText: Creating playlist..\nText Size: 20\nUse HTML: false\nIndeterminate: true\nProgress Style: 0\nCurrent Progress: 0\nMax Progress: 100\nClose: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA34: AutoWeb Web Service [ Configuraci\xf3n:API: Spotify\nAPI Action: Create playlist\nUser Id: %my_user_id\nName: Similar songs to %songname\nPublic: false Cuenta atr\xe1s (segundos):120 ] \n\tA35: AutoSpotify Playlists [ Configuraci\xf3n:Playlist: %uri\nCreate If Doesn't Exist: true\nAdd Songs: %trackuri()\nImage Size: Medium Cuenta atr\xe1s (segundos):20 ] \n\tA36: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: 2 Choices\nChoice One: No\nChoice One Command: false\nChoice Two: Yes\nChoice Two Command: true\nText: Playlist created! Wanna listen to it now? :) \nText Size: 20\nUse HTML: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA37: AutoSpotify Play Media [ Configuraci\xf3n:Media To Play: %uri\nLimit: 100\nPlay In Spotify: true\nImage Size: Medium Cuenta atr\xe1s (segundos):40 ] Si (if) [ %atcommand ~ true ]\n\tA38: Else \n\tA39: AutoTools Dialog [ Configuraci\xf3n:Dialog Type: Ok\nText: No songs found:/\nText Size: 20\nUse HTML: false\nDim Background: true\nCancelable: true\nTurn Screen On: true Cuenta atr\xe1s (segundos):60 ] \n\tA40: Fin si (End if) \n\tA41: Fin si (End if) \n\tA42: Fin si (End if) \n"]

Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Empiezas hablando de un perfil que no pones, y la tarea empieza con un IF (de A1 hasta A39) que te podrías ahorrar perfectamente si ese perfil tiene esta pinta...
Respecto a los primeros puntos tienes toda la razón, al copiar un perfil que me había puesto como reto poder hacerlo sin Autospotify, utilizando Autoweb con la API de Spotify, no fuí lo suficientemente crítico con lo que ya funcionaba y como funcionaba.

Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Muy curioso que el nombre del artista sea un array ¿...?
A6 no se porque pero lo devuelve como array aunque uno le esté dando el id de en teoría una única canción.

Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Muy curioso que el nombre del artista sea un array ¿...?
Y para mi más...
esta es la parte en la que logré entender algo de todo lo que me explicaste y partes en las que no modifiqué nada porque así funcionaba.
Desde A17 a A27 lo dejé como estaba porque no entendí el funcionamiento de array clear y arraypush (que quieres soy Odontólogo, Tasker ya no puedo decir que es un hobby, es mi obsesión (palabras de mi esposa))

Tomaré tus nuevas sugerencias para que la tarea sea más práctica y trataré de ver si puedo realizar la limpieza de popularidad, que aquí está el inconveniente de la playlist creada con canciones malas. Creo que en el perfil original en A23 con AUtospotify filtra y busca las canciones que se correspondan al par %track_name() %artist_name() obtenido en Last.fm por la popularidad

Ahora si, no me apuren que me tomará unos días...

Gracias

Saludos
Responder Con Cita
Gracias de parte de:
  #8  
Viejo 21/07/16, 15:58:03
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Bueno Willyweb, pude seguir casi todas tus indicaciones.

Modifiqué el evento para que se inicie cuando se copia un link de spotify, sacando el If de A1 viejo, eliminé el bucle de A14-16 viejo, eliminando %resultado y lo incluí en el bucle de búsqueda siguiente. Eliminé la variable %array y %similarsongs, utilizando %num como me habías explicado.


Así queda por ahora


Código:
Perfil: Similar Songs Spotify (109)
	Evento: Establecer variable [ Variable:%CLIP Valor:https://open.spotify.com/track/* User Variables Only:Apagado ]
Entrada: Spotify Modificado (149)
	A1: AutoTools Dialog [ Configuración:Dialog Type: 2 Choices
Choice One: No
Choice One Command: false
Choice Two: Yes
Choice Two Command: true
Text: Crear una playlist con canciones similares?
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A2: Si (if) [ %atcommand ~ true ]
	A3: Establecer variable [ Nombre:%url A:%CLIP Calcular:Apagado Añadir:Apagado ] 
	A4: Separar variable [ Nombre:%url Separador:https://open.spotify.com/track/ Eliminar base:Apagado ] 
	A5: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Get a track
Id: %url2 Cuenta atrás (segundos):120 ] 
	A6: Establecer variable [ Nombre:%songname A:%trackname Calcular:Apagado Añadir:Apagado ] 
	A7: Establecer variable [ Nombre:%popfiltro A:%popularity - 35 Calcular:Encendido Añadir:Apagado ] 
	A8: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: Obteniendo canciones...
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A9: AutoWeb Web Service [ Configuración:API: Last.fm
API Action: Get similiar songs
Track: %trackname
Artist: %trackartistnames()
Limit: 30 Cuenta atrás (segundos):120 ] 
	A10: Si (if) [ %track_name(#) = 0 ]
	A11: AutoTools Dialog [ Configuración:Dialog Type: Ok
Text: No se encontraron canciones
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A12: Detener [ Con error:Apagado Tarea: ] 
	A13: Fin si (End if) 
	A14: For [ Variable:%num Ítems:1:%track_name(#) ] 
	A15: Array Clear [ Nombre:%items_uri ] 
	A16: Array Clear [ Nombre:%popularity ] 
	A17: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Search tracks 
Q: %track_name(%num) %artist_name(%num)
Filter Popularity: %popfiltro Cuenta atrás (segundos):120 ] 
	A18: Si (if) [ %items_uri1 Ajuste & %trackuri() !~R %items_uri1 & %trackuri() !~R spotify:track:%url2 ]
	A19: Array Push [ Nombre:%trackuri Posición:1 Valor:%items_uri1 Rellenar Espacios:Apagado ] 
	A20: Array Push [ Nombre:%trackpopularity Posición:1 Valor:%popularity1 Rellenar Espacios:Apagado ] 
	A21: Fin si (End if) 
	A22: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: %trackuri(#) canciones encontradas!
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A23: End For 
	A24: Si (if) [ %trackuri(#) > 0 ]
	A25: AutoWeb Web Service [ Configuración:API: Spotify
API Action: My Account Info Cuenta atrás (segundos):120 ] 
	A26: AutoTools Dialog [ Configuración:Dialog Type: Progress
Text: Creando playlist.
Text Size: 20
Use HTML: false
Indeterminate: true
Progress Style: 0
Current Progress: 0
Max Progress: 100
Close: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A27: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Create playlist
User Id: %my_user_id
Name: canciones similares a %songname
Public: false Cuenta atrás (segundos):120 ] 
	A28: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Add Tracks to a Playlist
User Id: %my_user_id
Playlist Id: %playlist_id
Uris: %trackuri() Cuenta atrás (segundos):120 ] 
	A29: AutoTools Dialog [ Configuración:Dialog Type: 2 Choices
Choice One: No
Choice One Command: false
Choice Two: Yes
Choice Two Command: true
Text: Playlist creada! Escuchar ahora?
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A30: Enviar Intent [ Acción:android.intent.action.VIEW Categ.:Default Tipo Mime: Datos:spotify:user:%my_user_id:playlist:%playlist_id Extra: Extra: Extra: Paquete: Clase: Objetivo:Activity ] 
	A31: Else 
	A32: AutoTools Dialog [ Configuración:Dialog Type: Ok
Text: No se encontraron canciones similares
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ] 
	A33: Fin si (End if) 
	A34: Fin si (End if)




Lo nuevo que encontré es que se puede filtrar las consultas en Autoweb, pude utilizar la popularidad inicial, obtenida en A5, la copio a otra variable %popfiltro en A7 restando un margen que se puede modificar a gusto para calibrar lo que se obtiene, para en la búsqueda de Autoweb de la A17, así filtre los resultados para obtener canciones más populares. Mejorando el problema de obtener, covers, karaoke o instrumentales que eran las que obtenía mayormente, obteniendo playlist desastrosas.

En el bucle A14-23: obtengo con el par %track_name() %artist_name(), %trackuri filtrado por %popfiltro.

Me faltaría: A3-4 obtener el id con expresiones regulares (escucho ofertas)
y sobre todas las cosas entender bien el rulo que hace con los arrayclear y arraypush que si bien lo pude manejar el copiado con tu ayuda, no podría hacerlo solo de nuevo.

Está ya mucho más afinada y sobre todas las cosas, crea playlist más interesantes que la primer tarea.

Última edición por leromaro Día 22/07/16 a las 00:58:29
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 21/07/16, 20:20:48
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por leromaro Ver Mensaje
Bueno Willyweb, pude seguir casi todas tus indicaciones...
Me alegro de que te gustasen mis sugerencias.

Cita:
Originalmente Escrito por leromaro Ver Mensaje
Lo nuevo que encontré es que se puede filtrar las consultas en Autoweb...
Pues eso te ahorra buena parte del trabajo. Veo que en A7 guardas tu valor de popularidad personalizado en la variable %popfiltro, pero en A17 no has puesto el signo % en "Filter Popularity: >popfiltro" ... revisa eso por si no es correcto.

Cita:
Originalmente Escrito por leromaro Ver Mensaje
Me faltaría: A3-4 obtener el id con expresiones regulares (escucho ofertas)
Tienes un resumen de lo más importante sobre las RegExp aquí...

https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

Y puedes hacer experimentos aquí...

https://regex101.com/#python

La idea es crear una expresión que "saque" la parte del ID de la URL de una canción. Si las URLs que estás manejando son parecidas a las que se usan en la versión web del reproductor (es el que uso habitualmente) se parecerán a estas...

https://play.spotify.com/track/69uxyAqqPIsUyTO8txoP2M
https://play.spotify.com/track/5tf1VVWniHgryyumXyJM7w
https://play.spotify.com/track/02QVxWave0pTc7P3UjDaVo

La parte del ID son los últimos 22 caracteres, y en el "idioma" RegExp eso se dice así...

\w{22}$

No te costará entender lo que hace esa expresión si revisas el primer enlace que te he dado. Pero, no te canses que no merece la pena.

Al ir a poner eso en Tasker me he dado cuenta de que no es posible usar variables globales del sistema directamente en la acción de "Buscar y Reemplazar". Una pequeña faena.

De todas formas, como no me gusta esa técnica de "Separar variable", creo eso se podrían escribir de una forma más "lógica"...

Código:
A3: Establecer variable [ Nombre:%trackid A:%CLIP Calcular:Apagado Añadir:Apagado ] 
A4: Buscar y Reemplazar Contenido de Variable [ Variable:%trackid Buscar:https://play.spotify.com/track/ Reemplazar Coincidencias:Encendido Reemplazar Con: ]
Si lo haces así recuerda revisar la consulta de A5 para poner %trackid en vez de %url2.

Lo que hacen esas dos acciones es guardar %CLIP (la URL completa) en %trackid y luego eliminar de %trackid la parte que sobra de la URL. El resultado es el mismo, pero me gusta más ... cada uno tiene sus manías.

Cita:
Originalmente Escrito por leromaro Ver Mensaje
y sobre todas las cosas entender bien el rulo que hace con los arrayclear y arraypush
Ambas acciones están explicadas en la ayuda de Tasker y en su documentación...

http://tasker.dinglisch.net/userguide/en/variables.html (mira al final)

La acción "Array Clear" borra todos los elementos de un array. En este caso se usa para garantizar que los arrays %items_uri y %popularity no contienen datos de la vuelta anterior del bucle A14-A23 antes de hacer la consulta de A17.

La acción "Array Push" añade un elemento a un array en una posición concreta.

Por cierto, puesto que has solucionado el tema de filtrar la popularidad directamente en la consulta creo que te sobran las acciones A16, A20 y cualquier referencia a esos arrays y variables.

Última edición por WillyWeb Día 22/07/16 a las 08:37:35
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #10  
Viejo 22/07/16, 00:58:03
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Pues eso te ahorra buena parte del trabajo. Veo que en A7 guardas tu valor de popularidad personalizado en la variable %popfiltro, pero en A17 no has puesto el signo % en "Filter Popularity: >popfiltro" ... revisa eso por si no es correcto.
Es que lo modifiqué después de copiado en el foro porque había hecho pruebas y me había quedado otro valor. Ahora edito para que quede bien
Responder Con Cita
  #11  
Viejo 22/07/16, 13:46:08
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Lo que quiero ahora es que comience a reproducir en modo aleatorio, estoy intentando hacerlo mediante un intent, pero creo que voy a utilizar Autoinput

Lo que logré hasta ahora es que si agregamos :play luego de el id de la playlist comenzará la reproducción
Código:
A30: Enviar Intent [ Acción:android.intent.action.VIEW Categ.:Default Tipo Mime: Datos:spotify:user:%my_user_id:playlist:%playlist_id:play Extra: Extra: Extra: Paquete: Clase: Objetivo:Activity ]
Con Autoinput agrego luego del intent que abre Spotify en la playlist una pausa de 3 seg y luego Autoinput action: click y en texto: aleatoria
Responder Con Cita
  #12  
Viejo 22/07/16, 14:26:46
Avatar de leromaro
leromaro leromaro no está en línea
Miembro del foro
Mensajes: 245
 
Fecha de registro: ago 2014
Localización: Chascomús, Argentina
Mensajes: 245
Modelo de smartphone: Xiaomi Mi A3
Versión de ROM: Android 11
Tu operador: Claro
Mencionado: 3 comentarios
Tagged: 0 hilos
Willyweb: has probado el perfil? puede ser que con la modificación del evento del perfil no funcione

Cita:
Perfil: DetectaURLSpotify (777)
Evento: Establecer variable [ Variable:%CLIP Valor: https://open.spotify.com/track/* User Variables Only:Apagado ]
Entrada: Spotify Modificado (141)
E inicie el perfil siempre que se modifique %CLIP?
A mi me pasa eso, copi cualquier cosa al portapapeles y me salta el perfil.
Responder Con Cita
  #13  
Viejo 22/07/16, 16:31:31
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por leromaro Ver Mensaje
...puede ser que con la modificación del evento del perfil inicie el perfil siempre que se modifique %CLIP?
Pues sí, puede ser

Aunque tengo un par de perfiles de este tipo, que ya me hicieron pensar un rato en su momento, he cometido el mismo error de nuevo.

El contexto "Evento: Establecer variable" salta cuando la comparación entre "Variable:" y "Valor:" es positiva, y esa comparación se hace "al estilo Tasker". Ese "estilo" considera la barra / como un separador de opciones, lo que hace que esa cadena de caracteres (para nosotros una URL)...

https://open.spotify.com/track/*

...sea interpretada por Tasker como...

Que %CLIP sea igual a "https:", "nada", "open.spotify.com", "track" o "cualquier cosa"

Por eso salta el perfil cada vez que se modifica %CLIP

Si cambias la URL inicial por esto otro ...

https*open.spotify.com*track*

..funcionará correctamente para tus propósitos.

Perdona
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Otro software para Android > Tasker


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 18:56:48 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007