Vés al contingut

Usuari:Rebot/EEromputs

De la Viquipèdia, l'enciclopèdia lliure
# Elimina enllaços externs (d'aquesta secció) amb la plantilla {{Enllaç no actiu}}
import pywikibot
import re
import time
from pywikibot.exceptions import (
    ServerError,
    TimeoutError,
    SiteDefinitionError,
    NoPageError,
    APIError,
)

# Configura l'idioma de la Viquipèdia
site = pywikibot.Site("ca", "wikipedia")

# Defineix l'expressió regular per cercar la plantilla {{Enllaç no actiu}}
pattern = r'\n\*((?!ref|Ref).)*{{Enllaç no actiu((?!ref|Ref).)*\n'

# Funció per buscar els articles que contenen la plantilla {{Enllaç no actiu}}
def buscar_articles():
    retries = 5  # Nombre màxim de reintents
    wait_time = 60  # Temps d'espera entre reintents (en segons)

    # Obté la pàgina de la plantilla {{Enllaç no actiu}}
    template_page = pywikibot.Page(site, "Plantilla:Enllaç no actiu")

    # Obté les pàgines que contenen la plantilla
    for page in template_page.embeddedin(namespaces=0):
        for attempt in range(retries):
            try:
                # Ignora les pàgines de discussió i altres pàgines especials
                if page.namespace() != 0:
                    continue

                # Obtenir el contingut de la pàgina
                content = page.text

                # Troba la secció "== Enllaços externs =="
                index = content.find("== Enllaços externs ==")

                if index != -1:  # Si es troba la secció
                    # Troba la pròxima secció després de "== Enllaços externs =="
                    next_section_match = re.search(r'\n== .+ ==\n', content[index + len("== Enllaços externs =="):])
                    if next_section_match:
                        next_section_index = next_section_match.start() + index + len("== Enllaços externs ==")
                    else:
                        next_section_index = len(content)

                    # Obté el contingut entre "== Enllaços externs ==" i la següent secció
                    section_content = content[index:next_section_index]

                    # Comprova si la plantilla {{Enllaç no actiu}} està present en aquesta secció
                    if re.search(pattern, section_content):
                        # Realitza la substitució
                        new_content = re.sub(pattern, '\n', section_content)
                        
                        # Actualitza el contingut de la pàgina amb el nou contingut
                        page.text = content[:index] + new_content + content[next_section_index:]
                        page.save(summary="eliminant enllaços externs trencats")
                        print("\t Canvis fets a:", page.title())
                    else:
                        print("Cap canvi a fer a:", page.title())
                else:
                    print("No hi ha 'Enllaços externs' a:", page.title())
                
                break  # Surt del bucle de reintents si l'operació ha tingut èxit
            except (ServerError, TimeoutError, SiteDefinitionError, NoPageError, APIError) as e:
                print(f"Error: {e}. Reintentant en {wait_time} segons...")
                time.sleep(wait_time)  # Espera abans de reintentar
            except Exception as e:
                print(f"Error inesperat: {e}. S'atura l'operació.")
                break  # Surt del bucle de reintents si es troba un error no esperat

buscar_articles()