Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/03/2014, à 04:39

Yoannjap

[RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Bonsoir tout le monde !

Voici le plan de ma demande « au secours » big_smile :
1. Ce qui m'amène à vous demander de l'aide ;
2. Ce que je souhaiterai pouvoir faire ;
3. Comment je m'y prends pour le moment ;
4. Ce que j'ai déjà tenté et là où je demande de l'AIDE !

〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰

1. Ce qui m'amène à vous demander de l'aide :
Je suis développeur d'un paquet linguistique sur Anki : celui-ci. Je le partage et j'essaie de trouver une bonne combinaison de moyens de faire apprendre vite, bien, et de manière contextualisée du vocabulaire et des éléments idiomatiques ou de conversations anglophones aux utilisateurs d'Anki. Le tout en licence libre bien sûr. Ces éléments contextuels d'apprentissage permettent d'imager sous un maximum de formes différentes un mot, pour que le cerveau combine plusieurs de ses zones pour retenir un mot.
Exemple : la carte « boîte vocale » (celle de son notre numéro de téléphone). Sur le recto de cette carte figurent :
          - En gris et entre crochets le champs lexical (« télécommunications ») ;
          - Ensuite en gros, le mot « répondeur » en français ;
          - Juste en dessous du mot, une image (en licence open source CC elle aussi) qui permet d'illustrer le mot et de le retenir beaucoup plus vite ! ;
          - Sous cette image, en petit, la ligne d'attribution de licence CC de l'image (nom de la licence, lien URL, nom de l'auteur (lien vers sa page s'il en a), année de création, titre de l'œuvre, source URL de l'image) ;
Puis lorsque je décide de 'retourner' la carte, au verso, la réponse affiche :
          - Le mot en gras en anglais : « voicemail » ;
          - En dessous le fichier audio de sa prononciation ;
          - Encore en dessous, si cela a du sens d'en mettre un, un son qui illustre ce mot. Par exemple, pour la flashcard boîte vocale - voicemail, j'ai inclus un son (en licence libre, toujours) : un enregistrement d'une voix de répondeur que précède la tonalité 'occup' du téléphone (le lien ici) ;
          - Avec annotée en bas l'attribution de l'œuvre.

Pour mieux vous imager la flashcard telle qu'elle apparaît lorsque l'on révise avec le recto en haut et le verso en bas, la voici en image :

1395712171.png

2. Ce que je souhaiterai pouvoir faire :
Ma demande d'aide concerne l'élément de fichier audio de prononciation que j'essaie d'intégrer à un maximum de cartes. Pour ça, il y a moult sites web de dicos et parmi eux, les audios du site web d'Oxford. D'autres sites existent pour les audios de prononciation: ceux tirés de Wikimedias (licence libre), ceux de WordRef, ceux de Cambridge, ceux de McMillan, ceux que j'essaie d'utiliser au maximum (car en licence libre) de Forvo.com, ou d'UrbanDictionary ou encore de Shootka, là encore en licence libre.
Je voudrai donc pouvoir trouver un moyen automatique de télécharger un son (de prononciation du mot) lorsque j'en ai besoin sur Oxford par exemple.

3. Comment je m'y prends pour le moment :
Imaginons : je crée la carte pour un mot. Je souhaite télécharger un fichier audio. Je vais donc par exemple sur cette page pour télécharger le .ogg du son « voicemail » en anglais britannique. Je tape CTRL+U pour que s'affiche la page du code source. (Je tourne sous Firefox). J'atterris donc sur cette page, le problème est que le lien du son que je repère en tapant ogg= dans la boîte de recherche CTRL+F sur cette même page-code source. Je tombe sur une ligne de code telle que :

data-src-ogg="http://www.oxfordlearnersdictionaries.com/media/english/uk_pron_ogg/v/voi/voice/voicemail__gb_1.ogg"

Mais... le lien n'est pas cliquable. Je dois donc « manuellement » (c'est-à-dire à la souris) sélectionner (surligner) depuis http://www. oxf.... jusqu'à ....il__gb_1.ogg. Puis copier avec CTRL+C, puis aller dans la barre d'adresse avec F6, puis coller le lien avec CTRL+V, puis taper sur Entrée, puis le fichier son se joue, alors je dois cliquer-droit dessus, puis faire « enregistrer sous », le renommer, et taper sur entrée !

Tout ça est très (trop !) manuel et chronophage. Notamment la phase CTRL+F, sélection du lien à la souris, puis copier-coller dans la barre d'adresse. Ce que je souhaite faire, c'est trouver une méthode automatique pour sélectionner ces liens...

