Wikidata:Creación de un bot

From Wikidata
Jump to navigation Jump to search
This page is a translated version of the page Wikidata:Creating a bot and the translation is 72% complete.
Outdated translations are marked like this.

Esta página explica cómo crear bots para Wikidata. Por favor, considera compartir tus códigos y añadir los ejemplos y las mejoras que quieras.

Requisitos

Para crear bots necesitas:

  • Algunas habilidades de programación (Python, Perl, PHP...)
  • Un framework (uno de los frameworks de más abajo) y algún código para ejecutar que realice una tarea
  • Una cuenta de bot (aprobada)
  • Un editor de código fuente (Notepad++, Geany, vim, emacs...)

Recomendación

Pywikibot

En las siguientes secciones aprenderás cómo instalar, configurar e iniciar sesión usando pywikibot. Sólo tiene que hacer estos tres primeros pasos una vez. Además, hay algunos ejemplos básicos para aprender los conceptos básicos sobre programación de bots.

Instalación

Para más detalles sobre la instalación de pywikibot, vea mw:Manual:Pywikibot/Installation y Wikidata:Pywikibot - Python 3 Tutorial/Setting up Shop.
Para utilizar pywikibot sin instalación, vea mw:Manual:Pywikibot/PAWS

Para instalar pywikipediabot:

Configuración

:Para más detalles sobre de la configuración de pywikibot, véa mw:Manual:Pywikibot/user-config.py.

Debes configurar user-config.py con el nombre del bot, la familia del proyecto y el idioma. Para Wikidata, la familia del proyecto y el idioma es el mismo, wikidata.

Puedes reducir el retardo entre ediciones añadiendo: put_throttle = 1

Inicio de sesión

Después de configurar el fichero user-config.py, inicia sesión de la siguiente manera:

$ python login.py

Te preguntará por la contraseña del bot, escríbela y pulsa enter. Si lo hiciste correctamente, deberías estar conectado.

Ejemplo 1: Obtener datos

Este ejemplo obtiene los datos de la página de Douglas Adams. Guarda el siguiente código en un archivo y ejecutarlo con python example1.py

item.get() se conecta a Wikidata y obtiene los datos. El resultado es (reformateado para mayor claridad):

{
    'claims': {
        'P646': [<pywikibot.page.Claim instance at 0x7f1880188b48>],
        'P800': [<pywikibot.page.Claim instance at 0x7f1880188488>, <pywikibot.page.Claim instance at 0x7f1880188368>]
        ...
    }
    'labels': {
        'gu': '\u0aa1\u0a97\u0acd\u0ab2\u0abe\u0ab8 \u0a8f\u0aa1\u0aae\u0acd\u0ab8',
        'scn': 'Douglas Adams',
        ...
    }
    'sitelinks': {
        'fiwiki': 'Douglas Adams',
        'fawiki': '\u062f\u0627\u06af\u0644\u0627\u0633 \u0622\u062f\u0627\u0645\u0632',
        'elwikiquote': '\u039d\u03c4\u03ac\u03b3\u03ba\u03bb\u03b1\u03c2 \u0386\u03bd\u03c4\u03b1\u03bc\u03c2',
        ...
    }
    'descriptions': {
        'eo': 'angla a\u016dtoro de sciencfikcio-romanoj kaj humoristo',
        'en': 'English writer and humorist',
    },
    'aliases': {
        'ru': ['\u0410\u0434\u0430\u043c\u0441, \u0414\u0443\u0433\u043b\u0430\u0441'],
        'fr': ['Douglas Noel Adams', 'Douglas No\xebl Adams'],
        ...
    }
}
['claims', 'labels', 'sitelinks', 'descriptions', 'aliases']
[[wikidata:Q42]]

Imprime un diccionario con claves para

  • el conjunto de afirmaciones en la página: Propiedad:P646 es el identificador de Freebase, Propiedad:P800 es «obra destacada», etc.
  • la etiqueta del elemento en varios idiomas
  • los enlaces a sitios del elemento (no solo Wikipedias en varios idiomas, también Wikiquote en varios idiomas)
  • la descripción del elemento en varios idiomas
  • los aliases del elemento en varios idiomas

Y a continuación, una lista con todas las claves para los pares clave-valor en el diccionario. Finalmente, podrás ver que el elemento Wikidata acerca de Douglas Adams es Q42.

Alternativas

El ejemplo anterior obtiene ItemPage usando el artículo en wikipedia. Alternativamente, también podemos obtener ItemPage directamente:

Ejemplo 2: Obtener los enlaces interlingüísticos

Después de item.get(), por ejemplo, puede acceder a los enlaces interlingüísticos. Estos son los enlaces que el artículo tiene hacía todas las Wikipedias.

La salida es:

{'fiwiki': 'Douglas Adams', 'eowiki': 'Douglas Adams', 'dewiki': 'Douglas Adams', ...}

Con item.iterlinks(), se devuelve un iterador sobre todos estos sitelinks, donde cada artículo se da no como texto plano como el anterior, sino como un objeto Page para su tratamiento posterior (por ejemplo, editar el texto en los artículos correspondientes de Wikipedia).

Ejemplo 4: Establecer una descripción

Este ejemplo establece la descripción en inglés y en alemán para el elemento sobre Douglas Adams.

Establecer etiquetas y alias funciona en consecuencia.

Ejemplo 6: Establecer un enlace de sitio

Para establecer un sitelink, podemos crear un diccionario correspondiente al ejemplo 4 o usar objetos Page:

Ejemplo 7: Establecer una declaración

Las declaraciones se definen con la clase Claim. En el ejemplo a continuación, definimos para Douglas Adams place of birth (P19): Cambridge (Q350).

Funciona de forma similar para otros tipos de datos. En el ejemplo a continuación, añadimos afirmaciones con tipos de dato cadena de caracteres (IMDb ID (P345)) y coordenada (coordinate location (P625)) (URL y cadena de caracteres son el mismo tipo):

Ejemplo 8: Añadir un cualificador

Los cualificadores también se representan con la clase Claim. En este ejemplo, añadimos el cualificador incertae sedis (P678): family (Q35409) a la Claim "claim". No olvides añadir el elemento antes de añadir el cualificador.

Ejemplo 9: Añadir una fuente

Las fuentes también se representan por la clase Claim. Una diferencia con los cualificadores es que una fuente puede contener más de un Claim. En el siguiente ejemplo, añadimos stated in (P248): Integrated Taxonomic Information System (Q82575) con retrieved (P813) 20 de marzo de 2014 como fuente para el Claim "claim". Esta afirmación debe haber sido antes tomada de Wikidata o añadida a una página de elemento.

Ejemplo 10: Generadores de páginas

TODO

Ejemplo 11: Obtener valores de subpropiedades

En el siguiente ejemplo, obtenemos los valores de subpropiedades de la rama described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> propiedades reference URL (P854) y title (P1476).

Más ejemplos

Algunos usuarios comparten sus códigos fuentes. Obtenga más información en los siguientes enlaces:

Wikidata Integrator

WikidataIntegrator is a library for reading and writing to Wikidata/Wikibase. We created it for populating Wikidata with content from authoritative resources on Genes, Proteins, Diseases, Drugs and others. Details on the different tasks can be found on the bot's Wikidata page.

Pywikibot is an existing framework for interacting with the MediaWiki API. The reason why we came up with our own solution is that we need a high integration with the Wikidata SPARQL endpoint in order to ensure data consistency (duplicate checks, consistency checks, correct item selection, etc.). Compared to Pywikibot, WikidataIntegrator currently is not a full Python wrapper for the MediaWiki API but is solely focused on providing an easy means to generate Python-based Wikidata bots.

Para más información, documentación, descarga e instrucciones de instalación, consulte aquí: https://github.com/SuLab/WikidataIntegrator/

Example Notebook

An example notebook demonstrating an example bot to add therapeutic areas to drug items, including using fastrun mode, checking references, and removing old statements:

http://public-paws.wmcloud.org/46883698/example%20ema%20bot.ipynb

WikibaseIntegrator

Bifurcada de Wikidata Integrator por User:Myst en 2020 y ha visto varias mejoras en la API que hace aún más fácil crear bots usando la biblioteca.

Para más información, documentación, descarga e instrucciones de instalación, consulte aquí: https://github.com/LeMyst/WikibaseIntegrator

Ejemplo de script semiautomático

LexUse semi-automatic tool for finding and adding usage examples to lexemes. It's free software written using Python 3 in 2020 Wikidata:LexUse.

Wikibase.NET (obsoleto)

Wikibase.NET es la API que reemplaza al ya obsoleto DotNetDataBot. El cliente de la API para la extensión MediaWiki Wikibase. No son compatibles porque Wikibase.NET ya no necesita el framework DotNetWikiBot.

Descarga e instalación

El framework puede ser descargado de aquí. Solo tienes que seguir las instrucciones de la página.

Problemas conocidos

Ejemplos

En largos instantes...

DotNetDataBot (Desaprobado)

Instalación

Configuración

After unpacking the package you can see a file called DotNetDataBot.dll and one called DotNetDataBot.xml. The xml document is only for documentation. To use it you have to create a new refer in your project. Then you can write using DotNetDataBot; to import the framework.

Inicio de sesión

Para iniciar la sesión tienes que crear un nuevo objeto Site con la URL de la wiki, el nombre de usuario del bot y su contraseña.

Ejemplo 1: Obtener el id usando una página wiki

Puede acceder a la identificación de un elemento buscando mediante el sitio y el título de la página conectada.

Ejemplo 2: Obtener los enlaces interlingüísticos

Puedes obtener los enlaces interlingüísticos de un elemento cargando el contenido y accediendo al campo links del objeto.

Ejemplo 3: Establecer una descripción

Para establecer la descripción, debes llamar a la función setDescription.

