PDA

Ver la Versión Completa : Crear una lista de reproducción en Spotify con canciones similares


leromaro
20/07/16, 03:11:09
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?resources/discover-similar-spotify-songs.107/




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

WillyWeb
20/07/16, 08:41:57
Un buen ejemplo de cómo utilizar AutoWeb. Seguro que a más de uno se le ocurren nuevas ideas al ver tu trabajo. :silbando:

¿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.

leromaro
20/07/16, 13:38:34
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

WillyWeb
20/07/16, 13:54:59
A ver Wilyweb, si no lo entiendes... ;-)

Eres un cachondo :risitas::risitas::risitas:

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. :silbando:

leromaro
20/07/16, 19:15:45
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.

WillyWeb
21/07/16, 09:54:57
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... :rolleyes:

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...

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...

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? :loco:

leromaro
21/07/16, 14:02:29
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:

[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"]



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.

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.

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

leromaro
21/07/16, 15:58:03
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


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.:D

WillyWeb
21/07/16, 20:20:48
Bueno Willyweb, pude seguir casi todas tus indicaciones...

Me alegro de que te gustasen mis sugerencias. :D

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.

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. :rolleyes:

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"...

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. :sisi1:

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.

leromaro
22/07/16, 00:58:03
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

leromaro
22/07/16, 13:46:08
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
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

leromaro
22/07/16, 14:26:46
Willyweb: has probado el perfil? puede ser que con la modificación del evento del perfil no funcione

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.

WillyWeb
22/07/16, 16:31:31
...puede ser que con la modificación del evento del perfil inicie el perfil siempre que se modifique %CLIP?

Pues sí, puede ser :oh:

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" :oh:

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

Si cambias la URL inicial por esto otro ...

https*open.spotify.com*track*

..funcionará correctamente para tus propósitos.

Perdona :loco: