# Pywikibot

Pywikibot es una poderosa herramienta de software diseñada para automatizar tareas repetitivas en Wikipedia y otros proyectos Wikimedia. Es un marco de trabajo (framework) escrito en Python que permite a los usuarios interactuar de manera programática con las APIs de MediaWiki, facilitando desde ediciones sencillas hasta operaciones masivas en múltiples páginas. Su importancia radica en su capacidad para ahorrar tiempo y esfuerzo, especialmente en proyectos grandes o complejos, permitiendo a los usuarios enfocarse en tareas más creativas y menos repetitivas.
En esta guía, aprenderás a instalar, configurar y utilizar Pywikibot, con un enfoque práctico que te permitirá aplicar inmediatamente lo aprendido en tus propios proyectos. A lo largo del artículo, se proporcionarán ejercicios y reflexiones para ayudarte a consolidar tus conocimientos y enfrentar desafíos comunes.

## Sección teórica

Pywikibot funciona como un conjunto de scripts que interactúan con la API de MediaWiki, la plataforma en la que se basan Wikipedia y otros proyectos Wikimedia. Utiliza peticiones HTTP para realizar acciones como leer y editar páginas, gestionar usuarios, y trabajar con categorías y plantillas.
El bot opera en un ciclo de solicitud-respuesta: envía una solicitud a la API y recibe una respuesta en formato JSON, que luego procesa para realizar las acciones programadas. Pywikibot es altamente modular, permitiendo a los usuarios personalizar scripts según sus necesidades específicas, lo que lo convierte en una herramienta versátil y adaptable.

### Conceptos clave

* API de MediaWiki: Interfaz que permite a las aplicaciones interactuar con MediaWiki.
* Scripts: Programas que automatizan tareas específicas.
* JSON: Formato estándar para la transferencia de datos entre un cliente y un servidor.

## Requisitos previos e instalación
### Requisitos previos

Antes de comenzar con la instalación de Pywikibot, es importante tener conocimientos básicos en:
* Python: Familiaridad con la sintaxis y conceptos fundamentales como variables, bucles y funciones.
* Entornos de desarrollo: Habilidad para configurar y gestionar entornos de desarrollo en Python.
Además, necesitarás:
* Acceso a una cuenta en un proyecto Wikimedia: como Wikipedia, Wikidata, etc.
* Permisos adecuados para realizar ediciones automatizadas: consulta las políticas del proyecto específico en el que deseas trabajar.

### Guía de instalación
#### Paso 1: Configurar el entorno de Python

* Instalar Python: Asegúrate de tener Python instalado en tu sistema. Puedes descargarlo desde python.org.
* Crear un entorno virtual (opcional pero recomendado):

#### Paso 2: Descargar e instalar Pywikibot

* Descargar Pywikibot: Puedes obtener Pywikibot clonando el repositorio oficial desde GitHub:
* Instalar dependencias:

#### Paso 3: Configurar Pywikibot

* Iniciar el script de configuración:
Sigue las instrucciones para configurar tu bot. Necesitarás ingresar tu nombre de usuario y seleccionar el proyecto en el que trabajarás.
* Autenticar el bot: Pywikibot te guiará a través del proceso de autenticación para obtener un token de acceso a tu cuenta de Wikimedia.

### Nota

El proceso de instalación puede variar ligeramente según el sistema operativo. Asegúrate de consultar la documentación oficial para instrucciones detalladas específicas a tu sistema.

## Ejercicio práctico 1
### Objetivo

Instalar Pywikibot y configurar un bot básico

### Instrucciones

* Instala Pywikibot siguiendo las instrucciones de la sección anterior.
* Configura tu bot utilizando el script generate_user_files.
* Crea un script simple que edite una página de prueba en tu cuenta de Wikimedia. El siguiente ejemplo muestra cómo reemplazar un texto en una página:

### Reflexión

* ¿Qué desafíos enfrentaste al configurar tu bot?
* ¿Cómo podrías mejorar el proceso de edición automatizada?

## Conceptos básicos de uso

Pywikibot permite realizar diversas tareas a través de sus scripts, que pueden ser personalizados para ajustarse a tus necesidades. A continuación, se describen algunos conceptos básicos para empezar a utilizar Pywikibot.

### Configuración de tareas básicas

* Editar páginas: Puedes utilizar el script edit.py para modificar el contenido de una página.
* Mover páginas: Con movepages.py, puedes cambiar el nombre de una página.
* Categorizar páginas: El script category.py te permite añadir o remover categorías de múltiples páginas.

### Ejemplo de script básico

El siguiente script busca y reemplaza texto en una serie de páginas dentro de una categoría:

## Ejercicio práctico 2
### Objetivo

Escribir un script que automatice una tarea específica.

### Instrucciones

