Difference between revisions 14568943 and 14576425 on frwiktionary

[[Catégorie:JackBot]]
<source lang=python>
#!/usr/bin/env python
# coding: utf-8
'''
Ce script formate les pages du Wiktionnaire, tous les jours après minuit depuis le Toolserver :
1) Retire certains doublons de modèles et d'espaces.
2) Ajoute les clés de tris, prononciations vides, et certains liens vers les conjugaisons.
3) Met à jour les liens vers les traductions (modèles trad, trad+, trad-, trad-début et trad-fin), et les classe par ordre alphabétique.
4) Ajoute les codes langues appropriés dans les modèles du Wiktionnaire du namespace 0 et paragraphes appropriés (dont "nocat=1" si une catégorie le justifie).
5) Complète les flexions de verbes en français à vérifier.
6) Traduit les importations de en.wikt.
7) Gère des modèles {{voir}} en début de page.
8) Ajoute les anagrammes
9) Teste les URL et indique si elles sont brisées
10) Remplace les modèles obsolètes
11) Créer des liens absents : http://fr.wiktionary.org/w/index.php?title=radiateur&diff=prev&oldid=14443668
12) Détecte les modèles à ajouter : http://fr.wiktionary.org/w/index.php?title=cl%C3%A9&diff=prev&oldid=14443625

Testé ici : http://fr.wiktionary.org/w/index.php?title=Utilisateur%3AJackBot%2Ftest&diff=14533806&oldid=14533695
'''

# Importation des modules
import catlib, pagegenerators, os, codecs, urllib, re, collections, socket, hyperlynx
from wikipedia import *

# Déclaration
language = "fr"
family = "wiktionary"
mynick = "JackBot"
site = getSite(language,family)
debogage = FalsTrue

# Modèles du site à traiter
limit6=94953
Modele = range(1, limit6+1)
# http://fr.wiktionary.org/wiki/Cat%C3%A9gorie:Mod%C3%A8les_de_type_de_mot_du_Wiktionnaire
Modele[1] = u'-adj-'
Modele[2] = u'-flex-adj-indéf-'
Modele[3] = u'-adj-dém-'
Modele[4] = u'-adj-excl-'
Modele[5] = u'-adj-indéf-'
(contracted; show full)Modele[798] = u'formel'
Modele[799] = u'gallicisme'
Modele[800] = u'abréviation'
Modele[801] = u'par ellipse'
Modele[802] = u'mélio'
Modele[803] = u'hapax'
Modele[804] = u'infographie'


limit4 = 805	# ébauches
Modele[806] = u'ébauche-exe'
Modele[807] = u'ébauche-pron'
Modele[808] = u'ébauche-syn'
Modele[809] = u'ébauche-étym-nom-scientifique'
Modele[810] = u'ébauche-trans'
Modele[811] = u'ébauche-déf'
Modele[812] = u'ébauche-étym'
Modele[813] = u'ébauche-pron'
Modele[814] = u'ébauche'
'''
# non traités
Modele[] = u'spécialement' 
Modele[] = u'T'
Modele[] = u'région'
Modele[] = u'régio'
Modele[] = u'régional'
'''
# Modèles régionaux, pb du nocat pour les prononciations
limit5 = 815
Modele[816] = u'Colombie'
Modele[817] = u'Commonwealth'
Modele[818] = u'Congo'
Modele[819] = u'Congo-Brazzaville'Modele[805] = u'accord genre ?'
Modele[806] = u'dépendant'
Modele[807] = u'argot scolaire'
Modele[808] = u'argot policier'