4. Ce que j'ai déjà tenté et là où je demande de l'AIDE yikes  :
    ▸ J'ai déjà tenté d'installer l'addon Firefox iMacro, pour lui mimer les gestes à faire, le problème est que la longueur du lien à sélectionner n'est jamais la même en fonction des mots, du coup, je ne peux pas automatiser la tâche. Ok, autre méthode. Sur la page-code source, en tapant au clavier F7, la navigation de firefox (même à l'intérieur de la page) passe au clavier. Je peux donc sélectionner l'adresse du lien au clavier (et le mimer à iMacro) sans avoir à utiliser la souris à aucun moment. Le problème reste que la longueur du lien reste... aléatoire. Je ne peux donc automatiser un mouvement (souris de gauche à droite sur 5 cm d'écran) de sélection d'un lien, ou un tapotage de la touche SHIFT+flèche de droite en tapant par exemple 29 fois sur cette flèche de droite, si ces liens ne sont jamais de même taille.
Ma question : Comment pourrais-je dire à iMacro (ou le faire moi-même) de sélectionner au clavier le texte de la chaîne de caractères  allant de http://oxfordlearnersdictionaries.com/media, jusqu'à celle se terminant par .ogg ???
    ▸ J'ai aussi tenté l'addon Link gopher, mais il ne reconnaît pas les liens imbriqués dans des chaînes de codes rendant le lien non-cliquable...
Ma question : Y a-t-il des addons Firefox capables de rendre ce type de liens... cliquables ? Jusqu'à maintenant, je n'en ai pas trouvé...
    ▸ Ma question dernière : Y a-t-il une autre façon à laquelle vous pensez ,et à laquelle je n'ai peut-être moi-même pas idée, qui pourrait se faire depuis Linux, ou par un script (???), ou depuis un autre programme que directement par Firefox, ou même par des lignes de commande, eutécé ?

Quoi qu'il en soit, et d'abord, merci beaucoup pour votre lecture attentive de mon post. Et enfin, un grand merci d'avance à quiconque pourra m'aider à débusquer une manip, car c'est une tâche si répétitive, énorme et chronophage...

YoannJap

〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰

P.S. : Un add-on Anki permet directement depuis le programme Anki (dans la fenêtre de création/édition de flashcard) de télécharger des fichiers audio, directement en cliquant sur une icône (celle qu'ajoute l'addon, donc). Cet addon se chargeant du reste (visite du site, téléchargement du médias, et inclusion dans la fenêtre d'édition de flashcard Anki). Comment le développeur a-t-il fait ? Je n'en ai pas la moindre idée ! J'ai essayé de le contacter là-dessus mais pas encore de réponse, si tu passais par là....
Le problème de cet addon est que l'on ne peut choisir de télécharger que depuis certains sites, pour la plupart en anglais américain. or je développe un deck d'anglais...britannique ! Le seul site où l'addon est configuré pour chercher le fichier audio en anglais britannique est celui de McMillan, mais il ne s'affiche pratiquement jamais dans mon cas (un bug?) et surtout dispose d'une bibliothèque de fichiers sons bien plus pauvre que les autres sites.

Dernière modification par Yoannjap (Le 28/03/2014, à 15:28)

Hors ligne

#2 Le 26/03/2014, à 15:13

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Mets le code suivant dans le fichier ~/.bash_aliases :

function dloxford {
  TARGET_FOLDER='/tmp'
  [[ $1 == "-d" ]] && { DO_DL=true ; shift ; } || DO_DL=false
  VOICE_FILES=( $(wget -qO - "http://www.oxfordlearnersdictionaries.com/definition/english/$1" | grep -oP '(?<=data-src-ogg=")[^"]+') )
  $DO_DL && wget "${VOICE_FILES}" -O "${TARGET_FOLDER}/$1.ogg" || echo "${VOICE_FILES}"
}

puis lance un nouveau terminal.

Ensuite :

$ dloxford voicemail
http://www.oxfordlearnersdictionaries.com/media/english/uk_pron_ogg/v/voi/voice/voicemail__gb_1.ogg

$ dloxford -d voicemail
[…] «/tmp/voicemail.ogg» sauvegardé

Bien sûr tu peux personnaliser plein de choses comme l'emplacement de sauvegarde (ici /tmp), le nom du fichier audio sauvegardé (par défaut mot_clé.ogg), la version anglaise/américaine de la voix (pour l'américain remplace "${VOICE_FILES}" par "${VOICE_FILES[1]}"), etc.
N'hésite pas à demander pour plus de fonctionnalités.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 26/03/2014, à 17:06

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Nesthib.,

Quand j'ai vu que j'avais une réponse, j'étais presque étonné... neutral
...Quand j'ai vu la qualité et le contenu de la tienne, mon cœur a commencé à battre big_smile. Car ma demande, c'est de une tâche manuelle ultra répétitive que j'exécute manuellement depuis deux ans maintenant, et après toutes mes tentatives de l'automatiser de toutes les manières je n'y croyais plus. Tu me redonnes donc BEAUCOUP d'espoir. Alors juste un mot. Qui est dit avec beaucoup de valeur pour moi (car ton aide représente un grand pas dans mon boulot bénévole et communautaire quotidien) : M E R C I.

Après ce prologue qui devait être fait, j'ai encore besoin de ton aide smile Alors si jamais tu as un peu de temps à m'accorder...
Je viens d'essayer le script que tu me proposes (que j'ai essayé de décortiquer et que je crois comprendre à peu près, même si la syntaxe j'ai du mal, car je ne connais presque rien du langage des scripts linux.)

1. Les constats à l'issue du test du script :
     ‣ Quand je tape directement la commande

dloxford -d voicemail

ça n'a pas marché la première fois. j'ai dû d'abord taper

dloxford voicemail

puis une fois la commande terminée, taper ensuite

dloxford -d voicemail

pour que ça télécharge bien dans le dossier /tmp.
Mais en redémarrant mon terminal, j'ai réessayer de taper directement cette commande (avec le "-d"), et là ça a marché. Je ne sais pas si c'est parce que Linux se rappelait (même une fois le terminal redémarré) que la commande avec"-d" avait été entrée...
EDIT : Bon en fait, en même temps que d'écrire cette réponse, je viens d'essayer avec "betray", "occupy" ou "unconstitutional", "unbelivable" et là en une seule commande (directement avec le "-d") ça a marché ! big_smile

     ‣ Il y a des mots avec lesquels le script ne fonctionne pas hmm (pas... encore ? smile), comme "make", "check", "super" pour les seuls autres que j'ai tenté. Quand j'essaie directement avec la deuxième commande, voilà ce qui s'affiche :

yoannj-ubuntu@yoannjubuntu-W150ER:~$ dloxford -d check
http://: Nom de l'hôte non valide.

yoannj-ubuntu@yoannjubuntu-W150ER:~$

Et quand j'essaie d'abord la première, il ne s'affiche... rien, et rien ne se passe :

yoannj-ubuntu@yoannjubuntu-W150ER:~$ dloxford check

yoannj-ubuntu@yoannjubuntu-W150ER:~$ 

2. Mes questions :
     ‣ Si jamais il faut obligatoirement taper les deux commandes dloxford voicemail et dloxford -d voicemail successivement pour que ça télécharge le fichier audio, y a-t-il un moyen pour moi de n'entrer qu'une seule commande ?
EDIT : comme je l'ai dit plus haut, en ça a l'air de fonctionner en une seule commande (pour les mots avec lesquels le script marche bien sûr, pas (encore) avec les autres pour lesquels le script ne roule pas).

     ‣ Concernant les mots qui marchent pas... pour le moment, je dois bien avouer que je ne capte pas du tout d'où peut venir le problème (le format de l'URL des pages source, à ce que j'ai cru comprendre, est du même format de syntaxe). Qu'est-ce qu'on peut faire ?

     ‣ Qu'est-ce que je dois taper pour des termes composés de deux mots, comme le gallicisme "bon vivant", dont le son est disponible à cette adresse. Est-ce que je dois taper dans la commande "bon_vivant" ou autre chose ? Car "bon vivant" ne marche pas, il me télécharge le mot "bon".

Voilà, encore merci, et vivement ta réponse :]

Dernière modification par Yoannjap (Le 26/03/2014, à 18:32)

Hors ligne

#4 Le 27/03/2014, à 01:01

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

La commande ne pouvait pas fonctionner tant que tu n'avais pas relancé un nouveau terminal car il fallait que le shell lise le fichier ~/.bash_aliases (ce qu'il ne fait qu'au lancement).
Il est inutile de lancer la commande sans l'option -d puis avec si tu ne veux que télécharger, lance la uniquement avec l'option.
En ce qui concerne le mot « check » ça ne fonctionne pas car l'url n'existe pas, pour ce mot il s'agit de l'url « …/check_1 », tu peux lancer la commande :

dloxford -d check_1

Pour « bon vivant », si tu regardes l'URL le mot utilisé a un tiret : « bon-vivant », c'est donc ce mot clé qu'il faut utiliser.

Si tu veux, donne moi un petit cahier des charges qui explique ce que tu aimerais qu'un tel script puisse faire (avec les différents scénarios) et j'essaierai de te faire quelque chose.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 27/03/2014, à 08:07

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Arf en effet ! Je viens d'aller vérifier, c'est parce que pour certains mots, il y a plusieurs pages web.
'Voicemail' n'est qu'un nom commun et n'a pas d'homonyme. Il n'a donc qu'une page.
'Check' est un verbe (.../check_1), un nom (..../check_2), et un idiome (.../check_3).
     ‣ Comme je ne peux jamais savoir s'il y a de multiples entrées pour un même mot, connais-tu un moyen de rédaction de script pour indiquer à ce même script, lorsque je tape un mot dans le terminal, après la commande

dloxford -d

comme "check", que je veux qu'il cherche "check" ou, s'il ne trouve pas, qu'il cherche "check_1". Ou alors de dire au script, de télécharger pour chaque mot (exemple avec check) "check" et "check_1" lorsque je tape "check" après la commande. Car un des deux marchera forcément.

Je t'en demande beaucoup nesthib, alors merci. Le bon point (même si ça va être plus ou moins long), c'est que ton script m'a donné envie d'apprendre comment programmer ça. Apprendre depuis le tout départ, pour partir sur de bonnes bases. Du coup, j'ai fait plusieurs heures de lectures, et suivi de tuto pour m'entraîner, notamment depuis ces pages : 1, 2, 3, 4, 5, 6 et 7. smile

Dernière modification par Yoannjap (Le 27/03/2014, à 08:08)

Hors ligne

#6 Le 27/03/2014, à 14:50

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Voici une version améliorée, cette fois sous forme de script (tu dois donc le rendre exécutable et le placer dans un dossier du PATH) :

#!/bin/bash

# default configuration variables
OX_DL_FOLDER='/tmp'
OX_URL="http://www.oxfordlearnersdictionaries.com/definition/english/"
OX_PLAY_COMMAND='mplayer'

# help
help () {
cat <<EOF
Usage: $0 -[hdpuU] [-o path] keyword
Download audio files from Oxford Dictionary 

  -h    --help          Display this help message

  -i    --interactive   Run in interactive mode

  -d    --download      Download audio file
  -p    --play          Play audio file
  -u    --url           Display audio file URL
  -U    --usa           Use USA audio

  -o path               Path to which download files

EOF
exit
}

# default switches (do NOT edit)
OX_OPT_INTERACTIVE=false
OX_OPT_DL=false
OX_OPT_PLAY=false
OX_OPT_URL=false
OX_OPT_LANG=0

# options
[ $# -eq 0 ] && OX_OPT_INTERACTIVE=true
while getopts  ":hidpuUo:-:" flag
do
  [ $flag = "-" ] && case "${OPTARG%%=*}" in
    interactive) flag="i" ;;
       download) flag="d" ;;
           play) flag="p" ;;
            url) flag="u" ;;
            usa) flag="U" ;;
           help) flag="h" ;;
              *) help ;;
  esac

  case ${flag} in
    i) OX_OPT_INTERACTIVE=true ;;
    d) OX_OPT_DL=true ;;
    p) OX_OPT_PLAY=true ;;
    u) OX_OPT_URL=true ;;
    U) OX_OPT_LANG=1 ;;
    o) OX_OPT_DL_FOLDER="${OPTARG}" ; OX_OPT_DL=true ;;
    h) help ;;
    *) help ;;
  esac
done
shift $((OPTIND-1))

main_function () {
  [ $# -eq 0 ] && { read -p 'word: ' ; set $REPLY ; }
  FIRST_PAGE=$(wget -qO - "${OX_URL}$1")
  AUDIO_URLS=( $(grep -oP '(?<=data-src-ogg=")[^"]+' <<<"${FIRST_PAGE}") )

  # if no answer, add _1 to URL
  [[ -z ${AUDIO_URLS} ]] && FIRST_PAGE=$(wget -qO - "${OX_URL}$1_1") && AUDIO_URLS=( $(grep -oP '(?<=data-src-ogg=")[^"]+' <<<"${FIRST_PAGE}") )

  $OX_OPT_URL  && echo ${AUDIO_URLS[$OX_OPT_LANG]}
  ( $OX_OPT_PLAY || $OX_OPT_DL ) && { TMP_FILE=$(mktemp /tmp/ox.XXXXXX.ogg) ; wget -q "${AUDIO_URLS[$OX_OPT_LANG]}" -O "${TMP_FILE}" ; }
  $OX_OPT_PLAY && $OX_PLAY_COMMAND "${TMP_FILE}" >/dev/null

  # interactive mode
  if $OX_OPT_INTERACTIVE
  then
    while true
    do
      read -p 'download? (Y/n) ' -n1
      echo
      [[ -z $REPLY ]] && REPLY='y'
      case $REPLY in
        y|Y) cp "${TMP_FILE}" "${OX_OPT_DL_FOLDER:-$OX_DL_FOLDER}/$1.ogg" ; break ;;
        n|N) break ;;
      esac
    done
  else
    $OX_OPT_DL   && cp "${TMP_FILE}" "${OX_OPT_DL_FOLDER:-$OX_DL_FOLDER}/$1.ogg"
  fi
  # remove temporary files
  ( $OX_OPT_PLAY || $OX_OPT_DL ) && rm "${TMP_FILE}"
}

