IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> commande SED pour récupérer les paroles sur LyricWiki
Options
m00n
posté 19 Apr 2017, 11:56
Message #1


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 306
Inscrit : 2 Jun 2006
Membre no 62 332



Bonjour,

Puisque maintenant je suis devenu un pro d'Applescript ( cool.gif voir mon autre post), je cherche à récupérer les paroles de chanson sur lyricWiki. J'ai pour ce faire une commande qui ne fonctionne pas : combinaison de curl, grep et de sed :

Code
set lesParoles to (do shell script "curl " & quoted form of lyricWikiPageURL & "|grep \"'lyricbox'\"|sed -e \"s/<div class='.*lyricbox' >//g\"|sed -e's/<br \\/>/" & (ASCII character 13) & "/g'")


Les paroles se trouvent bien dans une div dont la class est lyricbox. lyricWikiPageURL est la variable qui contient l'url de la page avec les paroles.
Mais la variable lesParoles reste désespérément vide quoi que je fasse.

Est-ce qu'un pro des commandes UNIX pourrait m'aider ?

Merci d'avance.

m00n


--------------------
MacBook Pro (15-inch, Late 2016), 2,9 GHz Intel Core i7, 16 Go 2133 MHz LPDDR3 Sierra
Go to the top of the page
 
+Quote Post
teddy7545
posté 21 Apr 2017, 02:55
Message #2


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 738
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Es tu certain de n'avoir rien dans la variable issue de ton code ?
En utilisant ton code dans l'éditeur Applescript et après avoir déclaré la variable lyricWikiPageURL par une adresse valide, j'obtiens un résultat qui présente certes plusieurs problèmes mais qui n'est pas vide.

J'ai en effet noté plusieurs erreurs dans la partie shell script de ta commande que j'ai corrigé ci-dessous:

A noter que le résultat n'est pas directement lisible en fichier texte.
En effet dans la variable retournée, chaque caractère est présenté en code HTML de la forme :
Citation
&#<code décimal>;

Le résultat doit donc être soit lu avec un navigateur (qui procède automatiquement à son décodage) soit traité et correctement décodé pour devenir un texte lisible.
Ne sachant pas comment tu souhaites utiliser cette variable je ne me suis pas attardé sur la partie décodage (peut être d'ailleurs cela fait t'il déjà parti de la suite de ton code que tu ne dévoile pas).

J'ai pris comme source un exemple de page :
Code
"http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer"

pour la commande shell corrigée cela donne ça:
Code
curl "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer" | grep "'lyricbox'" | sed -e "s/<div class='lyricbox'>//g" | sed -e "s/<div class='lyricsbreak'><\/div>//g" | sed -e 's/<br \/>/@/g' | tr '@' $'\x0A'

Une fois transposée dans applescript cela donne cela:
Code
set lyricWikiPageURL to "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer"

set lesParoles to (do shell script "curl " & quoted form of lyricWikiPageURL & " | grep \"'lyricbox'\" | sed -e \"s/<div class='lyricbox'>//g\" | sed -e \"s/<div class='lyricsbreak'><\\/div>//g\" | sed -e 's/<br \\/>/@/g' | tr '@' $'\\x0A'")

En revenant sur le Shell et en imaginant que tu souhaites lire les données en html avec ton navigateur, je propose cette commande modifiée :
J'ai ici enlevé la suppression des balises <br/> du code (qui participent à la mise en page).
Le résultat sera enregistré sur ton bureau, dans un fichier lyrics_wikia_test.html, puis directement ouvert par ton navigateur par défaut (chez moi avec Safari le texte apparait alors en clair)
Code
curl "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer" | grep "'lyricbox'" | sed -e "s/<div class='lyricbox'>//g" | sed -e "s/<div class='lyricsbreak'><\/div>//g" > ~/Desktop/lyrics_wikia_test.html; open ~/Desktop/lyrics_wikia_test.html

J'espère que ça pourra t'aider.
Bon Courage


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post
m00n
posté 22 Apr 2017, 10:38
Message #3


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 306
Inscrit : 2 Jun 2006
Membre no 62 332



Alors là, chapeau bas. thumb.gif Quelle démonstration, quelle clarté !

Et, heu ... juste une chose : Céline Dion ? blink.gif Est-ce bien raisonnable ? rotfl.gif


--------------------
MacBook Pro (15-inch, Late 2016), 2,9 GHz Intel Core i7, 16 Go 2133 MHz LPDDR3 Sierra
Go to the top of the page
 
+Quote Post
teddy7545
posté 22 Apr 2017, 12:16
Message #4


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 738
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Citation
juste une chose : Céline Dion ? blink.gif Est-ce bien raisonnable ? rotfl.gif