limit4 = 809	# ébauches
Modele[810] = u'ébauche-trans'
Modele[811] = u'ébauche-déf'
Modele[812] = u'ébauche-étym'
Modele[813] = u'ébauche-pron'
Modele[814] = u'ébauche'
Modele[815] = u'ébauche-exe'
Modele[816] = u'ébauche-pron'
Modele[817] = u'ébauche-syn'
Modele[818] = u'ébauche-étym-nom-scientifique'
'''
# non traités
Modele[] = u'spécialement' 
Modele[] = u'T'
Modele[] = u'région'
Modele[] = u'régio'
Modele[] = u'régional'
'''
# Modèles régionaux, pb du nocat pour les prononciations
limit5 = 819
Modele[820] = u'Congo-Kinshasa'
Modele[821] = u'Corse'
Modele[822] = u'Corée du Nord'
Modele[823] = u'Corée du Sud'
Modele[824] = u'Costa Rica'
Modele[825] = u'Côte d’Ivoire'
Modele[826] = u'Cuba'
(contracted; show full)Modele[941] = u'Burkina Faso'
Modele[942] = u'Cameroun'
Modele[943] = u'Canada'
Modele[944] = u'Catalogne'
Modele[945] = u'Champagne'
Modele[946] = u'Chili'
Modele[947] = u'Chine'


