Los robots o bots son procesos automáticos que interactúan con Wikipedia (y otros proyectos Wikimedia) como si fueran editores humanos. Esta página intenta explicar cómo llevar a cabo el desarrollo de un bot para su uso en proyectos Wikimedia y gran parte de esto es transferible a otras wikis basadas en MediaWiki. La explicación está orientada principalmente a aquellos que tienen alguna experiencia previa en programación, pero no están seguros de cómo aplicar este conocimiento a la creación de un bot para Wikipedia.
Los bots pueden automatizar tareas y realizarlas mucho más rápido que los humanos. Si tienes una tarea sencilla que debes realizar muchas veces (un ejemplo podría ser agregar una plantilla a todas las páginas de una categoría con 1000 páginas), entonces es una tarea más adecuada para un bot que para un humano.
A menudo es mucho más sencillo solicitar un trabajo de bot a un bot existente. Si solo tienes solicitudes periódicas o no te sientes cómodo con la programación, esta suele ser la mejor solución. Estas solicitudes se pueden realizar en Wikipedia:Bot requests . Además, hay una serie de herramientas disponibles para cualquiera. La mayoría de ellas toman la forma de navegadores web mejorados con funcionalidad específica de MediaWiki. El más popular de ellos es AutoWikiBrowser (AWB), un navegador diseñado específicamente para ayudar con la edición en Wikipedia y otros proyectos de Wikimedia. Puedes encontrar una lista casi completa de herramientas en Wikipedia:Tools/Editing tools . Las herramientas, como AWB, a menudo se pueden utilizar con poco o ningún conocimiento de programación.
Si decide que necesita un bot propio debido a la frecuencia o novedad de sus requisitos, no necesita escribir uno desde cero. Ya hay varios bots ejecutándose en Wikipedia y muchos de estos bots publican su código fuente, que a veces se puede reutilizar con poco tiempo de desarrollo adicional. También hay varios marcos de trabajo de bots estándar disponibles. Modificar un bot existente o usar un marco de trabajo acelera enormemente el tiempo de desarrollo. Además, debido a que estas bases de código son de uso común y son proyectos comunitarios mantenidos, es mucho más fácil obtener bots basados en estos marcos de trabajo aprobados para su uso. El más popular y común de estos marcos de trabajo es Pywikibot (PWB), un marco de trabajo de bot escrito en Python . Está completamente documentado y probado y ya hay muchos scripts de Pywikibot estandarizados (instrucciones de bot). A continuación, se pueden encontrar otros ejemplos de marcos de trabajo de bots. Para algunos de estos marcos de trabajo de bots, como PWB, una familiaridad general con los scripts es todo lo que se necesita para ejecutar el bot con éxito (es importante actualizar estos marcos de trabajo con regularidad).
Para crear un bot nuevo se necesitan habilidades de programación importantes. Un bot completamente nuevo debe someterse a pruebas exhaustivas antes de que se lo apruebe para su funcionamiento habitual. Para crear un bot exitoso, la planificación es crucial. Las siguientes consideraciones son importantes:
Al igual que un editor humano, un bot de Wikipedia lee las páginas de Wikipedia y hace cambios cuando cree que es necesario hacerlo. La diferencia es que, aunque los bots son más rápidos y menos propensos a la fatiga que los humanos, no son tan brillantes como nosotros. Los bots son buenos en tareas repetitivas que tienen patrones fácilmente definidos, en las que hay que tomar pocas decisiones.
En el caso más típico, un bot inicia sesión en su propia cuenta y solicita páginas de Wikipedia de forma muy similar a como lo hace un navegador (aunque no muestra la página en la pantalla, sino que trabaja con ella en la memoria) y luego examina programáticamente el código de la página para ver si es necesario realizar algún cambio. Luego realiza y envía las modificaciones para las que fue diseñado, nuevamente de forma muy similar a como lo haría un navegador.
Debido a que los bots acceden a las páginas de la misma manera que las personas, pueden experimentar el mismo tipo de dificultades que los usuarios humanos. Pueden quedar atrapados en conflictos de edición, tener tiempos de espera de páginas o encontrarse con otras complicaciones inesperadas al solicitar páginas o realizar ediciones. Debido a que el volumen de trabajo realizado por un bot es mayor que el de una persona real, es más probable que el bot se encuentre con estos problemas. Por lo tanto, es importante tener en cuenta estas situaciones al escribir un bot.
Para poder realizar cambios en las páginas de Wikipedia, un bot necesariamente tiene que recuperar páginas de Wikipedia y enviar las modificaciones de vuelta. Existen varias interfaces de programación de aplicaciones (API) disponibles para ese propósito.
api.php
). Esta biblioteca se escribió específicamente para permitir que procesos automatizados, como bots, realicen consultas y publiquen cambios. Los datos se devuelven en formato JSON (consulte los formatos de salida para obtener más detalles).action=raw
o action=raw&templates=expand
a index.php proporcionará el código fuente wikitexto sin procesar de una página. Por ejemplo: https://en.wikipedia.org/w/index.php?title=Help:Creating_a_bot&action=raw
. Una consulta API con action=query&prop=revisions&rvprop=content
o action=query&prop=revisions&rvprop=content&rvexpandtemplates=1
es aproximadamente equivalente y permite recuperar información adicional.Algunos servidores web de Wikipedia están configurados para aceptar solicitudes de contenido comprimido ( GZIP ). Esto se puede hacer incluyendo una línea "Accept-Encoding: gzip" en el encabezado de la solicitud HTTP; si el encabezado de respuesta HTTP contiene "Content-Encoding: gzip", el documento está en formato GZIP; de lo contrario, está en el formato normal sin comprimir. Tenga en cuenta que esto es específico del servidor web y no del software MediaWiki. Es posible que otros sitios que utilicen MediaWiki no tengan esta función. Si está utilizando un marco de trabajo de bot existente, debería manejar operaciones de bajo nivel como esta.
Los bots aprobados deben iniciar sesión para realizar modificaciones. Aunque un bot puede realizar solicitudes de lectura sin iniciar sesión, los bots que hayan completado las pruebas deben iniciar sesión para todas las actividades. Los bots que hayan iniciado sesión desde una cuenta con la bandera de bot pueden obtener más resultados por consulta de la API de MediaWiki (api.php). La mayoría de los marcos de trabajo para bots deberían gestionar el inicio de sesión y las cookies de forma automática, pero si no estás utilizando un marco de trabajo existente, tendrás que seguir estos pasos.
Por razones de seguridad, los datos de inicio de sesión se deben pasar mediante el método HTTP POST . Debido a que los parámetros de las solicitudes HTTP GET son fácilmente visibles en la URL, los inicios de sesión mediante GET están deshabilitados.
Para iniciar sesión con un bot mediante la API de MediaWiki, se necesitan dos solicitudes:
Solicitud 1: esta es una solicitud GET para obtener un token de inicio de sesión
https://en.wikipedia.org/w/api.php?action=query&meta=tokens&type=login&format=json
Solicitud 2: este es un POST para completar el inicio de sesión
https://en.wikipedia.org/w/api.php?action=login&format=json
lgname=BOTUSERNAME
lgpassword=BOTPASSWORD
lgtoken=TOKEN
donde TOKEN es el token del resultado anterior. Las cookies HTTP de la solicitud anterior también deben pasarse con la segunda solicitud.
Un intento de inicio de sesión exitoso hará que el servidor de Wikimedia configure varias cookies HTTP . El robot debe guardar estas cookies y enviarlas de vuelta cada vez que realiza una solicitud (esto es particularmente crucial para la edición). En la Wikipedia en inglés, se deben utilizar las siguientes cookies: enwikiUserID , enwikiToken y enwikiUserName . La cookie enwiki_session es necesaria para enviar una edición o confirmar algún cambio; de lo contrario, se devolverá el mensaje de error MediaWiki:Session fail preview .
El inicio de sesión de la cuenta principal a través de "action=login" está obsoleto y puede dejar de funcionar sin previo aviso. Para continuar iniciando sesión con "action=login", consulte Special:BotPasswords .
Wikipedia utiliza un sistema de tokens de edición para realizar modificaciones en las páginas de Wikipedia, así como otras operaciones que modifican el contenido existente, como la reversión. El token parece un número hexadecimal largo seguido de '+\', por ejemplo:
La función de los tokens de edición es evitar el "secuestro de edición", donde los usuarios son engañados para realizar una edición haciendo clic en un solo enlace.
El proceso de edición implica dos solicitudes HTTP. En primer lugar, se debe realizar una solicitud de un token de edición. A continuación, se debe realizar una segunda solicitud HTTP que envíe el nuevo contenido de la página junto con el token de edición que se acaba de obtener. No es posible realizar una edición en una única solicitud HTTP. Un token de edición permanece igual durante la duración de una sesión iniciada, por lo que el token de edición solo debe recuperarse una vez y puede usarse para todas las ediciones posteriores.
Para obtener un token de edición, siga estos pasos:
action=query
meta=tokens
El token se devolverá en el csrftoken
atributo de la respuesta.
La URL se verá así:https://en.wikipedia.org/w/api.php?action=query&meta=tokens&format=json
Si el token de edición que recibe el bot no tiene la cadena hexadecimal ( es decir , el token de edición es simplemente '+\'), lo más probable es que el bot no haya iniciado sesión. Esto puede deberse a varios factores: un error en la autenticación con el servidor, una conexión interrumpida, un tiempo de espera de algún tipo o un error al almacenar o devolver las cookies correctas. Si no se debe a un error de programación, simplemente vuelva a iniciar sesión para actualizar las cookies de inicio de sesión. Los bots deben usar la aserción para asegurarse de que hayan iniciado sesión.
Los conflictos de edición ocurren cuando se realizan varios intentos de edición superpuestos en la misma página. Casi todos los bots se verán atrapados en algún momento en un conflicto de edición de un tipo u otro, y deberían incluir algún mecanismo para probar y solucionar estos problemas.
Los bots que utilizan la API de Mediawiki (api.php) deben recuperar el token de edición, junto con starttimestamp
y la marca de tiempo "base" de la última revisión, antes de cargar el texto de la página en preparación para la edición; prop=info|revisions
se puede utilizar para recuperar tanto el token como el contenido de la página en una sola consulta ( ejemplo ). Al enviar la edición, configure los atributos starttimestamp
y basetimestamp
y verifique las respuestas del servidor para ver si hay indicaciones de errores. Para obtener más detalles, consulte MediaWiki:API:Editar - Crear y editar páginas.
En términos generales, si una edición no se completa, el bot debe volver a verificar la página antes de intentar realizar una nueva edición para asegurarse de que la edición sigue siendo apropiada. Además, si un bot vuelve a verificar una página para volver a enviar un cambio, debe tener cuidado de evitar cualquier comportamiento que pueda generar un bucle infinito y cualquier comportamiento que pueda incluso parecerse a una guerra de ediciones .
En realidad, codificar o escribir un bot es solo una parte del desarrollo de un bot. En general, debes seguir el ciclo de desarrollo que se indica a continuación para asegurarte de que tu bot cumple con la política de bots de Wikipedia . Si no cumples con la política, es posible que tu bot no sea aprobado o que se le bloquee la posibilidad de editar Wikipedia.
La implementación (o codificación) implica convertir el diseño y la planificación en código. Puede ser la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la más importante. En la etapa de implementación, debes:
Una buena forma de probar tu bot mientras lo estás desarrollando es hacer que muestre los cambios (si los hubiera) que hubiera realizado en una página, en lugar de editar realmente la wiki en vivo. Algunos marcos de trabajo para bots (como pywikibot) tienen métodos precodificados para mostrar diferencias. Durante el proceso de aprobación , lo más probable es que se le dé al bot un período de prueba (generalmente con una restricción en la cantidad de ediciones o días que debe ejecutarse) durante el cual puede editar para permitir ajustes y eliminar errores. Al final del período de prueba, si todo salió según lo planeado, el bot debería recibir la aprobación para operar a gran escala.
Una tarea importante (y que a menudo se pasa por alto) es documentar el diseño interno de tu bot con el fin de realizar un mantenimiento y una mejora futuros. Esto es especialmente importante si vas a permitir clones de tu bot. Lo ideal es que publiques el código fuente de tu bot en su página de usuario o en un sistema de control de revisiones (consulta #Bots de código abierto) si quieres que otros puedan ejecutar clones del mismo. Este código debe estar bien documentado (normalmente mediante comentarios) para facilitar su uso.
Debes estar preparado para responder consultas u objeciones sobre tu bot en tu página de discusión de usuarios, especialmente si está operando en un área potencialmente sensible, como la limpieza de imágenes de uso justo .
Mantener y mejorar su bot para que se adapte a errores recién descubiertos o nuevos requisitos puede llevar mucho más tiempo que el desarrollo inicial del software. Para facilitar el mantenimiento, documente su código desde el principio.
Los cambios importantes en la funcionalidad de los bots aprobados deben ser aprobados .
Además de la política oficial del bot, que cubre los puntos principales a tener en cuenta al desarrollar su bot, hay una serie de puntos de asesoramiento más generales a tener en cuenta al desarrollar su bot.
Si su bot está haciendo algo que requiere juicio o evaluación del contexto (por ejemplo, corregir la ortografía), entonces debería considerar hacer que su bot sea asistido manualmente, lo que significa que un humano verifica todas las ediciones antes de guardarlas. Esto reduce significativamente la velocidad del bot, pero también reduce significativamente los errores.
Debería ser fácil deshabilitar rápidamente su bot. Si su bot deja de funcionar, ¡es su responsabilidad limpiarlo! Puede hacer que el bot se niegue a ejecutarse si se ha dejado un mensaje en su página de discusión, asumiendo que el mensaje puede ser una queja sobre sus actividades; esto se puede verificar utilizando la meta=userinfo
consulta de API ( ejemplo ). O puede tener una página que apague el bot cuando se modifique; esto se puede verificar cargando el contenido de la página antes de cada edición.
Al igual que un humano, si tu bot edita una página de discusión en Wikipedia, debe firmar su publicación con cuatro tildes (~~~~). Las firmas pertenecen únicamente a los espacios de discusión, con excepción de las páginas de proyecto utilizadas para la discusión (por ejemplo, artículos para eliminar ).
Las ediciones de un bot serán visibles en Special:RecentChanges , a menos que las ediciones estén configuradas para indicar un bot. Una vez que el bot ha sido aprobado y se le ha otorgado el permiso de bandera de bot, se puede agregar "bot=True" a la llamada API - vea mw:API:Edit#Parameters para ocultar las ediciones del bot en Special:RecentChanges . En Python, al usar mwclient o wikitools, luego agregar bot=True al comando editar/guardar establecerá la edición como una edición de bot - por ejemplo PageObject.edit(text=pagetext, bot=True, summary=pagesummary)
.
Si el bot está completamente automatizado y realiza ediciones periódicas, debe comprobar periódicamente que funciona como se especifica y que su comportamiento no se ha visto alterado por cambios de software. Considere agregarlo a Wikipedia:Monitor de actividad de bots para recibir una notificación si el bot deja de funcionar.
Muchos operadores de bots optan por hacer que su código sea de código abierto y, en ocasiones, puede ser necesario antes de la aprobación de bots particularmente complejos. Hacer que su código sea de código abierto tiene varias ventajas:
El código fuente abierto, aunque rara vez se requiere, generalmente se fomenta para mantener la naturaleza abierta y transparente de Wikipedia.
Antes de compartir código, asegúrese de que la información confidencial, como las contraseñas, esté separada en un archivo que no se haga público.
Hay muchas opciones disponibles para los usuarios que desean que su código sea abierto. Alojar el código en una subpágina del espacio de usuario del bot puede ser complicado de mantener si no está automatizado y da como resultado que el código tenga múltiples licencias según los términos de licencia de Wikipedia, además de cualquier otro término que pueda especificar. Una mejor solución es utilizar un sistema de control de revisión como SVN , Git o Mercurial . Wikipedia tiene artículos que comparan las diferentes opciones de software y sitios web para alojar código , muchos de los cuales no tienen costo.
Los bots se pueden escribir en casi cualquier lenguaje de programación. La elección de un lenguaje depende de la experiencia y las preferencias del creador del bot, y de la disponibilidad de bibliotecas relevantes para el desarrollo del bot. La siguiente lista incluye algunos lenguajes que se usan comúnmente para los bots:
GNU Awk es un lenguaje sencillo para bots pequeños y grandes, incluido OAuth.
Si se encuentra en un servidor web, puede iniciar la ejecución de su programa e interactuar con él mientras se ejecuta a través de la interfaz de puerta de enlace común desde su navegador. Si su proveedor de servicios de Internet le proporciona espacio web, es muy probable que tenga acceso a una compilación de Perl en el servidor web desde el que puede ejecutar sus programas de Perl.
Bibliotecas:
PHP también se puede utilizar para programar bots. Los desarrolladores de MediaWiki ya están familiarizados con PHP, ya que es el lenguaje en el que se escriben MediaWiki y sus extensiones. PHP es una opción especialmente buena si desea proporcionar una interfaz basada en formularios web a su bot. Por ejemplo, supongamos que desea crear un bot para cambiar el nombre de las categorías. Puede crear un formulario HTML en el que escribirá los nombres actuales y deseados de una categoría. Cuando se envíe el formulario, su bot podría leer estas entradas, luego editar todos los artículos de la categoría actual y moverlos a la categoría deseada. (Obviamente, cualquier bot con una interfaz de formulario necesitaría estar protegido de algún modo de los navegantes web aleatorios).
La tabla de funciones de bot PHP puede brindar información sobre las capacidades de los principales marcos de bot.
Bibliotecas:
Microsoft .NET es un conjunto de lenguajes que incluye C# , C++/CLI , Visual Basic .NET , J# , JScript .NET , IronPython y Windows PowerShell . Con Mono Project , los programas .NET también pueden ejecutarse en Linux , Unix , BSD , Solaris y macOS , así como en Windows .
Bibliotecas:
Bibliotecas:
Bibliotecas:
Bibliotecas:
VBScript es un lenguaje de programación basado en el lenguaje de programación Visual Basic . No existen marcos de trabajo para bots publicados para VBScript, pero a continuación se pueden ver algunos ejemplos de bots que lo utilizan: