Utilisateur:UnsuiBot/script
Intro
[modifier le wikicode]Cette page donne un exemple de script sous AutoHotkey.
AutoHotkey est un freeware sous windows permettant de créer des macros, des applications, ou de remapper le clavier à volonté.
La version portable est suffisante.
L’exemple suivant permet de créer les pages de flexions en finnois correspondant au modèle {{fi-décl-valo}}
.
Les possibilités du langage d’AutoHotkey étant très supérieures au langage wiki, il serait possible de regrouper tous les modèles de déclinaisons finnoises en un seul.
Pour plus de clarté, j’ai préféré suivre les modèles existants.
Le code se veut simpliste, avec le moins d’astuces possibles. Les mouvements de la souris sont remplacés par des touches de fonction et des tabulations ce qui rend le code facilement portable quelque soit le navigateur utilisé (ici Google Chrome). Seul le nom des fenêtres Windows serait à adapter. Pour obtenir le nom exact de ces fenêtres, un utilitaire d’enregistrement d’actions sous Windows peut être utile comme AutoHotkey ScriptWriter téléchargeable ici
Principe
[modifier le wikicode]- Créer un fichier texte en mettant une ligne par mot à traiter. Par exemple :
- luku lu k v u a - lu k ʋ u ɑ - n n
- Ici , les 7 premiers paramètres correspondent aux paramètres du modèle wikt correspondant, les 7 suivants à leur prononciation. (Le fichier doit être codé en utf-8 pour pouvoir gérer l’API). Les deux derniers indiquent le type de mot (n=nom, a=adjectif) et si il y a un traitement spécifique du génitif pluriel (pour l’instant o/n oui ou non). Ils sont séparés par une tabulation mais tout autre caractère séparateur est possible.
- Lire ce fichier, déterminer les flexions, créer les pages concernées.
- Remarque : Si la page à créer existe déjà, le script passe à la suivante après l’avoir indiqué dans un fichier log. (il est très difficile de traiter une mise à jour d’une page existante vu les différents cas possibles.) Attention: le fichier log doit exister avant de lancer le script.
- Remarque : Si la page à créer existe déjà, le script passe à la suivante après l’avoir indiqué dans un fichier log. (il est très difficile de traiter une mise à jour d’une page existante vu les différents cas possibles.) Attention: le fichier log doit exister avant de lancer le script.
- Le script prévoit ici trois modes de fonctionnement possibles demandés au lancement :
- test court : affiche juste le nom des pages qui vont être créées et la prononciation des mots concernés.
- test long : simule la création effective des pages mais ne les sauve pas.
- Réel : crée les pages demandées.
- Pour lancer le script, se loguer avec son compte bot et se mettre sur la page d’accueil du wiktionnaire puis se placer dans un fichier texte codé utf-8 (si API) ou dans une page wiki de travail et entrer $NomDuScript
- Cet exemple est sûrement améliorable… Alors n’hésitez pas.
Fonctions employées
[modifier le wikicode]- clipboard
- La saisie clavier se fait par l’intermédiaire du bloc-note (clipboard). Cela a plusieurs avantages. Le premier est la rapidité (ce qui n’est pas du tout intéressant ici où l’on doit limiter le nombre de mises à jour par minute pour ne pas surcharger le serveur). Le second est la fiabilité. On notera que par contre cela implique qu’un gadget comme SpecialChars ne fonctionnera pas. Il faudra donc coder les caractères exactement comme on le souhaite (par exemple l’apostrophe typographique).
- sleep
- Une temporisation (sleep) est nécessaire à de nombreux endroits : obligatoire après tout renseignement du bloc-note pour laisser à Windows le temps de le gérer (350 millisecondes minimum). D’autres ne sont là que pour ralentir le script pour arriver à 10 créations par minutes.
- WinWait
- Si une page existe déjà, l’attente de la fenêtre de la page à créer sera infinie. Un timeout pallie cela et permet de passer à la création suivante. Dans le script, il est de 10 secondes mais on peut le raccourcir. (WinWait, Création de %page% - Wiktionnaire - Google Chrome, ,10)
Script
[modifier le wikicode]::$fidéclvalo:: IfExist, C:\Documents and Settings\pc\Mes documents\Google Drive\Wiki\ { Fic = C:\Documents and Settings\pc\Mes documents\Google Drive\Wiki\ lieu = Maison } else { Fic = C:\Perso\Google Drive\Wiki\ lieu = Bureau } InputBox, test, test court : c | test long : l | réel : r ? ; Demande si mode test if ( ! test ) test = c first = 1 Sleep 50 sendInput Début : Fichiers dans %Fic% depuis %lieu%{ENTER}{ENTER} Loop, read, %Fic%InputHotkey.txt ; Lecture du fichier en entrée { StringSplit, word_array, A_LoopReadLine , %A_Tab% ; Parse de la ligne lue Pgén2 = l_Pgén2 = p_Pgén2 = gp2 = mot := word_array1 rac := word_array2 clfo := word_array3 clfa := word_array4 if clfa = - clfa = v4 := word_array5 v5 := word_array6 v6 := word_array7 if v6 = - v6 = %v4% p_rac := word_array8 p_clfo := word_array9 p_clfa := word_array10 p_v4 := word_array11 p_v4fa := p_v4 p_v5 := word_array12 p_v6 := word_array13 type := word_array14 gp2 := word_array15 word_array15 = if p_v6 = - p_v6 = %p_v4% p_v6fa := p_v6 ; Traitement de la prononciation du degré zéro de l'alternance vocalique if p_clfa = - { StringRight, last_v, rac, 1 ; récupère la dernière lettre de la racine p_clfa = if last_v = %v4% p_v4fa = ː if last_v = %v6% p_v6fa = ː } if type = a type = adj else if type = n type = nom else type = nom-pr ; SINGULIER ----------------------------------- Sgén = %rac%%clfa%%v4%n l_Sgén := "# ''Génitif singulier de''" l_Sgén2 := "# ''Accusatif I singulier de ''" p_Sgén = ˈ%p_rac%%p_clfa%%p_v4fa%n Spar = %rac%%clfo%%v4%%v5% l_Spar := "# ''Partitif singulier de''" if p_v4 = %p_v5% p_Spar = ˈ%p_rac%%p_clfo%%p_v4%ː else p_Spar = ˈ%p_rac%%p_clfo%%p_v4%%p_v5% Siné = %rac%%clfa%%v4%ss%v5% l_Siné := "# ''Inessif singulier de''" p_Siné = ˈ%p_rac%%p_clfa%%p_v4fa%sː%p_v5% Séla = %rac%%clfa%%v4%st%v5% l_Séla := "# ''Élatif singulier de''" p_Séla = ˈ%p_rac%%p_clfa%%p_v4fa%st%p_v5% Sill = %rac%%clfo%%v4%%v4%n l_Sill := "# ''Illatif singulier de''" p_Sill = ˈ%p_rac%%p_clfo%%p_v4%ːn Sade = %rac%%clfa%%v4%ll%v5% l_Sade := "# ''Adessif singulier de''" p_Sade = ˈ%p_rac%%p_clfa%%p_v4fa%lː%p_v5% Sabl = %rac%%clfa%%v4%lt%v5% l_Sabl := "# ''Ablatif singulier de''" p_Sabl = ˈ%p_rac%%p_clfa%%p_v4fa%lt%p_v5% Sall = %rac%%clfa%%v4%lle l_Sall := "# ''Allatif singulier de''" p_Sall = ˈ%p_rac%%p_clfa%%p_v4fa%lːe Sess = %rac%%clfo%%v4%n%v5% l_Sess := "# ''Essif singulier de''" p_Sess = ˈ%p_rac%%p_clfo%%p_v4%n%p_v5% Stra = %rac%%clfa%%v4%ksi l_Stra := "# ''Translatif singulier de''" p_Stra = ˈ%p_rac%%p_clfa%%p_v4fa%ksi Sabe = %rac%%clfa%%v4%tt%v5% l_Sabe := "# ''Abessif singulier de''" p_Sabe = ˈ%p_rac%%p_clfa%%p_v4fa%tː%p_v5% ; PLURIEL ----------------------------------- Pnom = %rac%%clfa%%v4%t l_Pnom := "# ''Nominatif pluriel de''" l_Pnom2 := "# ''Accusatif pluriel de''" p_Pnom = ˈ%p_rac%%p_clfa%%p_v4fa%t Pgén = %rac%%clfo%%v6%jen l_Pgén := "# ''Génitif pluriel de''" p_Pgén = ˈ%p_rac%%p_clfo%%p_v6%jen if gp2 { Pgén2 = %rac%%clfo%%v4%in l_Pgén2 := "# {{rare|fi}} ''Génitif pluriel de''" p_Pgén2 = ˈ%p_rac%%p_clfo%%p_v4%in } Ppar = %rac%%clfo%%v6%j%v5% l_Ppar := "# ''Partitif pluriel de''" p_Ppar = ˈ%p_rac%%p_clfo%%p_v6%j%p_v5% Pine = %rac%%clfa%%v6%iss%v5% l_Pine := "# ''Inessif pluriel de''" p_Pine = ˈ%p_rac%%p_clfa%%p_v6fa%isː%p_v5% Péla = %rac%%clfa%%v6%ist%v5% l_Péla := "# ''Élatif pluriel de''" p_Péla = ˈ%p_rac%%p_clfa%%p_v6fa%ist%p_v5% Pill = %rac%%clfo%%v6%ihin l_Pill := "# ''Illatif pluriel de''" p_Pill = ˈ%p_rac%%p_clfo%%p_v6%ihin Pade = %rac%%clfa%%v6%ill%v5% l_Pade := "# ''Adessif pluriel de''" p_Pade = ˈ%p_rac%%p_clfa%%p_v6fa%ilː%p_v5% Pabl = %rac%%clfa%%v6%ilt%v5% l_Pabl := "# ''Ablatif pluriel de''" p_Pabl = ˈ%p_rac%%p_clfa%%p_v6fa%ilt%p_v5% Pall = %rac%%clfa%%v6%ille l_Pall := "# ''Allatif pluriel de''" p_Pall = ˈ%p_rac%%p_clfa%%p_v6fa%ilːe Pess = %rac%%clfo%%v6%in%v5% l_Pess := "# ''Essif pluriel de''" p_Pess = ˈ%p_rac%%p_clfo%%p_v6%in%p_v5% Ptra = %rac%%clfa%%v6%iksi l_Ptra := "# ''Translatif pluriel de''" p_Ptra = ˈ%p_rac%%p_clfa%%p_v6fa%iksi Pabe = %rac%%clfa%%v6%itt%v5% l_Pabe := "# ''Abessif pluriel de''" p_Pabe = ˈ%p_rac%%p_clfa%%p_v6fa%itː%p_v5% Pins = %rac%%clfa%%v6%in l_Pins := "# ''Instructif pluriel de''" p_Pins = ˈ%p_rac%%p_clfa%%p_v6fa%in Pcom = %rac%%clfo%%v6%ine- l_Pcom := "# ''Comitatif pluriel de''" l_Pcom2 := ": {{note}} cette forme doit être complétée par un suffixe possessif" p_Pcom = ˈ%p_rac%%p_clfo%%p_v6%ine if ( (test != "l") and (test != "r") ) { send Début : —%word_array1%— {TAB} %type% {TAB} Gp2 : (%gp2%) {ENTER}{ENTER} sendInput Sgén : %Sgén% {TAB} %p_Sgén% + acc I {ENTER}Spar : %Spar% {TAB} %p_Spar%{ENTER}Siné : %Siné% {TAB} %p_Siné%{ENTER} sendInput Séla : %Séla% {TAB} %p_Séla% {ENTER}Sill : %Sill% {TAB} %p_Sill% {ENTER}Sade : %Sade% {TAB} %p_Sade% {ENTER}Sabl : %Sabl% {TAB} %p_Sabl% {ENTER} sendInput Sall : %Sall% {TAB} %p_Sall% {ENTER}Sess : %Sess% {TAB} %p_Sess% {ENTER}Stra : %Stra% {TAB} %p_Stra% {ENTER}Sabe : %Sabe% {TAB} %p_Sabe% {ENTER} SendInput Pnom : %Pnom% {TAB} %p_Pnom% + acc {ENTER}Pgén : %Pgén% {TAB} %p_Pgén% {ENTER}Ppar : %Ppar% {TAB} %p_Ppar% {ENTER}Pine : %Pine% {TAB} %p_Pine% {ENTER} SendInput Péla : %Péla% {TAB} %p_Péla% {ENTER}Pill : %Pill% {TAB} %p_Pill% {ENTER}Pade : %Pade% {TAB} %p_Pade% {ENTER}Pabl : %Pabl% {TAB} %p_Pabl% {ENTER} SendInput Pall : %Pall% {TAB} %p_Pall% {ENTER}Pess : %Pess% {TAB} %p_Pess% {ENTER}Ptra : %Ptra% {TAB} %p_Ptra% {ENTER}Pabe : %Pabe% {TAB} %p_Pabe% {ENTER} SendInput Pins : %Pins% {TAB} %p_Pins% {ENTER}Pcom : %Pcom% {TAB} %p_Pcom% {ENTER}Pgén2 : %Pgén2% {TAB} %p_Pgén2% {ENTER}--------------- {ENTER} } else { l3 = sleep 50 if ( first = "1" ) { first = 0 WinWait, Wiktionnaire - Google Chrome, IfWinNotActive, Wiktionnaire - Google Chrome, , WinActivate, Wiktionnaire - Google Chrome, WinWaitActive, Wiktionnaire - Google Chrome, } } if ( test = "r" ) { FileAppend, %A_Now% Début : ------------------------------- %word_array1% `n, %Fic%fi-décl-valo.log sleep 100 } if ( (test = "l") or (test = "r") ) { page := Sgén , pron := p_Sgén , l1 := l_Sgén , l2 := l_Sgén2 gosub Cré-nom-flex-fi page := Spar , pron := p_Spar , l1 := l_Spar , l2 := "" gosub Cré-nom-flex-fi page := Siné , pron := p_Siné , l1 := l_Siné , l2 := "" gosub Cré-nom-flex-fi page := Séla , pron := p_Séla , l1 := l_Séla , l2 := "" gosub Cré-nom-flex-fi page := Sill , pron := p_Sill , l1 := l_Sill , l2 := "" gosub Cré-nom-flex-fi page := Sade , pron := p_Sade , l1 := l_Sade , l2 := "" gosub Cré-nom-flex-fi page := Sabl , pron := p_Sabl , l1 := l_Sabl , l2 := "" gosub Cré-nom-flex-fi page := Sall , pron := p_Sall , l1 := l_Sall , l2 := "" gosub Cré-nom-flex-fi page := Sess , pron := p_Sess , l1 := l_Sess , l2 := "" gosub Cré-nom-flex-fi page := Stra , pron := p_Stra , l1 := l_Stra , l2 := "" gosub Cré-nom-flex-fi page := Sabe , pron := p_Sabe , l1 := l_Sabe , l2 := "" gosub Cré-nom-flex-fi page := Pnom , pron := p_Pnom , l1 := l_Pnom , l2 := l_Pnom2 gosub Cré-nom-flex-fi page := Pgén , pron := p_Pgén , l1 := l_Pgén , l2 := "" gosub Cré-nom-flex-fi if gp2 { page := Pgén2 , pron := p_Pgén2 , l1 := l_Pgén2 , l2 := "" gosub Cré-nom-flex-fi } page := Ppar , pron := p_Ppar , l1 := l_Ppar , l2 := "" gosub Cré-nom-flex-fi page := Pine , pron := p_Pine , l1 := l_Pine , l2 := "" gosub Cré-nom-flex-fi page := Péla , pron := p_Péla , l1 := l_Péla , l2 := "" gosub Cré-nom-flex-fi page := Pill , pron := p_Pill , l1 := l_Pill , l2 := "" gosub Cré-nom-flex-fi page := Pade , pron := p_Pade , l1 := l_Pade , l2 := "" gosub Cré-nom-flex-fi page := Pabl , pron := p_Pabl , l1 := l_Pabl , l2 := "" gosub Cré-nom-flex-fi page := Pall , pron := p_Pall , l1 := l_Pall , l2 := "" gosub Cré-nom-flex-fi page := Pess , pron := p_Pess , l1 := l_Pess , l2 := "" gosub Cré-nom-flex-fi page := Ptra , pron := p_Ptra , l1 := l_Ptra , l2 := "" gosub Cré-nom-flex-fi page := Pabe , pron := p_Pabe , l1 := l_Pabe , l2 := "" gosub Cré-nom-flex-fi page := Pins , pron := p_Pins , l1 := l_Pins , l2 := "" gosub Cré-nom-flex-fi page := Pcom , pron := p_Pcom , l1 := l_Pcom , l2 := "" , l3 := l_Pcom2 gosub Cré-nom-flex-fi } } return ; Cré-nom-flex-fi: clipboard = ( http://fr.wiktionary.org/w/index.php?title=%page%&action=edit&redlink=1 ) sleep 500 send {F6} ; Positionne sur l'URL sleep 500 Send, {CTRLDOWN}v{CTRLUP}{ENTER} ; copie du clipboard WinWait, Création de %page% - Wiktionnaire - Google Chrome, ,5 if ErrorLevel ; si la page existe déjà, on log l'erreur { if ( test = "r" ) { FileAppend, %A_Now% %page% existe déjà `n, %Fic%fi-décl-valo.log } } else ; sinon on crée la page { IfWinNotActive, Création de %page% - Wiktionnaire - Google Chrome, , WinActivate, Création de %page% - Wiktionnaire - Google Chrome, WinWaitActive, Création de %page% - Wiktionnaire - Google Chrome, sleep 1000 Send {TAB} sleep 100 clipboard = ( == {{langue|fi}} == {{-flex-%type%-|fi}} '''%page%''' {{pron|%pron%|fi}} %l1% {{lien|%mot%|fi}}. ) if ( l3 ) { clipboard = ( %clipboard% %l3%. ) } else { if ( l2 ) { clipboard = ( %clipboard% %l2% {{lien|%mot%|fi}}. ) } } sleep 500 send ^v sleep 500 Send {TAB} sleep 500 ; Création du résumé clipboard = ( Création : Flexion créée automatiquement : %l1% [[%mot%#fi|%mot%]]. ) sleep 500 send ^v sleep 200 if ( test = "r" ) { Send {ENTER} sleep 2000 } } return ;