# Modèles de pronociation à synchroniser
Modele[948Modele[948] = u'Colombie'
Modele[949] = u'Commonwealth'
Modele[950] = u'Congo'
Modele[951] = u'Congo-Brazzaville'

# Modèles de pronociation à synchroniser
Modele[952] = u'en-conj-rég'
#Modele[] = u'fr-rég'
#Modele[] = u'fr-inv'

# Modèles des autres Wiktionnaires à convertir
LimitTemplate = 82
Template = range(1, LimitTemplate+1)
TemplateFR = range(1, LimitTemplate+1)
(contracted; show full)Template[62] = u'{{obsolete'
TemplateFR[62] = u'{{obsolète'
Template[63] = u'{{nautical'
TemplateFR[63] = u'{{marine'
Template[64] = u'{{figuratively '
TemplateFR[64] = u'{{figuré'
Template[65] = u'{{trans-see'
TemplateFR[65] = u'{{cf'

# \{\{l\|(.*)\|(.*)\}\} -> {{lien|$2|$1}}

Template[66] = u'proto:ine-pro'
TemplateFR[66] = u'indo-européen commun'
Template[67] = u'proto:alg-pro'
TemplateFR[67] = u'proto-algonquien'
Template[68] = u'proto:ath-pro'
TemplateFR[68] = u'proto-athapascan'
(contracted; show full)
		PageTemp = PageTemp.replace(u'{{DEFAULTSORT:', u'{{clé de tri|')
		PageTemp = PageTemp.replace(u'{{CLEDETRI:', u'{{clé de tri|')
		PageTemp = PageTemp.replace(u'{{clef de tri|', u'{{clé de tri|')
		if PageTemp.find(u'{{clé de tri') == -1:
			ClePage = CleDeTri(PageHS)
			if ClePage != u'' and ClePage != PageHS and ClePage.lower() != PageHS.lower():
				if 
PageTemp.rfind(u'\n\n[[') != -1:
					PageTemp2 = PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					if PageTemp2[4:5] == u':' or PageTemp2[5:6] == u':':
						PageTemp = PageTemp[0:PageTemp.rfind(u'\n\n[[')] + u'\n\n{{clé de tri|' + ClePage + u'}}' + PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					else:
						PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
				else:
					PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
							
		else:
			if PageTemp.find(u'{{clé de tri') != -1:
				PageTemp2 = PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|'):len(PageTemp)]
				ClePage = PageTemp2[0:PageTemp2.find(u'}}')]
			elif PageTemp.find(u'{{clef de tri') != -1:
				PageTemp2 = PageTemp[PageTemp.find(u'{{clef de tri|')+len(u'{{clef de tri|'):len(PageTemp)]
				ClePage = PageTemp2[0:PageTemp2.find(u'}}')]		
			if CleDeTri(PageHS) != ClePage and (PageTemp.find(u'{{langue|fr}}') != -1 or PageTemp.find(u'{{langue|eo}}') != -1 or PageTemp.find(u'{{langue|en}}') != -1 or PageTemp.find(u'{{langue|es}}') != -1 or PageTemp.find(u'{{langue|de}}') != -1 or PageTemp.find(u'{{langue|pt}}') != -1 or PageTemp.find(u'{{langue|it}}') != -1):
				#print CleDeTri(PageHS)
				#print ClePage
				summary = summary + u', {{clé de tri}} corrigée'
				PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')] + CleDeTri(PageHS) + PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')+PageTemp2.find(u'}}'):len(PageTemp)]
		while PageTemp.find(u'\n{clé de tri') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'\n{clé de tri')+1] + u'{' + PageTemp[PageTemp.find(u'\n{clé de tri'):len(PageTemp)]
		if PageTemp.find(baratin) != -1:
			PageTemp = PageTemp[0:PageTemp.find(baratin)] + PageTemp[PageTemp.find(baratin)+len(baratin):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutile'
		if PageTemp.find(u'{{clé de tri|}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|}}')] + PageTemp[PageTemp.find(u'{{clé de tri|}}')+len(u'{{clé de tri|}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutile'
		if PageTemp.find(u'{{clé de tri}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri}}')] + PageTemp[PageTemp.find(u'{{clé de tri}}')+len(u'{{clé de tri}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutile'
		if PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}') != -1 and PageTemp.find(u'{{-verb-pr-|fr}}') == -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')] + PageTemp[PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')+len(u'{{clé de tri|' + PageHS.lower() + u'}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutile'
	debogage == True: print u' ajout'
				if PageTemp.rfind(u'\n\n[[') != -1:
					PageTemp2 = PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					if PageTemp2[4:5] == u':' or PageTemp2[5:6] == u':':
						PageTemp = PageTemp[0:PageTemp.rfind(u'\n\n[[')] + u'\n\n{{clé de tri|' + ClePage + u'}}' + PageTemp[PageTemp.rfind(u'\n\n[['):len(PageTemp)]
					else:
						PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
				else:
					PageTemp = PageTemp + u'\n\n{{clé de tri|' + ClePage + u'}}\n'
							
		else:
			if debogage == True: print u' existante'
			if PageTemp.find(u'{{clé de tri|') != -1:
				PageTemp2 = PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|'):len(PageTemp)]
				ClePage = PageTemp2[0:PageTemp2.find(u'}}')]
				if CleDeTri(PageHS) != ClePage and (PageTemp.find(u'{{langue|fr}}') != -1 or PageTemp.find(u'{{langue|eo}}') != -1 or PageTemp.find(u'{{langue|en}}') != -1 or PageTemp.find(u'{{langue|es}}') != -1 or PageTemp.find(u'{{langue|de}}') != -1 or PageTemp.find(u'{{langue|pt}}') != -1 or PageTemp.find(u'{{langue|it}}') != -1):
					#print CleDeTri(PageHS)
					#print ClePage
					summary = summary + u', {{clé de tri}} corrigée'
					PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')] + CleDeTri(PageHS) + PageTemp[PageTemp.find(u'{{clé de tri|')+len(u'{{clé de tri|')+PageTemp2.find(u'}}'):len(PageTemp)]
		#if debogage == True: raw_input(PageTemp.encode(config.console_encoding, 'replace'))
		
		while PageTemp.find(u'\n{clé de tri') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'\n{clé de tri')+1] + u'{' + PageTemp[PageTemp.find(u'\n{clé de tri'):len(PageTemp)]
		if PageTemp.find(baratin) != -1:
			PageTemp = PageTemp[0:PageTemp.find(baratin)] + PageTemp[PageTemp.find(baratin)+len(baratin):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutile'
		if PageTemp.find(u'{{clé de tri|}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|}}')] + PageTemp[PageTemp.find(u'{{clé de tri|}}')+len(u'{{clé de tri|}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri|}} inutile'
		if PageTemp.find(u'{{clé de tri}}') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri}}')] + PageTemp[PageTemp.find(u'{{clé de tri}}')+len(u'{{clé de tri}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutile'
		if PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}') != -1 and PageTemp.find(u'{{-verb-pr-|fr}}') == -1:
			PageTemp = PageTemp[0:PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')] + PageTemp[PageTemp.find(u'{{clé de tri|' + PageHS.lower() + u'}}')+len(u'{{clé de tri|' + PageHS.lower() + u'}}'):len(PageTemp)]
			summary = summary + u', {{clé de tri}} inutile'
		
		if debogage == True: print u'Remplacements des balises'
		PageTemp = re.sub(ur'\[\[Category:', ur'[[Catégorie:', PageTemp)
		while PageTemp.find(u'</br>') != -1:
			PageTemp = PageTemp[0:PageTemp.find(u'</br>')] + u'<br/>' + PageTemp[PageTemp.find(u'</br>')+len(u'</br>'):len(PageTemp)]
		while PageTemp.find(u'<sup/>') != -1:
(contracted; show full)
					# Si on est dans un modèle spécial, le traiter, sinon par catégorie de génériques
					if not codelangue and (p < limit1 or p >= limit3) and Modele[p] != u'ébauche':
						PageEnd = u'{{formater|Code langue manquant dans ' + Modele[p] + u'}}\n' + PageBegin
						summary = u'Page à formater manuellement'
						sauvegarde(page,PageEnd, summary)
						return

					if Modele[p] == u'term' or Modele[p] == u'terme' or Modele[p] ==
 u'term_lien' or Modele[p] == u'régio' or Modele[p] == u'région':
						ModeleT = PageTemp[PageTemp.find("|")+1:PageTemp.find("}}")]
						for p2 in range(1,limit6):
							if Modele[p2] == ModeleT or Modele[p2] == ModeleT[0:1].lower() + ModeleT[1:len(ModeleT)]:
								if EstCodeLangue == "false":
									PageEnd = PageEnd + Modele[p2] + "|nocat=1}}"
								else:
									PageEnd = PageEnd + Modele[p2] + "|" + codelangue + "}}"
(contracted; show full)			return
		except AttributeError:
			print "AttributeError en sauvegarde"
			return
			
# Lancement
# Quotidiennement :

TraitementPage = modification(u'ukai')
'''
TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Codes langue manquants',True,u'')
TraitementCategorie = crawlerCat(u'Catégorie:Wiktionnaire:Flexions à vérifier',True,u'')
TraitementLiens = crawlerLink(u'Modèle:1ergroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:2egroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:3egroupe',u'')
TraitementLiens = crawlerLink(u'Modèle:trad',u'')
TraitementLiens = crawlerLink(u'Modèle:-',u'')
TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects:fr-verbe-flexion incomplet',False,u'')
TraitementLiens = crawlerLink(u'Modèle:-ortho-alt-',u'')
TraitementLiens = crawlerLink(u'Modèle:mascul',u'')
TraitementLiens = crawlerLink(u'Modèle:fémin',u'')
TraitementLiens = crawlerLink(u'Modèle:femin',u'')
TraitementLiens = crawlerLink(u'Modèle:sing',u'')
TraitementLiens = crawlerLink(u'Modèle:plur',u'')
TraitementLiens = crawlerLink(u'Modèle:pluri',u'')
TraitementLiens = crawlerLink(u'Modèle:=langue=',u'')
TraitementLiens = crawlerLink(u'Modèle:trad-',u'')
'''
# Modèles
TraitementFile = crawlerFile('articles_list.txt')
TraitementPage = modification(u'Utilisateur:JackBot/test')
TraitementLiens = crawlerLink(u'Modèle:terme',u'')
TraitementLiens = crawlerLink(u'Modèle:R:DAF8',u'')
TraitementLiens = crawlerLink(u'Modèle:Import:DAF8',u'')
TraitementLiensCategorie = crawlerCatLink(u'Modèles de code langue',u'')
TraitementCategorie = crawlerCat(u'Catégorie:Appels de modèles incorrects',True)

TraitementRecherche = crawlerSearch(u'clé de tri')
TraitementUtilisateur = crawlerUser(u'Utilisateur:JackBot')
TraitementRedirections = crawlerRedirects()
TraitementTout = crawlerAll(u'')
while 1:
	TraitementRC = crawlerRC()
'''
</source>