Aide pour un script de récupération fichier sur Frovo.com

Résolu/Fermé
Yoannjap Messages postés 16 Date d'inscription jeudi 22 septembre 2011 Statut Membre Dernière intervention 1 juillet 2015 - 24 juin 2015 à 14:04
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 2 juil. 2015 à 17:09
Bonjour chers amis !

Voici le plan de ma demande d'aide :rolleyes : :
1. Ce qui m'amène à vous demander de l'aide ;
2. Ce que je souhaiterai pouvoir faire ;
3. Traduction en français de ce que je voudrais que le script exécute ;
4. Ce que j'ai déjà tenté et là où je demande de l'AIDE !

------------------------------------------------------------------


Là je vais demander une grande aide et effort communautaire de votre part. Déjà par la lecture de ma requête. Non altruistes s'abstenir?! (mais être ici réduit déjà les risques de rencontrer des non altruistes :D)
Avant toute chose, je suis ouvert à toute critique, demande de précison, etc.


1. CE QUI M'AMÈNE À VOUS DEMANDER DE L'AIDE
Je suis développeur et créateur d'un deck open source (https://ankiweb.net/shared/info/2428949188 pour l'apprentissage de l'Anglais-Français thématique</url>. Depuis cinq ans, j'y passe un temps monstrueux et ce bénévolement. Alors comme ce travail s'améliore depuis des années, je ne pouvais pas faire autrement que d'en faire profiter les gens :D, gratuitement et librement.

Dans ce deck, je sonorise les mots et expressions à apprendre par des enregistrements de prononciation du mot. En 2014, j'ouvrais donc un topic (https://forum.ubuntu-fr.org/viewtopic.php?id=1530261 pour demander de l'aide sur la création d'un script pour récupérer en un clin d'oeil les fichiers audio d'un site de dictionnaire anglophone connu</url>.
Et là, Nesthib, un gars passant sur ce forum, m'a lancé une pépite d'or et m'a aidé de la manière la plus altruiste (et productive?!) qui soit. Grâce à lui, j'ai pu avancer beaucoup plus vite dans mon propre projet bénévole. Et grâce à lui est née l'envie d'en apprendre bien plus sur le «?langage bash?».

Toutefois, le PROBLÈME est le suivant : aujourd'hui, dans l'avancement de mon travail, je ne peux plus me permettre d'utiliser les fichiers audio de ce site. J'ai appelé cette semaine leur service Rights and Permissions (en anglais, (sic.) :o) et leur ai demandé s'il y avait un moyen d'utiliser, dans le cadre d'un projet open source, libre et gratuit, à l'objectif d'apprentissage, leurs fichiers audio. Mon interlocuteur m'a cordialement (sans ironie) répondu que non, que la politique de la boîte empêchait cela. Grooooooooos Bad :(

2. CE QUE JE SOUHAITERAI POUVOIR FAIRE
« Dans la vie, les problèmes qui paraissent les plus insurmontables sont souvent ceux qui donnent aux fous le plus envie de les surmonter. Mais les fous ont beau être fous, ils ont besoin d'aide. »

Ok, là je me dis, je ne reviens pas non plus à zéro. Je connais le site communautaire <url=http://fr.forvo.com/>Forvo.com</url>. Un site sur lequel des gens (comme moi par exemple) enregistrent dans leur langue maternelle la prononciation de mots que d'autres utilisateurs demandent d'obtenir dans une langue qui n'est pas la leur. Un site d'entraide, quoi.
Ok mon souhait est donc la création d'un nouveau script permettant d'automatiser la tâche de requête de vocabulaire par le biais du site Forvo.com.

3. TRADUCTION EN FRANÇAIS DE CE QUE JE VOUDRAIS QUE LE SCRIPT EXÉCUTE
Je voudrais donc que le script fasse ceci :
-- 1 -- Dans le terminal, j'indique l'alias de la commande renvoyant à ce script (ex. : "forvo") suivi du mot que je recherche (ex. : "hello")
-- 2 -- Là, le script recherche dans forvo.com les occurrences en anglais du terme hello (<url=http://fr.forvo.com/word/hello/#en>résultats ici</url>)
-- 3 -- Ok, maintenant, je veux qu'il m'affiche dans le terminal les résultats de toutes les prononciations disponibles en anglais britannique, autrement dit celles prononcées par des «?royaume-uniens?» (ce que le site forvo référence). Dans le cas où il n'y aurait aucun résultat, je voudrais qu'il m'amène au point 6 (cf. plus bas -- 6 -- )
-- 4 -- Voyant affichés ces résultats, classés par un numéro, le terminal me demande d'indiquer le numéro du résultat que je souhaite.
-- 5 -- Imaginons je tape "2" comme numéro, là le script fait deux choses successives : a) il me lit le fichier audio à la volée (avec mplayer par exemple) et me propose dans la foulée d'accepter (taper Y) ou de refuser (taper N). b) si je refuse en tapant N, il revient aux différents résultats numérotés. Si j'accepte en tapant Y, il me télécharge dans /home le fichier audio choisi et le convertit au format OGG.
-- 6 -- Retour à l'étape 3, en imaginant qu'il n'y ait aucun résultat pour le mot recherché (ex. le mot que je recherche est "bonjourjenesuispasunfou"). Là je voudrais que le script exécute automatiquement ceci : avec mon identifiant et pseudo, le script fait la requête suivante au site : il envoie une demande de prononciation du mot en question aux autres utilisateurs (ce que l'on peut faire manuellement sur le site, je précise), en anglais, et avec le tag 'British accent', puis confirme la requête. (voici l'URL de la demande de prononciation d'un mot : https://fr.forvo.com/login/ même s'il faut avoir un compte sur le site pour pouvoir voir la page complète).

4. CE QUE J'AI DÉJÀ TENTÉ ET LÀ OÙ JE DEMANDE DE L'AIDE !
Je n'ai pas rien essayé, mais mes compétences sont limitées. Et là les limites sont trop importantes pour moi.
Je vous remets donc ma tentative de script-test, qui s'arrête... seulement à l'étape 2 :/
#!/bin/bash

WORD=$1
URL="http://fr.forvo.com/word/$1/#en"
URLCONTENT="`wget -q -O - $URL`"
URLCONTENT_RoyaumeUni="`wget -q -O - $URL | sed -n '/Royaume-Uni/p'`"


if << $URLCONTENT = *"Royaume-Uni"* >>
then
echo $(tput setaf 3)$URLCONTENT_RoyaumeUni$(tput sgr 0)
echo -n $URL | xclip -selection clipboard
else
echo $(tput setaf 3)"Aucune prononciation disponible en anglais britannique."$(tput sgr 0)
fi





# | sed 's/.*"dateTaken" :"//' | sed 's/ .*//' | sed 's/^< \t>*// ;s/< \t>*$//' | sed '$!N ; /^\(.*\)\n\1$/ !P ; D'


------------------------------------------------------------------

Pour ceux qui arrivent là, un premier grand merci pour votre patience (m'avoir lu jusqu'au bout ! :))
Je sais que je demande une grande aide. Vraiment, je m'en rends bien compte.
Je ne veux pas faire ça comme une politique de la carotte, sincèrement, mais quoi qu'il se passe je remercierai comme il se doit les gens qui m'ont aidé, et auront donc aidé une communauté de plus de 350?000 utilisateurs de ce deck Anki, sur la page d'accueil : https://ankiweb.net/shared/info/2428949188

