def ajouteralabdd(self, page): # Suppression d'un modèle chiant pour le calcul de date p = page.text.replace('{{1er}}', '1').replace('{{er}}', '') # Récupération des infos n = self.re_modele.search(p) if n: mod = BeBot.modeletodic(n.group(0)) categorie = n.group(2).replace('_', ' ') # Remise au propre de la casse categorie = categorie[0].upper() + categorie[1:].lower() date = datetime.datetime(1970, 1, 1) if 'date' in mod: o = self.re_date.search(mod['date']) if o: try: jour = int(o.group(1)) mois = BeBot.moistoint(o.group(2)) annee = int(o.group(3)) except: pywikibot.error("Problème de conversion de la date '%s' sur [[%s]]" % (o.group(0), page.title())) return False date = datetime.datetime(annee, mois, jour) else: pywikibot.error("Impossible de reconnaitre le format de date pour %s" % page.title()) return False # Sauvegarde curseur = self.conn.cursor() req = 'INSERT INTO %s ' % self.nom_base \ + '(titre, label, date) VALUES ("%s", "%s", "%s")' \ % (page.title(), categorie, date) if self.debug: #pywikibot.output("Ajout de %s" % page.title()) print('.',end="",flush=True) return try: curseur.execute(req) except sqlite3.Error as e: pywikibot.error("Erreur lors de l'INSERT :\n%s" % (e.args[0])) self.conn.commit() return True if page.namespace() == 0: pywikibot.error("Impossible de trouver le modèle AdQ/BA sur l'article %s" % page.title()) return False
def traduit_de(self, page): """ Vérifie et ajoute le {{Traduit de}} à la page de discussion """ disc = pywikibot.Page(self.site, page.title().replace('/Traduction', '')) if disc.isRedirectPage(): disc = disc.getRedirectTarget() m = self.re_traduitde.search(disc.text) if not m: n = self.re_suivi.search(page.text) # Récupération des infos de traduction if n: a = BeBot.modeletodic(n.group(0)) if not a.has_key(1) or not a.has_key(2): pywikibot.warning(";;; Impossible de trouver le nom ou la langue d'origine pour %s" % page.title()) return False langue = a[1] article = a[2].replace('_', ' ') if 'status' in a: statut = a['status'] else: pywikibot.output(";;; Statut introuvable -> on passe") pywikibot.output(a) return False if statut == "1": pywikibot.output(";;; Statut 'Demande' -> ne pas ajouter le {{Traduit de}}") return True plus = '' if a.has_key('oldid') and a['oldid'] != '' and a['oldid'] != '830165' : # On utilise le oldid pour retrouver la date oldid = a['oldid'] if self.sites.has_key(langue): sit = self.sites[langue] else: sit = pywikibot.Site(langue) self.sites[langue] = sit orig = pywikibot.Page(sit, article) if orig.isRedirectPage(): orig = orig.getRedirectTarget() date = '' try: for o in orig.fullVersionHistory(): revis = o[0] if revis == oldid: date = o[1] break; except: #Nopage pywikibot.warning(";;; Impossible de lire l'historique pour %s:%s" % (langue, orig.title())) return False #pywikibot.output(date.__str__()[8:10]) date = date.__str__() if date != '': jour = date[8:10].lstrip('0') mois = date[5:7].lstrip('0') annee = date[0:4] plus = "|%s/%s/%s|%s" % (jour, mois, annee, oldid) else: pywikibot.warning("Ne peut dater une ancienne révision de %s" % page.title()) appel = '{{Traduit de|%s|%s%s}}\n' % (langue, article, plus) #BeBot.diff(disc.text, appel + disc.text) disc.text = appel + disc.text BeBot.save(disc, commentaire=self.resume+' : Ajout du bandeau de licence', debug=self.debug) self.stats['traduitde'] += 1 return True else: pywikibot.warning('Impossible de trouver les infos de traduction pour %s' % page.title()) return True