trap clean_quit SIGINT

clean_quit () {
  [ -f "${TMP_FILE}" ] && rm "${TMP_FILE}"
  exit
}

$OX_OPT_INTERACTIVE && { $OX_OPT_PLAY || OX_OPT_URL=true ; }
if $OX_OPT_INTERACTIVE && [ $# -eq 0 ]
then
  while true
  do
    main_function
  done
else
  main_function $@
fi

exit 0

Tu as besoin de wget et mplayer, tu peux personnaliser quelques options.

Un exemple d'utilisation (j'ai appelé le script oxdict, mais tu peux utiliser le nom que tu veux) :

oxdict -upd -o /tmp/test_dir hello

va afficher l'URL, jouer le son et placer une copie dans le dossier /tmp/test_dir

En bonus, un mode interactif :

oxdict -i
oxdict -ip

J'espère que tout ça t'aidera smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 27/03/2014, à 17:23

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Gosh, GOSH !!! Ça marche ! Magique. Merci !

Bon, j'ai mis du temps  avant de retrouver comment rendre exécutable un script. Mais là..., c'est du tout bon lol
(à part que mplayer, ma réinstall après purge et tout et tout m'affiche toujours :

yoannj-ubuntu@yoannjubuntu-W150ER:~$ oxdict -upd cake
http://www.oxfordlearnersdictionaries.com/media/english/uk_pron_ogg/c/cak/cake_/cake__gb_1.ogg
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
yoannj-ubuntu@yoannjubuntu-W150ER:~$

Mais sinon, ça marche nikel, le fichier s'enregistre bien et tout et tout ! C'est quand même incroyable d'avoir une telle maîtrise des scripts. Ça rend la vie (une fois qu'on les utilise bien sûr, les faire, ça doit être une autre histoire. Je le vois déjà avec mes apprentissages du sujet)...