Pas que je sois spécialement fan tongue.gif , mais j'ai cherché francophone et pas trouvé mieux wink.gif (faut dire que la recherche par artiste n'est pas super aisée sur ce site).

Quelle méthode vas tu finalement utiliser, la méthode html avec ton navigateur ou alors le txt avec un décodage perso ?

As tu pu adapter la commande à ton programme ?

Ce message a été modifié par teddy7545 - 22 Apr 2017, 12:16.


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post
m00n
posté 22 Apr 2017, 13:06
Message #5


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 306
Inscrit : 2 Jun 2006
Membre no 62 332



Le but étant de me faire une application pour rechercher et enregistrer automatiquement les paroles de mes morceaux dans iTunes, je vais essayer de décoder le résultat à l'aide d'une méthode perso. Mais c'est pas gagné, je ne sais pas encore comment procéder. Je me renseigne sur le net d'abord. Si tu as une idée, n'hésite pas, hein. tongue.gif


--------------------
MacBook Pro (15-inch, Late 2016), 2,9 GHz Intel Core i7, 16 Go 2133 MHz LPDDR3 Sierra
Go to the top of the page
 
+Quote Post
teddy7545
posté 22 Apr 2017, 13:35
Message #6


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 738
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



On trouve différentes solutions sur le net mais il faut souvent installer un package.
A défaut d'installation spécifique, tu peux procéder comme ça par exemple : tongue.gif

Code
php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);'

Ce qui donne la commande shell complète comme ceci
Code
curl "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer" | grep "'lyricbox'" | sed -e "s/<div class='lyricbox'>//g" | sed -e "s/<div class='lyricsbreak'><\/div>//g" | sed -e 's/<br \/>/@/g' | tr '@' $'\x0A' | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);'

Ou encore comme cela si tu souhaites enregistrer le résultat dans un fichier texte (et l'ouvrir directement)
Code
curl "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer" | grep "'lyricbox'" | sed -e "s/<div class='lyricbox'>//g" | sed -e "s/<div class='lyricsbreak'><\/div>//g" | sed -e 's/<br \/>/@/g' | tr '@' $'\x0A' | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);' > ~/Desktop/Lyrics_test1.txt; open ~/Desktop/Lyrics_test1.txt


Ce message a été modifié par teddy7545 - 22 Apr 2017, 14:02.


--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post
m00n
posté 22 Apr 2017, 13:46
Message #7


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 306
Inscrit : 2 Jun 2006
Membre no 62 332



Citation (teddy7545 @ 22 Apr 2017, 14:35) *
tu peux procéder comme ça par exemple : tongue.gif


Ah la vache ! Mais où tu vas chercher tout ça ? laugh.gif Eh bien je crois bien que mon problème est résolu.

Merci, merci merci mille fois.


--------------------
MacBook Pro (15-inch, Late 2016), 2,9 GHz Intel Core i7, 16 Go 2133 MHz LPDDR3 Sierra
Go to the top of the page
 
+Quote Post
teddy7545
posté 22 Apr 2017, 14:08
Message #8


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 738
Inscrit : 4 Apr 2004
Lieu : Lorraine - 54
Membre no 17 184



Je ne suis pas magicien ... mais j'aime beaucoup le code en général y compris les commandes shell ...
Je prend beaucoup de notes à chaque fois que je trouve une solution intéressante.
Ca peut toujours servir pour moi ou pour répondre aux questions sur macbidouille. cool.gif
Pour le reste Google est mon ami smile.gif
J'avais déjà commencé à chercher après ma réponse partielle d'hier ... tongue.gif

Pour finir, si tu souhaites remettre cette solution dans ton applescript ça donne :
Code
set lyricWikiPageURL to "http://lyrics.wikia.com/wiki/Céline_Dion:S%27il_Suffisait_D%27aimer"

set lesParoles to (do shell script "curl " & quoted form of lyricWikiPageURL & " | grep \"'lyricbox'\" | sed -e \"s/<div class='lyricbox'>//g\" | sed -e \"s/<div class='lyricsbreak'><\\/div>//g\" | sed -e 's/<br \\/>/@/g' | tr '@' $'\\x0A' | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);'")

Bonne continuation



--------------------
MP Intel Dual Xéon 3 GHz - MacOSX 10.10.3 - ATI Radeon HD 5770 - ATTO UL5D - Apple Cinema HD Display 23 pouces
MBP 15' 2017 - MBP 13' mid 2009 - iMac 24' 8,1 2,8GHz - MP G4 MDD Bi 1,25 GHz - MP G4 Quicksylver 933MHz
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 16th January 2018 - 08:52