Utilisateur:UnsuiBot/script

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

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.
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
;