En revanche :
avec les mots en deux mots. Comme ave "the G8" ou "bon vivant",. Au début je ne comprenais pas. Que je tape 'the G8', 'theG8', pas de réponse hmm
     ‣ Après je suis allé voir comment il était inscrit sur l'url de la page code source. C'était écrit "the-g8". Logique, puisque que sur une adresse internet, on met rarement des majuscules. C'est la règle sur ce site, tous les autres mots de plusieurs mots sont inscrits en minuscules et dont les mots (du mot smile) sont séparé par des 'tirets du 6', comme le terme "back copy" qui donne "back-copy".
     ‣ Il y une dernière (non)-règle sur ce site (je viens d'écumer mille possibilité des exceptions d'écriture des url du site, c'est la seule que j'ai trouvé pour l'instant). Il y a des mots toujours employé avec "the" et inscrit avec "the" sur la page même du mot sur oxford dictionary. Comme "the G8" ou "the Oval Office".
Ces deux termes résument le problème : certains mots affichent "the-mot" à la fin de l'url, comme pour view-source:http://www.oxfordlearnersdi … ish/the-g8 ;
d'aurtes affichent seulement le mot sans le "the" à la fin de l'url, comme dans view-source:http://www.oxfordlearnersdi … val-office
Et ça n'a pas l'air de dépendre du nombre de mots après le "the" car pour "the FA cup", l'url affiche bien "the" : view-source:http://www.oxfordlearnersdi … the-fa-cup.


Aussi, si tu as du temps pour faire trois modifs là-dessus (si c'est possiblement faisable bien sûr). C'est-à-dire :
1. dire à la console que : que j'écrive "bonvivant", "bon vivant"* ou "bon_vivant", n'importe lequel veut dire "bon-vivant" (typographie de l'url).
2. ne pas prendre en compte la casse (les majuscules) dans le mot qui suit la commande (pour toutes les lettres du mot). Car quand je tape "Available" ou "the-G8" avec une maj, ça marche pas. Quand je les tape tout en minuscule, ça marche. Ce qui est logique à la lecture du script pour l'instant. je te demande ça car lorsque je crée une nouvelle carte sur le deck Anki, je suis souvent amené par rapidité à faire un copier-coller du mot que j'inscris sur ma flashcard sur le site d'Oxford dans la barre de recherche, qui lui ne prend pas en compte la casse.
3. Enfin, pour le « problème du the », c'est marginal, mais parfois je ne saurai pas s'il y a un "the" ou pas, indiquer dans le script que pour n'importe quel terme que je tape après "oxdict -upd", il aille chercher d'abord deux possible urls : l'une sans the d'abord. l'autre avec un the devant.
     - 1er cas : S'il n'existe que le mot sans "the" (par exemple "prime minister" existe, mais pas "the prime minister") il télécharge celui de la première url, sans le the donc, et basta.
     - 2e cas : Si le mot n'existe qu'avec "the" devant, comme "the St Leger" (car "St Leger" sans the devant n'existe pas), le script télécharge donc celui de la deuxième url (avec the devant).
     - 3e cas : Si le mot a deux entrées, deux pages web respectives et deux fichiers audio, d'une part avec "the" devant, d'autre part sans le "the". Que le script puisse aller checker les deux url possibles. Ok, les deux existent. Donc que ce script soit télécharge les deux par défaut.

*Si toutefois c'est possible d'écrire un mot + un espace-de-la-barre-d'espace + un mot dans un terminal sans qu'il crois que ce sont deux commandes ou deux expressions différentes... dans ce cas, est-il possible de dire à la console que les terme qui viennent après la commande

oxdict -upd 

sont une seule expression, et que la console remplace " " (= espace) à cet endroit par "-" (tiret du 6) ??


〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰〰

En tout cas, ce script est déjà une pépite nesthib ! Je ne manquerai pas à ma prochaine mise à jour de mon deck sur Ankiweb de te remercier copieusement pour ton aide. Par hasard, as-tu une page web dédiée que je pourrais indiquer (si jamais ça ne te dérange pas que je te cite sur la page du deck bien sûr^^). Mais je crois bien que ton aide en sera pour beaucoup, dans la suite de ce travail que je mène presque chaque jours depuis deux-trois ans. Car cette tâche rébarbative me prend presque la moitié du temps de création des cartes tongue

EDIT : je viens de voir la modif de ton précédent post héhé big_smile Sur l'option interactive, que je vais tester de ce pas !
EDIT 2
: Lorsque je tape mal le mot, par exemple "reoofend" au lieu de "reoffend", il me télécharge quand même un fichier .ogg nommé "reoofend.ogg". De 0 octet bien sûr, mais qui me fait me tromper quand je veux ensuite le sélectionner dans le navigateur qui s'ouvre dans anki pour me fare choisir le fichier. Enfin bre, là c'est du détail smile

Dernière modification par Yoannjap (Le 27/03/2014, à 18:47)

Hors ligne

#8 Le 27/03/2014, à 20:15

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Pour mplayer, tu peux remplacer par un autre lecteur audio si tu le souhaites, mets simplement à jour la variable « OX_PLAY_COMMAND » au début du script avec la commande de ton choix.

Pour les modifs :
1- le script remplace désormais les espaces et « _ » par un tiret « - », il n'est en revanche pas possible de prendre le compte le cas « bonvivant » car comment choisir où placer l'espace ?
2- le script tente de rajouter le « the- » si les tentatives précédentes ont échoué
3- as-tu un exemple de ce cas ? Est-ce réellement utile ? Ça n'est pas pris en compte pour le moment

Pour les espaces, comme pour toute ligne de commande, tu dois les échapper ou utiliser des guillemets :

oxdict "st leger"
oxdict st\ leger

Si tu utilises le mode interactif tu ne devrais pas avoir de problèmes avec les espaces, tape juste ton mot avec espaces si besoin

En regardant l'url du fichier audio je me rends compte qu'il est possible de la prévoir, pour un mot « abcdefg » ce sera :

http://www.oxfordlearnersdictionaries.com/media/english/uk_pron_ogg/a/abc/abcde/abcdefg__gb_1.ogg

en complétant avec des « _ » s'il n'y a pas assez de lettres et en remplaçant les espaces par des « _ ». On pourrait donc simplifier le script pour faire une requête de moins.

Concernant ton EDIT2, le script affiche désormais clairement lorsqu'il n'y a aucun fichier trouvé et n'essaie pas de télécharger quoi que ce soit.

Le script actualisé (qui corrige aussi quelques erreurs) :

#!/bin/bash

# default configuration variables
OX_DL_FOLDER='/tmp'
OX_URL="http://www.oxfordlearnersdictionaries.com/definition/english/"
OX_PLAY_COMMAND='mplayer'

# help
help () {
cat <<EOF
Usage: $0 -[hdpuU] [-o path] keyword
Download audio files from Oxford Dictionary

  -h    --help          Display this help message

  -i    --interactive   Run in interactive mode

  -d    --download      Download audio file
  -p    --play          Play audio file
  -u    --url           Display audio file URL
  -U    --usa           Use USA audio

  -o path               Path to which download files

EOF
exit
}

# default switches (do NOT edit)
OX_OPT_INTERACTIVE=false
OX_OPT_DL=false
OX_OPT_PLAY=false
OX_OPT_URL=false
OX_OPT_LANG=0

# options
[ $# -eq 0 ] && OX_OPT_INTERACTIVE=true
while getopts  ":hidpuUo:-:" flag
do
  [ $flag = "-" ] && case "${OPTARG%%=*}" in
    interactive) flag="i" ;;
       download) flag="d" ;;
           play) flag="p" ;;
            url) flag="u" ;;
            usa) flag="U" ;;
           help) flag="h" ;;
              *) help ;;
  esac

  case ${flag} in
    i) OX_OPT_INTERACTIVE=true ;;
    d) OX_OPT_DL=true ;;
    p) OX_OPT_PLAY=true ;;
    u) OX_OPT_URL=true ;;
    U) OX_OPT_LANG=1 ;;
    o) OX_OPT_DL_FOLDER="${OPTARG}" ; OX_OPT_DL=true ;;
    h) help ;;
    *) help ;;
  esac
