Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 11 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Mié Dic 07, 2011 3:33 pm 
Arriba  
Hola!
Aquí estoy peleando con comando varios de BASH para tratar de conseguirlo y nada. Expongo el tema:
Si yo ejecuto el comando
Código:
qdbus org.kde.amarok /Player GetMetadata

en consola este me devuelve los metadatos del tema en reproduccion de Amarok, entre ellos las letras de las canciones que ocuparían desde la etiqueta lyrics: hasta el dato mtime:xxyy
He tratado de hacerlo de varias maneras pero no he sido capaz de extraer el texto que quiero. No posteo lo que tengo, porque ahora mismo no tengo nada concreto, es para un tema de superkaramba. Si quereis os pongo lo que tengo hecho en ese tema:

Código:
######################################
#                                #
#   By Victorhck                                              #
#incluir el archivo portada_amarok.sh                  #
#                               #     
######################################

karamba x=0 y=0 w=400 h=400 LOCKED=false
image x=0 y=0 path=img/fondo.png
defaultfont font="chollawide" color=255,255,255

image x=93 y=37 path="img/nocover.png" interval=9000
image x=83 y=29 sensor=program program="sh /home/victorhck/.kde4/share/apps/superkaramba/themes/ASMA/portada_amarok.sh" interval=2000
image x=77 y=27 path="img/case2.png" interval=9000

clickarea x=77 y=27 w=145 h=145 onclick="amarok"
text x=150 y=180 sensor=program program="artist=`qdbus org.kde.amarok /Player GetMetadata | grep -m1 artist: | cut -c 13- | sed -e 's/.*/\U&/'`;[ `echo $artist | wc -c` -lt 60 ] && echo $artist || echo `echo $artist | cut -c -30`..." fontsize=16 align="center" interval=5000
text x=150 y=210 sensor=program program="title=`qdbus org.kde.amarok /Player GetMetadata | grep -m1 title: | cut -c 7- | sed -e 's/^[ \t]*//'`;[ `echo $title |  wc -c` -lt 60 ] && echo $title || echo `echo $title | cut -c -35`..." fontsize=16 align="center" interval=5000
text x=150 y=238 sensor=program program="album=`qdbus org.kde.amarok /Player GetMetadata | grep -m1 album: | cut -c 7- | sed -e 's/^[ \t]*//'`;[ `echo $album |  wc -c` -lt 60 ] && echo $album || echo `echo $album | cut -c -40`..." fontsize=16 align="center" interval=5000
text x=153 y=260 sensor=program program="milTime=`qdbus org.kde.amarok /Player PositionGet`;[ `expr length $((milTime/1000 % 60))` -lt 2 ] && echo $((milTime/60000)):0$((milTime/1000 % 60)) || echo $((milTime/60000)):$((milTime/1000 %60))" fontsize=14 align="center" interval=1000

Gracias por las sugerencias.
Saludos...

_________________
Registered user: #528067
openSUSE 12.1 KDE
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1)
Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo.
Algunos de nosotros simplemente hemos ido más lejos.

Richard Dawkins
-- Visita mi blog (victorhckinthefreeworld) --


Última edición por victorhck el Jue Dic 08, 2011 3:34 am, editado 1 vez en total
 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Dic 07, 2011 3:40 pm 
Arriba  
http://tldp.org/LDP/abs/html/string-manipulation.html

Seguramente encuentres algo para solucionar el problema en ese enlace.

Tampoco comentas qué es lo que quieres extraer, ni de dónde, con lo que es difícil ser más concreto.

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mié Dic 07, 2011 3:48 pm 
Arriba  
busca info sobre grep y/o awk. (ambos valen para eso.)

:)

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Mié Dic 07, 2011 4:03 pm 
Arriba  
Quiero extraer todo el texto de la letras de la canción.
Lo que sale al dar este comando:
Código:
qdbus org.kde.amarok /Player GetMetadata

