Utilisateur:Arbinger bot/code.py

import pywikibot

import re
good=0
add=0
def extraire_elements(chaine_debut, chaine_fin, chaine_complete):
    """
    Extrait une liste d'éléments délimités par une chaîne de début et une chaîne de fin.
    Retourne la liste d'éléments extraits.
    Si les chaînes de début et de fin ne sont pas trouvées, retourne une liste vide.
    """

    # Recherche de l'index de début
    index_debut = chaine_complete.find(chaine_debut)

    # Vérification si l'index de début est trouvé
    if index_debut != -1:
        # Recherche de l'index de fin à partir de l'index de début
        index_fin = chaine_complete.find(chaine_fin, index_debut + len(chaine_debut))

        # Vérification si l'index de fin est trouvé
        if index_fin != -1:
            # Extraction de la sous-chaîne
            sous_chaine = chaine_complete[index_debut + len(chaine_debut):index_fin]

            # Division de la sous-chaîne en éléments séparés par "|"
            elements = sous_chaine.split('|')

            return elements

    # Retourne une liste vide si les chaînes de début ou de fin ne sont pas trouvées
    return []
# Supposons que vous avez déjà défini la fonction extraire_elements comme mentionné précédemment

def modifier_title(title, ligne):
    add = 0
    """
    Modifie la chaîne title en fonction des conditions spécifiées.
    """

    portail_template = "{{portail|"

    # Convertir le titre en minuscules pour les comparaisons
    title_lower = title.lower()

    if portail_template in title:
        liste_portail = extraire_elements(portail_template, "}}", title)

        if len(liste_portail) > 0:
            if ligne in liste_portail:
                add += 1
                return title
            else:
                # Utilisation de la méthode join pour créer une chaîne avec les éléments de la liste
                new_portail = portail_template + "{}".format("|".join(liste_portail + [ligne])) + "}}"
                title = re.sub(fr"{portail_template}", new_portail, title, flags=re.IGNORECASE)
                return title
        else:
            title += portail_template + "{}".format(ligne) + "}}"
            return title
    elif "{{Portail|" in title:
        liste_portail = extraire_elements("{{Portail|", "}}", title)

        if len(liste_portail) > 0:
            if ligne in liste_portail:
                add += 1
                return title
            else:
                # Utilisation de la méthode join pour créer une chaîne avec les éléments de la liste
                new_portail = "{{Portail|" + "{}".format("|".join(liste_portail + [ligne])) + "}}"
                title = re.sub(fr"{{Portail|", new_portail, title, flags=re.IGNORECASE)
                return title
        else:
            title += "{{Portail|" + "{}".format(ligne) + "}}"
            return title
    else:
        title += "{{Portail|" + "{}".format(ligne) + "}}"

    return title

# Exemple d'utilisation
article_text = "Le contenu de votre article ici."
title = str(article_text)
ligne = "NouveauPortail"

# Appel de la fonction pour modifier le titre
title = modifier_title(title, ligne)

# Affichage du titre modifié
print("Title modifié :", title)

# Exemple d'utilisation
article_text = "Le contenu de votre article ici."
title = str(article_text)
ligne = "NouveauPortail"

# Appel de la fonction pour modifier le titre
title = modifier_title(title, ligne)

# Affichage du titre modifié
print("Title modifié :", title)

# Exemple d'utilisation


site = pywikibot.Site('fr', 'wikipedia')
liste=pywikibot.Page(site,"Utilisateur:Arbinger_bot/portail")
print(liste.text)
# Chaîne de caractères avec des sauts de ligne
chaine = "Première ligne\nDeuxième ligne\nTroisième ligne"

# Utilisation de splitlines() pour obtenir une liste de lignes
lignes = liste.text.splitlines()
def main():
# Affichage des lignes
    for ligne in lignes:
        #print(ligne)
        categ = pywikibot.Category(site, ligne)
        #print(categ.articles(recurse=1, namespaces=0))
        for article in categ.articles(recurse=1, namespaces=0):
            ancien_texte = str(article.text)
            nouveau_texte = modifier_title(title, ligne)
            if ancien_texte != nouveau_texte:
                print(article.title())
                editor = pywikibot.editor.TextEditor()
                text_apres = editor.edit(nouveau_texte)
                pywikibot.showDiff(ancien_texte,text_apres)
                choice = pywikibot.input_choice( 'Do you want to accept these changes?', [('yes', 'y'), ('No', 'n')], default='N')
                if choice == 'y':
                    print('Envoi de la modif de {}...'.format(article.title()))
                    article.put(nouveau_texte, "ajout du portail {}, test en cours ".format(ligne))
                
main()