done
shift $((OPTIND-1))

main_function () {
  [ $# -eq 0 ] && { while true; do read -p 'word: ' ; [[ -z "$REPLY" ]] || break ; done ; set "$REPLY" ; }

  # lower case and remove spaces and underscores
  OX_WORD="${1,,}"
  OX_WORD="${OX_WORD//[ _]/-}"

  FIRST_PAGE=$(wget -qO - "${OX_URL}${OX_WORD}")
  AUDIO_URLS=( $(grep -oP '(?<=data-src-ogg=")[^"]+' <<<"${FIRST_PAGE}") )

  # if no answer, add _1 to URL
  [[ -z ${AUDIO_URLS} ]] && FIRST_PAGE=$(wget -qO - "${OX_URL}${OX_WORD}_1") && AUDIO_URLS=( $(grep -oP '(?<=data-src-ogg=")[^"]+' <<<"${FIRST_PAGE}") )

  # if still no answer, prepend "the-" to URL
  [[ -z ${AUDIO_URLS} ]] && FIRST_PAGE=$(wget -qO - "${OX_URL}the-${OX_WORD}") && AUDIO_URLS=( $(grep -oP '(?<=data-src-ogg=")[^"]+' <<<"${FIRST_PAGE}") )

  # if still no answer, abort
  [[ -z ${AUDIO_URLS} ]] && { echo 'sorry, nothing found…' ; return ; }

  $OX_OPT_URL  && echo ${AUDIO_URLS[$OX_OPT_LANG]}
  ( $OX_OPT_PLAY || $OX_OPT_DL || $OX_OPT_INTERACTIVE ) && { TMP_FILE=$(mktemp /tmp/ox.XXXXXX.ogg) ; wget -q "${AUDIO_URLS[$OX_OPT_LANG]}" -O "${TMP_FILE}" ; }
  $OX_OPT_PLAY && $OX_PLAY_COMMAND "${TMP_FILE}" >/dev/null

  # interactive mode
  if $OX_OPT_INTERACTIVE
  then
    while true
    do
      read -p 'download? (Y/n) ' -n1
      echo
      [[ -z $REPLY ]] && REPLY='y'
      case $REPLY in
        y|Y) cp "${TMP_FILE}" "${OX_OPT_DL_FOLDER:-$OX_DL_FOLDER}/$1.ogg" ; break ;;
        n|N) break ;;
      esac
    done
  else
    $OX_OPT_DL   && cp "${TMP_FILE}" "${OX_OPT_DL_FOLDER:-$OX_DL_FOLDER}/$1.ogg"
  fi
  # remove temporary files
  ( $OX_OPT_PLAY || $OX_OPT_DL || $OX_OPT_INTERACTIVE ) && rm "${TMP_FILE}"
}