Es esto:
Código:
victorhck@openSUSE:~/Scripts> qdbus org.kde.amarok /Player GetMetadata
album: The Resistance
albumartist: Muse
artist: Muse
arturl: file:///home/victorhck/.kde4/share/apps/amarok/albumcovers/cache/135@67f757b94d563bf7c306cbba5022ff97
audio-bitrate: 112
audio-samplerate: 44100
comment:
genre: Pop
location: file:///home/victorhck/M%C3%BAsica/Muse/Muse%20-%2004%20-%20United%20States%20of%20Eurasia%20%252F%20Collateral%20Damage.ogg
lyrics:
You and me are the same
We don't know or care who's to blame
But we know that whoever holds the reins
Nothing will change, our cause has gone insane

And these wars, they can't be won
And these wars, they can't be won
And do you want them, to go on and on and on?
Why split these states?
When there can be only one!

And must we do as we're told?
Must we do as we're told?

You and me fall in line
To be punished for unproven crimes
And we know that there's no one we can trust
Our ancient heroes, they are turning to dust

And these wars; they can't be won
Does anyone know or care how they began?
They just promise to go on and on and on
But soon we will see
There can be only one!

United States
United States of...

Eura-sia! -sia! -sia! -sia!
Eura-sia! -sia! -sia! -sia!
Eura-sia! -sia! -sia! -sia!


mtime: 347000
rating: 0
time: 347
title: United States of Eurasia / Collateral Damage
tracknumber: 4
year: 2009

Sólo quiero el apartado de lyrics:
Gracias por las pistas, seguiré mirando, y esperando comentarios.
Saludos...

_________________
Registered user: #528067
openSUSE 12.1 KDE
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1)
Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo.
Algunos de nosotros simplemente hemos ido más lejos.

Richard Dawkins
-- Visita mi blog (victorhckinthefreeworld) --

 Perfil WWW  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Mié Dic 07, 2011 9:15 pm 
Arriba  
Suponiendo que el texto tiene siempre el mismo formato (el que muestras acá), bastaría con armar un archivo patron.txt con las líneas que quieres descartar:

Código:
album:
albumartist:
artist:
arturl:
audio-bitrate:
audio-samplerate:
comment:
genre:
location:
lyrics:
mtime:
rating:
time:
title:
tracknumber:
year:


Luego, inviertes el patrón con egrep:

egrep -f patron.txt -v archivometadata

Por supuesto, "archivometadata" lo obtienes con qdbus y una redirección, ya sea indirecta: comando > archivometadata && egrep etc.. o directa. En este último caso, no sé cuál será el método adecuado, qdbus etc |egrep etc o egrep etc < qdbus etc.

Incluso, en este caso en particular, la característica que sobresale es que todas las líneas que quieres descartar tienen dos puntos. El comando tranquilamente podría ser egrep : -v archivometadata. Claro que si se diera el caso de que la letra de la canción tuviera dos puntos en algún lugar, no te mostraría esa línea.

 Perfil  

Desconectado
Ganador CSEL 2011
Ganador CSEL 2011
Avatar de Usuario

Registrado: Dom Dic 12, 2010 10:07 am
Mensajes: 313

Nota Publicado: Mié Dic 07, 2011 11:15 pm 
Arriba  
Lo podrías hacer en perl:
Código:
#!/usr/bin/perl

open ARCHIVO,("$ARGV[0]");
my @texto=<ARCHIVO>;
close ARCHIVO;

