stringtranslate.com

Ayuda:Crear un bot

Los robots o bots son procesos automáticos que interactúan con Wikipedia (y otros proyectos de 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 de Wikimedia y gran parte de esto es transferible a otros wikis basados ​​en MediaWiki. La explicación está dirigida principalmente a aquellos que tienen alguna experiencia previa en programación, pero no están seguros de cómo aplicar este conocimiento para crear un bot de Wikipedia.

¿Por qué necesitaría crear un bot?

Los bots pueden automatizar tareas y realizarlas mucho más rápido que los humanos. Si tiene una tarea simple que necesita realizar muchas veces (un ejemplo podría ser agregar una plantilla a todas las páginas en una categoría con 1000 páginas), entonces esta es una tarea más adecuada para un bot que para un humano.

Consideraciones antes de crear un bot

Reutilizar bots existentes

A menudo es mucho más sencillo solicitar un trabajo de bot a un bot existente. Si sólo tiene solicitudes periódicas o no se siente cómodo con la programación, esta suele ser la mejor solución. Estas solicitudes se pueden realizar en Wikipedia: Solicitudes de bot . Además, existen una serie de herramientas al alcance de cualquiera. La mayoría de ellos 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. Puede encontrar una lista mayoritariamente completa de herramientas en Wikipedia: Herramientas/Herramientas de edición . Las herramientas, como AWB, a menudo pueden utilizarse con poca o ninguna comprensión de programación.

Reutilizar código base

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 puede reutilizarse con poco tiempo de desarrollo adicional. También hay varios marcos de bots estándar disponibles. Modificar un bot existente o utilizar un marco acelera enormemente el tiempo de desarrollo. Además, debido a que estas bases de código son de uso común y se mantienen en proyectos comunitarios, es mucho más fácil obtener la aprobación para su uso de bots basados ​​en estos marcos. El más popular y común de estos marcos es Pywikibot (PWB), un marco de bot escrito en Python . Está minuciosamente documentado y probado y ya están disponibles muchos scripts de Pywikibot estandarizados (instrucciones de bot). A continuación se pueden encontrar otros ejemplos de marcos de bots. Para algunos de estos marcos de bot, como PWB, todo lo que se necesita es una familiaridad general con los scripts para ejecutar el bot con éxito (es importante actualizar estos marcos con regularidad).

Preguntas importantes

Escribir un nuevo bot requiere una gran capacidad de programación. Un bot completamente nuevo debe someterse a pruebas exhaustivas antes de que se le apruebe su funcionamiento normal. Para escribir un bot exitoso, la planificación es crucial. Las siguientes consideraciones son importantes:

¿Cómo funciona un bot de Wikipedia?

Descripción general de la operación

Al igual que un editor humano, un robot de Wikipedia lee las páginas de Wikipedia y realiza cambios cuando cree que es necesario realizarlos. La diferencia es que, aunque los robots son más rápidos y menos propensos a fatigarse que los humanos, no son tan brillantes como nosotros. Los bots son buenos para tareas repetitivas que tienen patrones fácilmente definidos, donde es necesario tomar pocas decisiones.

En el caso más típico, un robot inicia sesión en su propia cuenta y solicita páginas de Wikipedia de la misma manera que lo hace un navegador (aunque no muestra la página en la pantalla, sino que trabaja en ella en la memoria) y luego la examina mediante programación. 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 la misma manera que lo haría un navegador.

Debido a que los bots acceden a las páginas de la misma manera que lo hacen las personas, los bots 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ágina 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 realizado por una persona viva, es más probable que el bot encuentre estos problemas. Por tanto, es importante considerar estas situaciones al escribir un bot.

API para bots

Para realizar cambios en las páginas de Wikipedia, un bot necesariamente tiene que recuperar páginas de Wikipedia y devolver las ediciones. Hay varias interfaces de programación de aplicaciones (API) disponibles para ese fin.

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 "Codificación de contenido: 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 emplean MediaWiki no tengan esta función. Si está utilizando un marco de bot existente, debería manejar operaciones de bajo nivel como esta.

Iniciando sesión

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 inician sesión desde una cuenta con la bandera de bot pueden obtener más resultados por consulta desde la API de MediaWiki (api.php). La mayoría de los marcos de bots deberían manejar el inicio de sesión y las cookies automáticamente, pero si no estás utilizando un marco existente, deberás seguir estos pasos.

Por seguridad, los datos de inicio de sesión deben pasarse 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 en un bot utilizando la API de MediaWiki, se necesitan dos solicitudes:

Solicitud 1: esta es una solicitud GET para obtener un token de inicio de sesión

Solicitud 2: esta es una POST para completar el inicio de sesión

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 dará como resultado que el servidor de Wikimedia establezca varias cookies HTTP . El bot 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 de vista previa fallida de MediaWiki:Session .

El inicio de sesión de la cuenta principal mediante "action=login" está obsoleto y puede dejar de funcionar sin previo aviso. Para continuar iniciando sesión con "action=login", consulte Especial:BotPasswords .

Edición; editar tokens

Wikipedia utiliza un sistema de tokens de edición para realizar ediciones 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:

d41d8cd98f00b204e9800998ecf8427e+\

La función de los tokens de edición es evitar el "secuestro de edición", donde se engaña a los usuarios para que realicen una edición haciendo clic en un solo enlace.

El proceso de edición implica dos solicitudes HTTP. Primero, se debe realizar una solicitud de un token de edición. Luego, se debe realizar una segunda solicitud HTTP que envíe el nuevo contenido de la página junto con el token de edición recién obtenido. No es posible realizar una edición en una sola solicitud HTTP. Un token de edición permanece igual durante una sesión iniciada, por lo que el token de edición debe recuperarse solo una vez y puede usarse para todas las ediciones posteriores.

Para obtener un token de edición, siga estos pasos:

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 podría deberse a varios factores: falla 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 es por un error de programación, simplemente inicie sesión nuevamente para actualizar las cookies de inicio de sesión. Los bots deben usar aserción para asegurarse de que hayan iniciado sesión.

Editar conflictos

Los conflictos de edición se producen cuando se realizan varios intentos de edición superpuestos en la misma página. Casi todos los robots eventualmente quedarán atrapados en un conflicto de edición de un tipo u otro, y deberían incluir algún mecanismo para probar y acomodar estos problemas.

Los robots que utilizan la API de Mediawiki (api.php) deben recuperar el token de edición, junto con la starttimestampmarca 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|revisionsse puede utilizar para recuperar tanto el token como el contenido de la página en una consulta ( ejemplo ). Al enviar la edición, configure los atributos starttimestampy basetimestampy verifique las respuestas del servidor para detectar indicaciones de errores. Para obtener más detalles, consulte MediaWiki:API:Edit - Crear y editar páginas.

En términos generales, si una edición no se completa, el bot debe revisar la página nuevamente antes de intentar realizar una nueva edición, para asegurarse de que la edición aún sea 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 conducir a un bucle infinito y cualquier comportamiento que pueda incluso parecerse a una guerra de edición .

Descripción general del proceso de desarrollo de un bot.

En realidad, codificar o escribir un bot es sólo una parte del desarrollo de un bot. Generalmente debes seguir el ciclo de desarrollo a continuación para asegurarte de que tu bot siga la política de bots de Wikipedia . El incumplimiento de la política puede provocar que su bot no sea aprobado o que se le bloquee la edición de Wikipedia.

Descripción general del ciclo de desarrollo del bot de Wikipedia

Idea

Especificación

Arquitectura de software

Implementación

La implementación (o codificación) implica convertir el diseño y la planificación en código. Puede que sea la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la parte más grande. En la etapa de implementación usted debe:

Pruebas

Una buena forma de probar su bot a medida que lo desarrolla es hacer que muestre los cambios (si los hubiera) que habría realizado en una página, en lugar de editar la wiki en vivo. Algunos marcos de bots (como pywikibot) tienen métodos precodificados para mostrar diferencias. Durante el proceso de aprobación , lo más probable es que al bot se le dé 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 corregir cualquier error. Al final del período de prueba, si todo salió según lo planeado, el bot debería obtener la aprobación para su funcionamiento a gran escala.

Documentación

Una tarea importante (y a menudo pasada por alto) es documentar el diseño interno de su bot con fines de mantenimiento y mejora futuros. Esto es especialmente importante si vas a permitir clones de tu bot. Lo ideal sería publicar el código fuente de su bot en su página de usuario o en un sistema de control de revisiones (consulte #Bots de código abierto) si desea que otros puedan ejecutar clones del mismo. Este código debe estar bien documentado (normalmente mediante comentarios) para facilitar su uso.

Consultas/Quejas

Debe estar preparado para responder consultas u objeciones a su bot en su página de discusión de usuario, especialmente si está operando en un área potencialmente sensible, como la limpieza de imágenes de uso legítimo .

Mantenimiento

Mantener y mejorar su bot para hacer frente 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.

Se deben aprobar los cambios importantes de funcionalidad de los bots aprobados .

Pautas generales para ejecutar un bot

Además de la política oficial de bots, que cubre los puntos principales a considerar al desarrollar su bot, hay una serie de puntos de asesoramiento más generales a considerar al desarrollar su bot.

Mejores prácticas de robots

Funciones comunes de los bots que deberías considerar implementar

Asistencia manual

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.

Deshabilitar el bot

Debería ser fácil desactivar rápidamente tu bot. Si su bot se estropea, ¡es su responsabilidad limpiarlo! Podría hacer que el bot se niegue a ejecutarse si se dejó un mensaje en su página de discusión, asumiendo que el mensaje puede ser una queja contra sus actividades; esto se puede verificar usando la meta=userinfoconsulta API ( ejemplo ). O podría tener una página que apague el bot cuando se cambie; Esto se puede comprobar cargando el contenido de la página antes de cada edición.

Firma

Al igual que un humano, si su 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 nombres de conversación con la excepción de las páginas de proyectos utilizadas para la discusión (por ejemplo, artículos para eliminar ).

Bandera de robot

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; consulte 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).

Supervisión del estado del bot

Si el bot está completamente automatizado y realiza ediciones periódicas, debe verificar periódicamente que se ejecute según lo especificado y que su comportamiento no haya sido alterado por cambios de software. Considere agregarlo a Wikipedia: monitor de actividad del bot para recibir notificaciones si el bot deja de funcionar.

Bots de código abierto

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 para bots particularmente complejos. Hacer que su código sea de código abierto tiene varias ventajas:

El código fuente abierto, aunque rara vez es necesario, normalmente se recomienda de acuerdo con 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 deseen abrir su código. 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 revisiones como SVN , Git o Mercurial . Wikipedia tiene artículos que comparan las diferentes opciones de software y sitios web para alojamiento de códigos , muchos de los cuales no tienen costo.

Lenguajes de programación y bibliotecas.

Los bots se pueden escribir en casi cualquier lenguaje de programación. La elección de un idioma depende de la experiencia y las preferencias del escritor del bot, y de la disponibilidad de bibliotecas relevantes para el desarrollo del bot. La siguiente lista incluye algunos lenguajes comúnmente utilizados por los bots:

awk

GNU Awk es un lenguaje sencillo para bots pequeños y grandes, incluido OAuth.

perla

Si está ubicado en un servidor web, puede iniciar la ejecución de su programa e interactuar con su programa 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 la cual puede ejecutar sus programas Perl.

Bibliotecas:

PHP

PHP también se puede utilizar para programar robots. Los desarrolladores de MediaWiki ya están familiarizados con PHP, ya que ese es el lenguaje en el que están escritos 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ía el formulario, su bot podría leer estas entradas, luego editar todos los artículos en la categoría actual y moverlos a la categoría deseada. (Obviamente, cualquier bot con una interfaz de formulario debería estar protegido de alguna manera contra internautas aleatorios).

La tabla de funciones de bots de PHP puede proporcionar una idea de las capacidades de los principales marcos de bots.

  1. ^ No incluye a quienes trabajaron en marcos bifurcados para crear marcos listados.
  2. ^ Siempre que sea posible. Se excluye la carga de imágenes y otras tareas similares que actualmente no son compatibles con la API.

Pitón

Bibliotecas:

MATLAB

Microsoft .NET

Microsoft .NET es un conjunto de lenguajes que incluyen C# , C++/CLI , Visual Basic .NET , J# , JScript .NET , IronPython y Windows PowerShell . Usando Mono Project , los programas .NET también pueden ejecutarse en Linux , Unix , BSD , Solaris y macOS , así como en Windows .

Bibliotecas:

Java

Bibliotecas:

Nodo.js

Bibliotecas:

Rubí

Bibliotecas:

ceceo común

Haskell

VBScript

VBScript es un lenguaje de programación basado en el lenguaje de programación Visual Basic . No hay marcos de bots publicados para VBScript, pero a continuación se pueden ver algunos ejemplos de bots que lo usan:

lua