import pywikibot
import time
from pywikibot.exceptions import ServerError, TimeoutError

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

# Pàgina de l'usuari on s'afegiran els resultats
user_page = pywikibot.Page(site, "Usuari:Rebot/Enllaços externs")

# Funció per buscar els articles que compleixen les condicions
def buscar_articles():
    for page in site.allpages(start="!"):
        # Ignora les pàgines de discussió i altres pàgines especials
        if page.namespace() != 0:
            continue

        retries = 5  # Nombre de reintents si hi ha un error
        success = False

        while retries > 0 and not success:
            try:
                # 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:
                    # Compta els asteriscs després de la secció
                    asterisk_count = content[index:].count('*')
                    print(f'Analitzant l\'article "{page.title()}" -> {asterisk_count}')

                    # Comprova si hi ha més de 5 asteriscs o cap
                    if asterisk_count > 5 or asterisk_count == 0:
                        
                        # Afegeix l'article i el nombre d'asteriscs a la pàgina de l'usuari
                        user_page.text += f'* [[{page.title()}]] ({asterisk_count})<br />'
                        user_page.save("Afegint article")
                
                success = True  # Si tot ha anat bé, surt del bucle de reintents

            except (ServerError, TimeoutError) as e:
                print(f"Error amb la pàgina {page.title()}: {e}. Reintentant...")
                retries -= 1
                time.sleep(10)  # Espera 10 segons abans de reintentar

            except Exception as e:
                print(f"Error inesperat amb la pàgina {page.title()}: {e}")
                break  # Si hi ha altres tipus d'errors, surt del bucle

# Crida la funció per buscar els articles
buscar_articles()