Ejemplo 4: Establecer una etiqueta

Funciona de la misma forma para establecer una etiqueta. Solo tienes que llamar a la función setLabel.

Ejemplo 5: Obtener enlaces interlingüísticos para cien páginas

No se admite esta característica. Solo itera sobre la lista.

API de Wikibase para PHP

Esto es un cliente de la API de Wikibase escrito en PHP. Puede descargarse aquí.

Ejemplo 1: Ejemplo básico

Puedes echar un vistazo a los comentarios del código fuente para entender como funciona.


Ejemplo 2: Editando declaraciones

Puedes echar un vistazo a los comentarios del código fuente para entender como funciona.

VBot (no updates since 2017)

Framework para Wikidata y Wikipedia. Lee y escribe en Wikidata y otros proyectos de Wikimedia y tiene un generador de listas útil para generar listas de páginas de Wikipedia y entidades de Wikidata. También puede leer el volcado JSON de Wikidata.

Overview

Bot para leer y editar Wikidata y Wikipedia.

  • License: CC0 1.0
  • Language C#
  • Can read and write entities with all datatype on Wikidata
  • Can read and write pages on all Wiki project
  • Can read parameter from template on wiki pages
  • Can read JSON dump
  • Can create lists using:
  • Tested with Visual Studio Express 2013 for Windows Desktop.
    • Is necessary to have Newtonsoft.Json. You can install it with NuGet inside Visual Studio
    • Is necessary to add manually a reference to System.Web for "HttpUtility.UrlEncode"

Descargar

El framework puede descargarse de GitHub aquí.

Instrucciones

Ejemplo 1

Update en label for all items with instance of (P31): short film (Q24862) that have director (P57) and that have publication date (P577) in 1908. (Use of Wikidata query)

LexData (Python; for Lexicographical data)

LexData is an easy to use python libary to create and edit Lexemes, Senses and Forms.

Consejos

La documentación de LexData es todavía un poco escasa, así que mire las implementaciones existentes en MachtSinn o Wikdata Lexeme Forms para obtener ideas sobre cómo utilizarlo.

If you only want to add statements to Lexemes (not forms or senses) WikibaseIntegrator might be a better choice, as it is more versatile and support a lot of data types.

Instalación

Puedes instalar LexData mediante pip:

You can install LexData via pip:

$ pip install LexData

Inicio de sesión

Para todas las operaciones necesitas una WikidataSession. Puedes crearla con tus credenciales, con la contraseña de un bot o con un token de edición (por ejemplo para editar vía OAUTH):

For all operations you need a WikidataSession. You can create it with your credentials, a bot password or an Edit Token (for example to edit via OAUTH):


Recuperar un lexema

Puedes abrir los lexemas existentes y leer su contenido.

You can open existing Lexemes and read their content.

Búsqueda y creación de lexemas

Si no conoces el L-Id de un lexema puedes buscarlo. Y si no existe puedes crearlo.

If you don't know the L-Id of a lexeme you can search for it. And if it doesn't exist you can create it.

Adding information

You can easily create forms or senses, with or without additional claims:

Utilizando API de Wikidata directamente

Las otras secciones describen cómo utlizar marcos bot para acceder y actualizar la información en Wikidata. También puedes interactuar directamente con el Wikibase API que proporciona Wikidata. Es necesario hacer esto si estas desarrollando tu propio framework o si necesitas hacer algo que no es compatible con el con un framework.

La documentación de la API de Wikibase puede encontrarse en mediawiki.org. También puedes echar un vistazo en Special:ApiSandbox, intenta action=wbgetentities.

Wikibase proporciona su API como un conjunto de módulos para MediaWiki's "action" API. Para acceder, haz una petición HTTP a /w/api.php. La formato default de respuesta es JSON. De acuerdo al idima de su elección, sólo necesita una biblioteca para realizar peticiones de HTTP y un JSON o una bibliotaca XML para analizar las respuestas.

Ejemplo 1: Obtener el número Q

Este ejemplo obtiene el número Q del elemento que incluye un enlace interlingüístico hacia la página de Wikipedia en ingles sobre el artículo Andromeda Galaxy. El módulo principal action=wbgetentities de la API de Wikibase, llamémosle la «mula de carga», proporciona esta información. La petición HTTP (que usa el formato jsonfm para exportar datos legibles en formato JSON) es simplemente

https://www.wikidata.org/w/api.php?action=wbgetentities&titles=Andromeda%20Galaxy&sites=enwiki&props=&format=jsonfm&formatversion=2

Pruebe a seguir el enlace. Esto no solicita información adicional sobre la entidad; elimine &props= de la URL para ver mucha más información al respecto. Consulte la ayuda generada para wbgetentities para conocer más parámetros que puede especificar.

Python

La salida es:

Q2469

Ejemplo 2: Obtener la lista de elementos sin una interwiki particular

...por favor, contribuya si sabe cómo...

...please contribute if you know how...

Véase también

Enlaces externos