MERCI.
A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
24 juin 2015 à 18:30
Salut,

Quelques éléments de réponses, des briques en fait qu'il te faudra assembler ;-\

1 - Récupérer la liste des occurrences "Royaume-Uni" pour "hello" et afficher une liste numérotée (en même temps qu'on l'affiche à l'écran on la sauvegarde dans un fichier) :
$ curl -s http://fr.forvo.com/word/hello/#en | w3m -dump -T text/html | grep -Po '.* par \K.*Royaume-Uni.*' | nl | tee -a fichier
1 TopQuark (Homme - Royaume-Uni)
2 emiily (Femme - Royaume-Uni)
3 x_WoofyWoo_x (Femme - Royaume-Uni)
4 PaulJWright (Homme - Royaume-Uni)
5 hollyevans70 (Femme - Royaume-Uni)
6 Fearsomedude (Homme - Royaume-Uni)
7 izzyluvsdogs (Femme - Royaume-Uni)
8 OTAKU (Femme - Royaume-Uni)
9 liamglen (Homme - Royaume-Uni)
10 Jazzy9 (Femme - Royaume-Uni)
11 Flossie (Femme - Royaume-Uni)
12 dbkm100 (Femme - Royaume-Uni)
13 brad1637 (Homme - Royaume-Uni)
14 bananaman (Homme - Royaume-Uni)
15 John1 (Homme - Royaume-Uni)
16 Thomasmc135 (Homme - Royaume-Uni)
17 robcassell (Homme - Royaume-Uni)
18 Shannon15 (Femme - Royaume-Uni)


Là je te laisse le soin avec la commande
read -p "message : " choice
de récupérer (dans la variable
${choice}
le numéro de ton choix ;-)
$ read -p "Quel numéro ? " choice
Quel numéro ? 13

$ echo ${choice}
13


2 - Récupérer le nom de la personne (on s'aide du fichier sauvegardé, qui je rappelle contient la même liste) :
$ sed -n "s/^  *${choice}\t\([^(]*\).*/\1/p"  fichier
brad1637

A mettre dans une variable :
 
nom=$(sed -n "s/^  *${choice}\t\([^(]*\).*/\1/p"  fichier)


3 - Récupérer l'URL de download :
$ curl -s http://fr.forvo.com/word/hello/#en | grep -A30 -m1 ${nom}| grep -o '/download/mp3/[^"]*'
/download/mp3/hello/en/2491049


A partir de là je ne peux plus tester car il faut être identifié sur le site pour télécharger ;-\

Testes ça déjà et vois si tu peux ensuite télécharger le fichier et le lancer via mplayer (ça tu as les commandes dans l'autre script fait par
nesthib
;-))

2
Yoannjap Messages postés 16 Date d'inscription jeudi 22 septembre 2011 Statut Membre Dernière intervention 1 juillet 2015
30 juin 2015 à 12:48
Merci infiniment pour ton aide Zipe31!! Je vais essayer de mettre la main à la pâte, sans grande conviction d'y parvenir, mais si ça marche... :D
0
Yoannjap Messages postés 16 Date d'inscription jeudi 22 septembre 2011 Statut Membre Dernière intervention 1 juillet 2015
30 juin 2015 à 17:38
Ok, j'ai essayé, mais il y a un problème dans la récupération de l'URL de download... ça ne marche pas, au moment de l'étape 3 - Récupérer l'URL de download.

Il faut récupérer le numéro identifiant le fichier précis à télécharger. Exemple pour hello, si je choisis "1", je choisis la prononciation de TopQuark. On peut voir dans le code source de la page internet que le numéro identifiant l'enregistrement de TopQuark est 174441.

Comment simplement, par une commande, retrouver ce numéro (174441) à partir du contenu de la page internet ?

Au cas où, voici le script où j'ai repris ton aide :)

#!/usr/bin/env bash

WORD=$1
NOMM=$2


curl -s http://fr.forvo.com/word/$WORD/#en | w3m -dump -T text/html | grep -Po '.* par \K.*Royaume-Uni.*' | nl | tee -a fichiersauvegardé
read -p "Quelle prononciation écouter ? (Indiquer le numéro au clavier et taper entrer) " choice
echo ${choice}

nom=$(sed -n "s/^ *${choice}\t\([^(]*\).*/\1/p" fichiersauvegardé)
curl -s https://fr.forvo.com/word/hello/#en | grep -A30 -m1 ${nom} | grep -o '/download/mp3/[^"]*'${nom} | grep -o '/download/mp3/[^"]*'
echo "http://fr.forvo.com/word/$WORD/#en"


Merci !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Yoannjap Messages postés 16 Date d'inscription jeudi 22 septembre 2011 Statut Membre Dernière intervention 1 juillet 2015
30 juin 2015 à 19:16
Ben chez moi ça marche ;-\
$ curl -s http://fr.forvo.com/word/hello/#en | grep -A30 -m1 TopQuark | grep -o '/download/mp3/[^"]*'
/download/mp3/hello/en/174441
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Yoannjap Messages postés 16 Date d'inscription jeudi 22 septembre 2011 Statut Membre Dernière intervention 1 juillet 2015
Modifié par zipe31 le 30/06/2015 à 19:30
Pffff
je viens de voir que dans ton script et ton dernier curl il y a 2 fois le
grep -o 
et en plus une variable en trop
${nom}
;-(
curl -s http://fr.forvo.com/word/hello/#en | grep -A30 -m1 ${nom} | grep -o '/download/mp3/[^"]*'${nom} | grep -o '/download/mp3/[^"]*'
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 juin 2015 à 19:36
Bon j'ai trouvé l'erreur dans le script ;-(
Ça vient du fait que la variable ${nom} contient 3 fois le nom recherché ;-\
La parade :
echo ${nom%% *}
;-))

 
$ cat foo.sh
 
#! /bin/bash
#set -xv
WORD=$1

curl -s http://fr.forvo.com/word/${WORD}/#en | w3m -dump -T text/html | grep -Po '.* par \K.*Royaume-Uni.*' | nl | tee -a fichiersauvegardé
read -p "Quelle prononciation écouter ? (Indiquer le numéro au clavier et taper entrer) " choice
echo ${choice}

nom=$(sed -n "s/^ *${choice}\t\([^(]*\).*/\1/p" fichiersauvegardé)
echo ${nom%% *}
curl -s http://fr.forvo.com/word/${WORD}/#en | grep -A30 -m1 ${nom%% *} | grep -o '/download/mp3/[^"]*' 
#echo "http://fr.forvo.com/word/${WORD}/#en"


$ ./foo.sh hello
1 TopQuark (Homme - Royaume-Uni)
2 emiily (Femme - Royaume-Uni)
3 x_WoofyWoo_x (Femme - Royaume-Uni)
4 PaulJWright (Homme - Royaume-Uni)
5 hollyevans70 (Femme - Royaume-Uni)
6 Fearsomedude (Homme - Royaume-Uni)
7 OTAKU (Femme - Royaume-Uni)
8 izzyluvsdogs (Femme - Royaume-Uni)
9 liamglen (Homme - Royaume-Uni)
10 Jazzy9 (Femme - Royaume-Uni)
11 Flossie (Femme - Royaume-Uni)
12 dbkm100 (Femme - Royaume-Uni)
13 brad1637 (Homme - Royaume-Uni)
14 bananaman (Homme - Royaume-Uni)
15 John1 (Homme - Royaume-Uni)
16 Thomasmc135 (Homme - Royaume-Uni)
17 robcassell (Homme - Royaume-Uni)
18 Shannon15 (Femme - Royaume-Uni)
Quelle prononciation écouter ? (Indiquer le numéro au clavier et taper entrer) 1
1
TopQuark
/download/mp3/hello/en/17444
0