trap clean_quit SIGINT

clean_quit () {
  [ -f "${TMP_FILE}" ] && rm "${TMP_FILE}"
  exit
}

$OX_OPT_INTERACTIVE && { $OX_OPT_PLAY || OX_OPT_URL=true ; }
if $OX_OPT_INTERACTIVE && [ $# -eq 0 ]
then
  while true
  do
    main_function
  done
else
  main_function "$@"
fi

exit 0

Le plus simple est juste de lancer :

oxdict

NB. pour la prévisualisation, préfères-tu par défaut que le script t'affiche l'URL si elle existe ou te joue le mot (ou les deux) ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 27/03/2014, à 21:23

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Ahh, super, celui-ci est vraiment mieux que l'autre. Pour le moment, je préfère la commande ocdict que le mode interactif, je trouve la première plus simple car une chose de moins à faire (le mode interactif, c'est : taper une ligne puis entrée pour le yes)... Bon mais ce n'est que le début de la délivrance pour moi, alors je vais tester ce bijou de script en large et en travers !

Sinon, pour le "the-" que le script tente de rajouter, oui, ça m'enlèverai une épine du pied, je dois l'avouer. Car un panel de mot prenne un "the" en anglais et forment un idiome. Et le problème est qu'avec le script, à chaque fois qu'il y a un "the" préfixant le mot lui même (ça doit au minimum concerner mille mots), je dois donc entrer une deuxième fois la commande.
Mais dans les faits, ça se passe plutôt comme ça, la faute à mon impatience peu productive haha ! J'entre sans le "the" (le mot balkans, au hasard), ça ne marche pas. Donc je vais direct sur le site pour aller vérifier que 1. le mot existe, 2. que je n'ai pas fait de faute en l'écrivant, 3. qu'il y a peut-être un "the"... Du coup, étant sur le site, je vais aller faire l'ancienne méthode "manuelle" (tant j'y suis habitué, l'ayant fait peut-être 5 000 fois).
Donc c'est vrai, ce problème du "the", ce n'est pas le plus embêtant comparé à tout ce que fait déjà le script. Il fait déjà 95% des heures de boulot que je consacrerai sans lui. Mais c'est vrai aussi que s'il y a moyen de « scripter » le fait qu'il vérifie deux occurrences et, surtout, que tu ai le temps de t'y consacrer (car, au passage, j'imagine le boulot bénévole de programmation que ça représente pour toi! tongue), ça faciliterait bien les choses.

Enfin, pour la prévisualisation, je t'avoue largement préférer les trois options en une fois, voilà pourquoi :
- voir l'URL s'afficher a d'un côté une officialisation que le script a bien trouvé le mot (dans mes tests, ça me fait toujours cet effet quand le mot est trouvé, sûrement aussi car j'ai vu ce type d'url des milliers de fois dans ma tâche manuelle, donc ça me rassure de la voir apparaître) et deuxièmement, si tu peux programmer pour le "the", ça me permettra de voir si finalement y'a the ou pas ;
- entendre ensuite le son se jouer a une très forte utilité : (en dehors de mon individualiste gain d'entendre une première fois un mot avant de l'apprendre), ça me permet de capter que le mot a été trouvé si jamais avant que l'opération ne soit terminée (en dépend la vitesse de connexion, et là où j'étudie à Rio en ce moment, c'est pas la joie hmm) j'ALT-TAB de retour sur Anki. Je peux du coup directement aller le piocher dans le navigateur par l'interface d'Anki.
- le téléchargement remplie la fonction première de ce script. Le must en fait !

Donc justement je trouvais dès le départ ton idée excellente dans la commande oxdict -upd d'avoir ces trois éléments.

EDIT : L'intelligence artificielle de ton script est confirme même mes intuitions, je 'mens pas haha !

yoannj-ubuntu@yoannjubuntu-W150ER:~$ oxdict -upd "find me a better and more effective help than Nesthib s one if you can"
sorry, nothing found…
yoannj-ubuntu@yoannjubuntu-W150ER:~$ 

Dernière modification par Yoannjap (Le 27/03/2014, à 21:36)

Hors ligne

#10 Le 28/03/2014, à 14:50

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Je pense que désormais tu peux personnaliser l'utilisation toi même. Par exemple tu peux faire une fonction « ox » qui lance le script tel que tu le souhaites.
Si tu te rappelles de la première méthode proposée dans le message #2, tu peux faire une fonction bash ainsi :

ox () {
  oxdict -up "$1"
  oxdict -up "the-$1"
}

Ensuite tu peux lancer en un éclair le script en adéquation avec tes attentes :

ox balkans

Je te recommande de changer la ligne du script qui affiche l'absence de résultats par celle-ci :

  [[ -z ${AUDIO_URLS} ]] && { echo "sorry, nothing found for \"$1\"…" ; return ; }

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 28/03/2014, à 15:34

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Que dire Nesthib, Merci, je viens de l'essayer. Ça marche marche marche, yeaah ! Ce script est finalement un luxe. Merci infiniment pour ton aide, ton temps et ta patience avec moi tongue c'est jamais gagné. Ça va m'économiser je ne sais combien de temps sur les prochaines années de mon travail !

Yoannjap

Hors ligne

#12 Le 28/03/2014, à 19:39

nesthib

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

Je t'en prie. Bon courage pour le développement de ton paquet linguistique.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 24/06/2015, à 08:38

Yoannjap

Re : [RÉ-SO-LU] Séléction automatique d'une chaîne de caractères sur firefx

@Nesthib : je ne sais pas si tu as pu recevoir le message "privé" que je t'ai envoyé, mais, voici la suite, près d'un an et demi plus tard, de ce topic : http://forum.ubuntu-fr.org/viewtopic.ph … #p20068091, si tu peux y jeter un œil, I'd thaaaaaank you a lot!

Hors ligne