* Escribe un script que actualice todas las plantillas de un tipo específico en una categoría.
* Prueba tu script en una cuenta de prueba para evitar errores en un entorno de producción.
* Reflexiona sobre el proceso y considera cómo podrías optimizarlo para hacerlo más eficiente.

### Preguntas para reflexión

* ¿Qué problemas encontraste al ejecutar tu script?
* ¿Cómo podrías mejorar el código para hacerlo más robusto?

## Opciones avanzadas y parámetros

Una vez que domines los conceptos básicos, puedes comenzar a explorar las opciones avanzadas de Pywikibot. Algunas de estas incluyen:

### Parámetros avanzados

* Filtrar páginas: Utiliza generadores de páginas con filtros específicos.
* Manejo de errores: Implementa manejo de excepciones para controlar errores durante la ejecución del bot.
* Trabajo con Wikidata: Pywikibot tiene soporte para Wikidata, permitiéndote editar y consultar elementos y propiedades.

### Ejemplo de personalización

El siguiente script utiliza parámetros avanzados para manejar excepciones y trabajar con Wikidata:

## Discusión y reflexión
### Preguntas para discusión

* ¿Qué ventajas y desventajas tiene el uso de Pywikibot en comparación con la edición manual?
* ¿Cómo puedes asegurarte de que tus bots no infrinjan las políticas de los proyectos Wikimedia?

### Reflexión personal

Reflexiona sobre los desafíos que enfrentaste y cómo superaste cada uno. Considera cómo podrías aplicar lo aprendido en otros proyectos o tareas.

## Resolución de problemas comunes
### Errores comunes y soluciones

* Problemas de autenticación: Asegúrate de que tu token de acceso esté actualizado y que tus credenciales sean correctas.
* Errores de red: Verifica tu conexión a Internet y la configuración de tu firewall o proxy.
* Errores de código: Utiliza el manejo de excepciones para identificar y resolver errores específicos en tu script.

### Recursos adicionales

* Foros y comunidades: Únete a la comunidad de Pywikibot en IRC o en Phabricator.
* Documentación Oficial: Consulta la documentación de Pywikibot para obtener más detalles.

## Scripts disponibles y lecciones asociadas

A continuación, se presenta una lista de los scripts más comunes de Pywikibot, organizados por categorías según su función, junto con una breve descripción de cada uno y un enlace a la lección correspondiente.

### Scripts globales

Estos scripts se pueden ejecutar en varios wikis con un permiso de bot global.
* interwiki.py: Gestiona enlaces interwiki entre diferentes versiones lingüísticas de Wikipedia. Ir a la lección de interwiki.py
* redirect.py: Administra redirecciones de páginas, permitiendo crearlas, modificarlas o eliminarlas. Ir a la lección de redirect.py

### Scripts principales

Estos son los scripts más utilizados para tareas comunes de edición.
* add_text.py: Añade texto al inicio o al final de una o varias páginas. Ir a la lección de add_text.py
* category.py: Gestiona categorías, permitiendo añadir, eliminar o cambiar categorías en las páginas. Ir a la lección de category.py
* replace.py: Reemplaza texto en las páginas, utilizando cadenas simples o expresiones regulares. Ir a la lección de replace.py
* solve_disambiguation.py: Ayuda a resolver ambigüedades en enlaces, redirigiéndolos a las páginas correctas. Ir a la lección de solve_disambiguation.py
* upload.py: Sube archivos a Wikimedia Commons u otros proyectos de Wikimedia. Ir a la lección de upload.py
* weblinkchecker.py: Verifica enlaces externos en las páginas y reporta aquellos que están rotos. Ir a la lección de weblinkchecker.py

### Programas auxiliares

Scripts que ofrecen funciones adicionales de soporte.
* clean_sandbox.py: Limpia y restablece las páginas de prueba (sandbox) a su estado original. Ir a la lección de clean_sandbox.py
* cosmetic_changes.py: Realiza cambios menores y estéticos en las páginas, como la corrección de espacios o las mayúsculas y minúsculas. Ir a la lección de cosmetic_changes.py
* transferbot.py: Transfiere contenido entre diferentes wikis de Wikimedia. Ir a la lección de transferbot.py

### Otros scripts

Scripts adicionales con funciones diversas.
* welcome.py: Da la bienvenida automáticamente a los nuevos usuarios en un wiki. Ir a la lección de welcome.py

### Scripts administrativos

Scripts utilizados para tareas administrativas en los wikis.
* blockpageschecker.py: Verifica y maneja las páginas bloqueadas en un wiki. Ir a la lección de blockpageschecker.py
* delete.py: Automatiza la eliminación de páginas según criterios específicos. Ir a la lección de delete.py
* patrol.py: Patrulla cambios recientes, marcando ediciones como revisadas o patrulladas. Ir a la lección de patrol.py
* protect.py: Cambia los niveles de protección de las páginas, permitiendo restringir ediciones. Ir a la lección de protect.py

