Difference between revisions 14708474 and 14747086 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 = False⏎ debogageLent = False # Modèles du site à traiter limit6=9603 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[811] = u'planche à roulettes' Modele[812] = u'volcanologie' Modele[813] = u'infographie' Modele[814] = u'football américain' Modele[815] = u'football canadien' Modele[816] = u'geog' # à remplacer ? Modele[817] = u'scolaire' ⏎ limit4 = 818 # ébauches Modele[818] = u'ébauche-étym-nom-scientifique' Modele[819] = u'ébauche-trans'Modele[818] = u'logistique' Modele[819] = u'lutherie' limit4 = 819 # ébauches Modele[820] = u'ébauche-déf' Modele[821] = u'ébauche-étym' Modele[822] = u'ébauche-pron' Modele[823] = u'ébauche' Modele[824] = u'ébauche-exe' Modele[825] = u'ébauche-pron' Modele[826] = u'ébauche-syn' Modele[827] = u'ébauche-étym-nom-scientifique' Modele[828] = u'ébauche-trans'⏎ ''' # 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 = 827 Modele[827] = u'Écosse' Modele[828] = u'Espagne' Modele[829] = u'États-Unis'9 Modele[830] = u'Europe' Modele[831] = u'France' Modele[832] = u'Franche-Comté' Modele[833] = u'Gascogne' Modele[834] = u'Gaspésie' Modele[835] = u'Guadeloupe' Modele[836] = u'Guinée' (contracted; show full)Modele[951] = u'Congo-Brazzaville' Modele[952] = u'Congo-Kinshasa' Modele[953] = u'Corse' Modele[954] = u'Corée du Nord' Modele[955] = u'Corée du Sud' Modele[956] = u'Costa Rica' Modele[957] = u'Côte d’Ivoire' Modele[958] = u'Cuba' ⏎ Modele[959] = u'Écosse' Modele[960] = u'Espagne' Modele[961] = u'États-Unis' # Modèles de pronociation à synchroniser Modele[95962] = 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) # Retrait des espaces intégrés au modèle while PageTemp.find(u'|pinv= ') != -1: PageTemp = PageTemp[0:PageTemp.find(u'|pinv= ')+len(u'|pinv=')] + PageTemp[PageTemp.find(u'|pinv= ')+len(u'|pinv= '):len(PageTemp)] while PageTemp.find(u'|pinv=. ') != -1: PageTemp = PageTemp[0:PageTemp.find(u'|pinv=. ')+len(u'|pinv=.')] + PageTemp[PageTemp.find(u'|pinv=. ')+len(u'|pinv=. '):len(PageTemp)] #while PageTemp.find(u'|pinv= ') != -1: # PageTemp = PageTemp[0:PageTemp.find(u'|pinv= ')+len(u'|pinv=')] + PageTemp[PageTemp.find(u'|pinv= ')+len(u'|pinv= '):len(PageTemp)] while PageTemp.find(u'[[Annexe:Couleurs en français]]') != -1: (contracted; show full) summary = summary + u', doublon {{R:Littré}}' while PageTemp.find(u'\n{{R:') != -1: PageTemp = PageTemp[0:PageTemp.find(u'\n{{R:')+1] + u'*' + PageTemp[PageTemp.find(u'\n{{R:')+1:len(PageTemp)] while PageTemp.find(u'\n{{Import:') != -1: PageTemp = PageTemp[0:PageTemp.find(u'\n{{Import:')+1] + u'*' + PageTemp[PageTemp.find(u'\n{{Import:')+1:len(PageTemp)] # Classement des traductions if debogage == True: print u'Classement des traductions' PageEnd = u'' while PageTemp.find(u'{{T|') != -1: PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'{{T|')] PageTemp = PageTemp[PageTemp.find(u'{{T|'):len(PageTemp)]Détection d'une première traduction aux normes regex = u'\* ?{{[a-z][a-z][a-z]?\-?[a-z]?[a-z]?[a-z]?}} :' PageEnd = u'' while PageTemp.find(u'{{trad-début')!=-1: PageEnd = PageEnd + PageTemp[:PageTemp.find(u'{{trad-début')] PageTemp = PageTemp[PageTemp.find(u'{{trad-début'):] PageEnd = PageEnd + PageTemp[:PageTemp.find(u'\n')+1] PageTemp = PageTemp[PageTemp.find(u'\n')+1:] if re.search(regex, PageTemp): if re.search(regex, PageTemp).start() < PageTemp.find(u'{{'): if debogage == True: print u'Ajout d\'un modèle T' PageTemp = PageTemp[:PageTemp.find(u'{{')+2] + u'T|' + PageTemp[PageTemp.find(u'{{')+2:] PageTemp = PageEnd + PageTemp # Classement des traductions (et ajout des modèles T après le premier de la liste) if debogage == True: print u'Classement des traductions' PageEnd = u'' while PageTemp.find(u'{{T|') != -1: PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'{{T|')] PageTemp = PageTemp[PageTemp.find(u'{{T|'):len(PageTemp)] # Ajout des T PageTemp2 = PageTemp[PageTemp.find(u'\n'):] if re.search(regex, PageTemp2): if re.search(regex, PageTemp2).start() < PageTemp2.find(u'{{'): if debogage == True: print u'Ajout d\'un modèle T' PageTemp = PageTemp[:PageTemp.find(u'\n')+PageTemp2.find(u'{{')+2] + u'T|' + PageTemp[PageTemp.find(u'\n')+PageTemp2.find(u'{{')+2:]⏎ # Rangement de la ligne de la traduction par ordre alphabétique de la langue dans PageEnd langue1 = PageTemp[PageTemp.find(u'{{T|')+4:PageTemp.find(u'}')] if langue1.find(u'|') != -1: langue1 = langue1[0:langue1.find(u'|')] if langue1 != u'': Langue1 = Page(site,u'Modèle:' + langue1) try: PageTemp2 = Langue1.get() except wikipedia.NoPage: (contracted; show full) trad = u'false' codelangue = None position = 1 p = 1 while position > -1: # On sauvegarde la partie traitée d'une page provisoire dans une page finale jusqu'à disparition de la première #print(PageEnd.encode(config.console_encoding, 'replace')[0:1000]) #print(PageTemp.encode(config.console_encoding, 'replace')[0:1000]) if debogage Lent == True: if codelangue is None: print u'Boucle langue' else: print u'Boucle langue : ' + codelangue ''' Eliminer les {{e}}... while PageTemp.find(u'}}') != -1 and PageTemp.find(u'}}') != PageTemp.find(u'}} ') and PageTemp.find(u'}}') != PageTemp.find(u'}}\n') and PageTemp.find(u'}}') != PageTemp.find(u'}}.'): (contracted; show full) while PageTemp.find(u'{{') < PageTemp.find(u'}}') and PageTemp.find(u'{{') != -1 and PageTemp.find(u'}}') != -1: if debogage == True: print u'Modèle inclu dans ' print PageTemp[:PageTemp.find(u'}}')].encode(config.console_encoding, 'replace') PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] #raw_input(PageTemp.encode(config.console_encoding, 'replace'))⏎ # Fin du nom du modèle if PageTemp.find("|") > PageTemp.find("}}"): position = PageTemp.find("}}") elif or PageTemp.find("|") == -1: position = PageTemp.find("}}") else: position = PageTemp.find("|") if position == -1: if debogage == True: print u'Erreur ligne 2271 : modèle brisé' return ⏎ PageEnd = PageEnd + PageTemp[0:PageTemp.find(u'}}')+2] PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break # pb https://fr.wiktionary.org/w/index.php?title=ordre&curid=343&diff=14727763&oldid=14725107⏎ # 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': # pb -nom-|fro}} # '''hazard''' {{pron||fro}} {{m}} # # {{variante de|hazart|fro}}. PageEnd = u'{{formater|Code langue manquant dans ' + Modele[p] + u' après le caractère ' + str(len(PageEnd)) + u'}}\n' + PageBegin (contracted; show full) while PageTemp2.find(u'g') != -1 and PageTemp2.find(u'g') < PageTemp2.find(u'}}') and (PageTemp2.find(u'g') < PageTemp2.find(u'|') or PageTemp2.find(u'|') == -1): PageTemp = PageTemp[0:PageTemp.find(u'g')] + u'ɡ' + PageTemp[PageTemp.find(u'g')+1:len(PageTemp)] #if codelangue == u'es': β/, /ð/ et /ɣ/ au lieu de de /b/, /d/ et /ɡ/⏎ if PageTemp[0:8] == u'pron||}}': PageEnd = PageEnd + PageTemp[0:PageTemp.find("}}")] + codelangue + "}}" PageTemp = PageTemp[PageTemp.find("}}")+2:len(PageTemp)] break elif PageTemp[position:position+3] == u'|}}' or PageTemp[position:position+4] == u'| }}': PageEnd = PageEnd + PageTemp[0:position] + "||" + codelangue + "}}" (contracted; show full) PageTemp = PageTemp[0:PageTemp.find(u'Ț')] + u'Ţ' + PageTemp[PageTemp.find(u'Ț')+1:len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'fon': while PageTemp.find(u'ε') != -1 and PageTemp.find(u'ε') < PageTemp.find(u'\n'): PageTemp = PageTemp[0:PageTemp.find(u'ε')] + u'ɛ' + PageTemp[PageTemp.find(u'ε')+1:len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'nan': PageTemp = PageTemp[0:PageTemp.find(u'nan# http://fr.wiktionary.org/wiki/Mod%C3%A8le:code_interwiki elif PageTemp2[0:PageTemp2.find(u'|')] == u'cmn': PageTemp = PageTemp[0:PageTemp.find(u'cmn')] + u'zh' + PageTemp[PageTemp.find(u'cmn')+len(u'cmn'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'gsw': PageTemp = PageTemp[0:PageTemp.find(u'gsw')] + u'als' + PageTemp[PageTemp.find(u'gsw')+len(u'gsw'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] +== u'zh-min-nanko-Hani': PageTemp = PageTemp[0:PageTemp.find(u'ko-Hani')] + u'ko' + PageTemp[PageTemp.find(u'nko-Hani')+len(u'nko-Hani'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'ko-hanja': PageTemp = PageTemp[0:PageTemp.find(u'ko-hanja')] + u'ko' + PageTemp[PageTemp.find(u'ko-hanja')+len(u'ko-hanja'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'ko-Hani': PageTemp = PageTemp[0:PageTemp.find(u'ko-Hani')] + u'ko' + PageTemp[PageTemp.find(u'ko-Hani')+len(u'ko-Hanilzh': PageTemp = PageTemp[0:PageTemp.find(u'lzh')] + u'zh-classical' + PageTemp[PageTemp.find(u'lzh')+len(u'lzh'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'nan': PageTemp = PageTemp[0:PageTemp.find(u'nan')] + u'zh-min-nan' + PageTemp[PageTemp.find(u'nan')+len(u'nan'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'rup': PageTemp = PageTemp[0:PageTemp.find(u'rup')] + u'roa-rup' + PageTemp[PageTemp.find(u'rup')+len(u'rup'):len(PageTemp)] elif PageTemp2[0:PageTemp2.find(u'|')] == u'yue': PageTemp = PageTemp[0:PageTemp.find(u'yue')] + u'zh-yue' + PageTemp[PageTemp.find(u'yue')+len(u'yue'):len(PageTemp)] # Bug du site fermé, ex : [[chat]]⏎ if PageTemp2[0:PageTemp2.find(u'|')] == u'mo': break # Bug du site fermé, voir [[chat]]⏎ ⏎ # Identification des Wiktionnaires hébergeant les traductions SiteExt = u'' PageExterne = u'' PageTemp2 = PageTemp[position+1:len(PageTemp)] PageTemp3 = PageTemp2[PageTemp2.find(u'|')+1:len(PageTemp2)] if PageTemp2[0:PageTemp2.find(u'|')] == "": break elif PageTemp3.find(u'}}') == "" or not PageTemp3.find(u'}}'): break (contracted; show full) if PageTemp != u"{{/Stop}}": pywikibot.output (u"\n*** \03{lightyellow}Arrêt d'urgence demandé\03{default} ***") exit(0) def sauvegarde(PageCourante, Contenu, summary): result = "ok" if debogage == True: print(Contenu[len(Contenu)-2000if len(Contenu) < 6000: print(Contenu.encode(config.console_encoding, 'replace')) else: taille = 3000 print(Contenu[:taille].encode(config.console_encoding, 'replace')) print u'\n[...]\n' print(Contenu[len(Contenu)-taille:].encode(config.console_encoding, 'replace')) result = raw_input("Sauvegarder ? (o/n) ") if result != "n" and result != "no" and result != "non": if PageCourante.title().find(u'Utilisateur:JackBot/') == -1: ArretDUrgence() if not summary: summary = u'[[Wiktionnaire:Structure des articles|Autoformatage]]' try: PageCourante.put(Contenu, summary) except wikipedia.NoPage: (contracted; show full) 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_listWTin.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> All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://fr.wiktionary.org/w/index.php?diff=prev&oldid=14747086.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|