def run(self): ################################## ##### Candidatures cats = [ pywikibot.Page(self.site, u"Modèle:Lien AdQ"), pywikibot.Page(self.site, u"Modèle:Lien BA") ] for c in cats: for m in c.backlinks(namespaces=0): if m.title() not in self.ignor_list: # ... alors prendre la page de trad tradpage = BeBot.togglePageTrad(m) for t in self.traductions: if t.title() == tradpage.title(): #Vérification de la correspondance des langues cibles cibleTrad = self.langueCible(tradpage)[0] for cible in self.langueCible(m): if cibleTrad == cible: self.candidats.append([tradpage, cibleTrad]) break; break; ################################## ##### Mise à jour du suivi for tq in self.tradQualite: #Tri par statut statut = 0 for cat in tq.categories(): # pywikibot.output(cat.title()) if cat.title() == u"Catégorie:Article à traduire": #1 statut = 1 break elif cat.title() == u"Catégorie:Article en cours de traduction": #2 statut = 2 break elif cat.title() == u"Catégorie:Article à relire": #3 statut = 3 break elif cat.title() == u"Catégorie:Article en cours de relecture": #4 statut = 4 break elif cat.title() == u"Catégorie:Traduction terminée": #5 statut = 5 break self.trads[statut].append(tq) ### Publication des listings self.publier(u'DemandeTraduction', self.trads, 1) self.publier(u'EnTraduction', self.trads, 2) self.publier(u'DemandeRelecture', self.trads, 3) self.publier(u'EnRelecture', self.trads, 4) # Cas de statut 5 (terminé) for pt in self.trads[5]: etat_label = 0 for cat in BeBot.togglePageTrad(pt).categories(): if cat.title() == u"Catégorie:Article de qualité" or cat.title() == u'Catégorie:Bon article' : etat_label = 2 break self.term_et_label[etat_label].append(pt) self.publier(u'Labellisées', self.term_et_label, 2, True) #pywikibot.Page(self.site, u"Projet:Suivi des articles de qualité des autres wikipédias/Traduction/En attente d'être labellisées").put(self.genererListing(self.term_et_label[1]), comment=self.resumeListing) self.publier(u'Terminées sans label', self.term_et_label, 0, False)
def run(self): self.label_se = self.lycos(self.nom_base, \ conditions="traduction IS NULL", limite=self.limite_label_se) art_etrangers = self.lycos(self.nom_base, conditions="traduction IS NOT NULL") art_fr = self.lycos('contenu_de_qualite_fr') for page_et, infos_et in art_etrangers.items(): eq_fr = infos_et['traduction'] if art_fr.has_key(eq_fr): self.label_deux[page_et] = infos_et else: page_trad = BeBot.togglePageTrad(pywikibot.Page(self.site_fr, eq_fr)) if page_trad.exists(): self.label_trad[page_et] = infos_et self.label_trad[page_et]['souspage_trad'] = page_trad ipt = self.infos_page_suivi(page_trad) self.label_trad[page_et]['statut'] = ipt['statut'] self.label_trad[page_et]['progression'] = ipt['progression'] else: self.label_nofr[page_et] = infos_et self.label_nofr[page_et]['taille_fr'] = BeBot.taille_page( \ pywikibot.Page(self.site_fr, eq_fr)) self.total = len(self.label_se) + len(self.label_nofr) \ + len(self.label_deux) + len(self.label_trad)
def clore_traduction(self, page): """ Clôt une traduction """ #pywikibot.output("&&& clore : %s" % page.title()) page.text = self.re_statut.sub('|status=5', page.text) com = self.resume BeBot.save(page, commentaire=com, debug=self.debug) self.retirer_le_modele_Traduction(BeBot.togglePageTrad(page)) self.stats['cloture'] += 1
def traduction(self, page): """ Donne la page de suivi ou l'interwiki vers fr """ if self.langue == 'fr': pt = BeBot.togglePageTrad(page) if pt.exists(): return pt.title() else: return None else: res = self.interwikifrRE.search(page.text) if res is not None: return res.group('iw') else: return None
def __init__(self, site, log): self.resume = u"Recherche et suivi des traductions issues d'un article labellisé" self.resumeListing = u"Mise à jour du suivi des traductions issues d'un article labellisé" self.site = site self.log = log self.candidats = [] # Liste des pages de traduction contenant aussi un modele lien + le code langue commun self.tradQualite = [] # Les traductions de qualité connues # RE self.modeleLienRE = re.compile("\{\{(Lien (AdQ|BA)|Link (FA,BA))\|(\w+)\}\}", re.LOCALE) self.modeleTradRE = re.compile("\{\{(Traduction/Suivi|Translation/Information)[^\|\}}]*\|(\w+)\|", re.LOCALE) self.traductions = [] # Pages en cours de traduction cats = [u"Article à traduire", u"Article à relire", u"Article en cours de traduiction", u"Article en cours de relecture"] for cat in cats: c = pywikibot.page.Category(self.site, u"Catégorie:"+cat) for t in c.members(): self.traductions.append(t) cats = [] self.ignor_list = u'' # On ignore les pages qui ont déjà le paramètre adq/ba tmp = [] c1 = pywikibot.Category(self.site, u"Catégorie:Traduction d'un Article de Qualité") cats.append(pagegenerators.CategorizedPageGenerator(c1)) c2 = pywikibot.Category(self.site, u"Catégorie:Traduction d'un Bon Article") cats.append(pagegenerators.CategorizedPageGenerator(c2)) gen = pagegenerators.DuplicateFilterPageGenerator(pagegenerators.CombinedPageGenerator(cats)) gen = pagegenerators.PreloadingGenerator(gen, step=125) for tion in gen: a = BeBot.togglePageTrad(tion).title() tmp.append(a.replace('(', '\\x28').replace(')', '\\x29')) #Remplacement des parenthèses à cause d'un problème de comparaison de chaine utf-8 ; ex : Timée (Platon) self.tradQualite.append(tion) self.ignor_list += u' %s ;;' % a #Pages de traductions d'articles de qualité classées par statut self.trads = [ [], [], [], [], [], [] ] #Traductions terminées sans label, en attente de label, ou labellisées self.term_et_label = [ [], [], [] ]