### Scripts para cambiar páginas generales

Scripts que permiten realizar cambios en páginas de manera masiva o automatizada.
* archivebot.py: Archiva automáticamente discusiones o páginas según criterios de antigüedad. Ir a la lección de archivebot.py
* movepages.py: Mueve o renombra páginas en masa según criterios específicos. Ir a la lección de movepages.py
* pagefromfile.py: Crea o actualiza páginas a partir de un archivo de texto con un formato específico. Ir a la lección de pagefromfile.py

### Categorías

Scripts relacionados con la gestión de categorías en las wikis.
* category_redirect.py: Gestiona redirecciones de categorías, creando o actualizando redirecciones de categoría. Ir a la lección de category_redirect.py
* commonscat.py: Vincula artículos de Wikipedia con categorías de Wikimedia Commons. Ir a la lección de commonscat.py

### Imágenes

Scripts especializados en la gestión y transferencia de imágenes.
* imagetransfer.py: Transfiere imágenes de un proyecto Wikimedia a otro, como de Wikipedia a Commons. Ir a la lección de imagetransfer.py
* image.py: Realiza varias tareas relacionadas con imágenes, como la categorización o la corrección de descripciones. Ir a la lección de image.py
* unusedfiles.py: Identifica y lista archivos que no están en uso en el wiki. Ir a la lección de unusedfiles.py

### Plantillas

Scripts dedicados a la gestión y manipulación de plantillas.
* template.py : Administra plantillas, permitiendo agregar o modificar plantillas en múltiples páginas. Ir a la lección de template.py
* templatecount.py: Cuenta la cantidad de veces que se utiliza una plantilla en un wiki. Ir a la lección de templatecount.py

### Wikidata

Scripts específicos para la gestión de datos en Wikidata.
* claimit.py: Añade o modifica declaraciones en Wikidata. Ir a la lección de claimit.py
* coordinate_import.py: Importa coordenadas geográficas en elementos de Wikidata. Ir a la lección de coordinate_import.py
* harvest_template.py: Extrae información de plantillas en Wikipedia y la guarda en Wikidata. Ir a la lección de harvest_template.py
* illustrate_wikidata.py: Añade imágenes a elementos de Wikidata utilizando imágenes disponibles en Commons. Ir a la lección de illustrate_wikidata.py
* interwikidata.py: Gestiona enlaces interlingüísticos entre elementos de Wikidata. Ir a la lección de interwikidata.py
* newitem.py: Crea nuevos elementos en Wikidata a partir de información existente. Ir a la lección de newitem.py

### Scripts no editores

Estos scripts no realizan cambios en las páginas de la wiki, por lo que se permiten en prácticamente todos los wikis.
* listpages.py: Lista páginas según criterios específicos, sin hacer modificaciones. Ir a la lección de listpages.py
* login.py: Gestiona el inicio de sesión de los bots en los wikis. Ir a la lección de login.py
* touch.py: Actualiza la fecha de modificación de las páginas sin hacer cambios en el contenido. Ir a la lección de touch.py

### Scripts de mantenimiento

Scripts auxiliares para el mantenimiento y la conversión de datos.
* cache.py: Gestiona la caché utilizada por Pywikibot para mejorar el rendimiento. Ir a la lección de cache.py
* colors.py: Configura y gestiona los colores utilizados en la salida de la consola de Pywikibot. Ir a la lección de colors.py
* update_script.py: Actualiza scripts y otros componentes de Pywikibot a la última versión. Ir a la lección de update_script.py
* download_dump.py: Descarga y maneja archivos de volcado (dump) de la base de datos de Wikimedia. Ir a la lección de download_dump.py
* make_i18n_dict.py: Crea diccionarios de localización (i18n) para la internacionalización de Pywikibot. Ir a la lección de make_i18n_dict.py
* wikimedia_sites.py: Gestiona la lista de sitios de Wikimedia utilizada por Pywikibot. Ir a la lección de wikimedia_sites.py

## Conclusión

A lo largo de este artículo, has aprendido los conceptos fundamentales y avanzados para utilizar Pywikibot de manera efectiva. Desde la instalación y configuración inicial hasta la creación de scripts personalizados, este conocimiento te permitirá automatizar tareas y contribuir de manera más eficiente a los proyectos Wikimedia.

### Sugerencias para proyectos adicionales

* Crear un bot para gestionar categorías: Automatiza la clasificación de páginas en categorías específicas.
* Desarrollar un bot para mantener plantillas actualizadas: Asegúrate de que las plantillas estén siempre al día con las últimas normativas.
Para continuar aprendiendo, explora los recursos adicionales proporcionados y experimenta con nuevos proyectos que te desafíen a aplicar y expandir lo que has aprendido.