for ($a=0;$a<=$#texto;$a++)
        {
        if ($texto[$a]=~/^mtime:/){$muestra=0}
        if ($muestra==1){print $texto[$a]}
        if ($texto[$a]=~/^lyrics:/){$muestra=1}
        }


El script recibiría como argumento el archivo desde donde quieres extraer el bloque. Esta un poco sobredimensionado pensando en que con solo cambiar mtime y lyrics por otro texto puedas extraer bloques de otro tipo de archivos.

Salu2

 Perfil Email WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Jue Dic 08, 2011 3:35 am 
Arriba  
Muchas gracias por leer el post y tomaros la molestia de aportar !! =D>
Me sigue sorprendiendo la potencia de algo tan (en aparencia) simple como es BASH.
Al final leyendo y probando lo conseguí.
Tomé buena cuenta de lo que dicen en este enlace, con varios ejemplos explicados, de tooooooooda la cantidad de argumentos que se le pueden pasar a GREP para aumentar su potencia: http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/
Al final mi script queda así:
Código:
#!/bin/bash

qdbus org.kde.amarok /Player GetMetadata > /tmp/letras.txt

lineas=$(grep -n "mtime" /tmp/letras.txt | cut -d ":" -f 1)
echo "linea donde está mtime $lineas"

fin=$(expr $lineas - 12)
echo "numero de lineas hasta fin letra $fin"

grep -A$fin "lyrics" /tmp/letras.txt > /tmp/let.txt

- Paso los metadatos a un archivo (letras.txt)
- Con grep -n "mtime" me devuelve la línea donde se encuentra ese dato, que sería la línea final deonde acaba la letra. De todo lo que nos devuelve el comando, con cut cogemos la primera parte que es el número de línea.
- Ya que siempre tienen la estructura fija los metadatos, le restamos las 12 primeras líneas.
- Con el comando grep -An "lyrics" nos muestra a partir de la línea donde encontramos la cadena (lyrics en este ejemplo) el número de líneas siguientes que le indiquemos con el número n, y lo pasamos a un archivo de texto. Et voilà ! No sé si será muy elegante pero me sirve.
Espero que sea útil a alguien más (o a mí mismo en un futuro... :wink: )

Ahora quiero que muestre ese texto en una ventana un poco elegante al hacer click con el ratón en una zona, porque mostrarla con un editor tipo Kwrite no queda muy estético, pero eso ya es otro tema fuera de este post.

Lo dicho reiterar los agradecimientos por los consejos, y las pistas que habéis dado!! =D>

PD: Por esta vez me he librado de una bronca de neurus, uffffffff menos mal !!! (es broma :wink: )
Saludos...

_________________
Registered user: #528067
openSUSE 12.1 KDE
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1)
Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo.
Algunos de nosotros simplemente hemos ido más lejos.

Richard Dawkins
-- Visita mi blog (victorhckinthefreeworld) --

 Perfil WWW  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Jue Dic 08, 2011 5:00 am 
Arriba  
victorhck escribió:
Ahora quiero que muestre ese texto en una ventana un poco elegante al hacer click con el ratón en una zona, porque mostrarla con un editor tipo Kwrite no queda muy estético, pero eso ya es otro tema fuera de este post.


sigue siendo programacion en bash... o algo por el estilo.

busca info sobre zenity, xdialog, o similares. :)

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Jue Dic 08, 2011 6:26 am 
Arriba  
A falta de otra cosa mejor que sigo mirando he usado esto:

kdialog --title "letra canción" --textbox /tmp/let.txt 400 400

no está mal, quiero quitar la decoración de la ventana, pero miraré algo de lo que me comentas

AÑADO:

Pongo una captura de cómo ha quedado la cosa. Al hacer click en la carátula del album se despliega la ventana lateral con la letra de la canción.
Saludos...

Imagen

_________________
Registered user: #528067
openSUSE 12.1 KDE
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1)
Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo.
Algunos de nosotros simplemente hemos ido más lejos.

Richard Dawkins
-- Visita mi blog (victorhckinthefreeworld) --

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Jue Dic 08, 2011 8:52 am 
Arriba  
victorhck escribió:
A falta de otra cosa mejor que sigo mirando he usado esto:

kdialog --title "letra canción" --textbox /tmp/let.txt 400 400

no está mal, quiero quitar la decoración de la ventana, pero miraré algo de lo que me comentas

AÑADO:

Pongo una captura de cómo ha quedado la cosa. Al hacer click en la carátula del album se despliega la ventana lateral con la letra de la canción.
Saludos...

Imagen


=D> =D> =D> =D> =D>

Buen trabajo team espaciolinux!!!! Odio hacer spam, pero les recuerdo que hay un concurso al que todos están invitados.

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Vie Dic 09, 2011 4:10 am 
Arriba  
echale un ojo a esto:
http://man-linux.comli.com/?p=19

si, muchas cosas han cambiado desde entonces, pero lo cierto es que la ultima vez que me meti con kde, se podia hacer, si no igual, de forma MUY parecida. :wink:

_________________
#446716

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 11 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO