Wikidata:Creación de un bot
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
- Únete a un canal de telegram de Wikidata y participa en las discusiones (y pide ayuda si tienes problemas con la programación).
Pywikibot
Advertencia: Este bot marco no soporta lexemas a partir de enero de 2021. Consulte otras bibliotecas a continuación para obtener soporte completo. |
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:
- Instala Python (se requiere Python v3.5.2 o superior).
- Descarga pywikibot:
- Como un archivo zip
- O usando el repositorio git: Manual:Pywikibot/Gerrit
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
.
Extended content |
---|
mylang = "wikidata"
family = "wikidata"
usernames["wikidata"]["wikidata"] = 'MyBotName'
|
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
Extended content |
---|
import pywikibot
site = pywikibot.Site("en", "wikipedia")
page = pywikibot.Page(site, 'Douglas Adams')
item = pywikibot.ItemPage.fromPage(page)
dictionary = item.get()
print(dictionary)
print(dictionary.keys())
print(item)
|
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:
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
|
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.
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
item.get()
print(",".join(item.sitelinks))
|
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.
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
item.get()
mydescriptions = {'en': 'English writer and humorist', 'de': 'Keine Panik!'}
item.editDescriptions(mydescriptions, summary='Setting/updating descriptions.')
|
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:
Extended content |
---|
import pywikibot
site = pywikibot.Site("en", "wikipedia")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
page = pywikibot.Page(site, 'Douglas Adams')
item.setSitelink(page, summary='Setting (/updating?) sitelink.')
|
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).
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
claim = pywikibot.Claim(repo, 'P19')
target = pywikibot.ItemPage(repo, 'Q350')
claim.setTarget(target)
item.addClaim(claim, summary='Adding claim')
|
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):
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
stringclaim = pywikibot.Claim(repo, 'P345')
stringclaim.setTarget('nm0010930')
item.addClaim(stringclaim, summary='Adding string claim')
coordinateclaim = pywikibot.Claim(repo, 'P625')
coordinate = pywikibot.Coordinate(lat=52.208, lon=0.1225, precision=0.001, site=site)
coordinateclaim.setTarget(coordinate)
item.addClaim(coordinateclaim, summary='Adding coordinate claim')
|
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.
Extended content |
---|
qualifier = pywikibot.Claim(repo, 'P678')
target = pywikibot.ItemPage(repo, "Q35409")
qualifier.setTarget(target)
claim.addQualifier(qualifier, summary='Adding a qualifier.')
|
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.
Extended content |
---|
statedin = pywikibot.Claim(repo, 'P248')
itis = pywikibot.ItemPage(repo, "Q82575")
statedin.setTarget(itis)
retrieved = pywikibot.Claim(repo, 'P813')
date = pywikibot.WbTime(year=2014, month=3, day=20)
retrieved.setTarget(date)
claim.addSources([statedin, retrieved], summary='Adding sources.')
|
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).
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q13515')
item.get()
sourcesid = 'P1343'
sourceid = 'Q17378135'
urlid = 'P854'
nameid = 'P1476'
# item.claims['P1343'][1].qualifiers.items(): # This are direct way to get list qualifiers. But '[1]' is hard link to index of list, it will break over time.
if sourcesid in item.claims:
for source in item.claims[sourcesid]:
if source.target.id == sourceid:
s = source.qualifiers
if urlid in s: url = s.get(urlid)[0].target
if nameid in s: name = s.get(nameid)[0].target['text']
print (url, name)
|
Más ejemplos
Algunos usuarios comparten sus códigos fuentes. Obtenga más información en los siguientes enlaces:
- User:RobotMichiel1972/wikidata lowercase.py - pywikipedia example how you can correct the label to lowercase using the English label capitalization as 'reference' (here hard coded implemented for nlwiki only) running over selection of pages in own wikipedia.
- File:Bots hackathon 2013.pdf presenting "claimit.py" and "template_harvest.py" included in the core version (former re-write).
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
- Descarga: DotNetDataBot
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site wikidata = new Site("http://www.wikidata.org", "User", "Password");
}
|
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site);
if (item.itemExists("it", "George Lucas")) // Check if exist on Wikidata
{
Console.Write("Q" + item.GetIdBySitelink("it", "George Lucas"));
}
else
{
Console.Write("Doesn't exist");
}
}
|
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site);
item.id = item.GetIdBySitelink("it", "George Lucas");
item.Load();
foreach(KeyValuePair<string, string> link in item.links)
{
Console.Write(link.Key); // lang (eg. en or it)
Console.Write(link.Value); // page (eg. George_Lucas)
}
}
|
Ejemplo 3: Establecer una descripción
Para establecer la descripción, debes llamar a la función setDescription
.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site, "Q4115189");
item.Load();
if (item.descriptions.ContainsKey("it")) // if alredy exist description in italian
{
// Nothing to do
}
else
{
item.setDescription("it", "description in italian", "Bot: Add italian description");
}
}
|
Ejemplo 4: Establecer una etiqueta
Funciona de la misma forma para establecer una etiqueta. Solo tienes que llamar a la función setLabel
.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site, "Q4115189");
item.Load();
if (item.labels.ContainsKey("it")) // if alredy exist label in italian
{
// Nothing to do
}
else
{
item.setLabel("it", "label in italian", "Bot: Add italian label");
}
}
|
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.
Extended content |
---|
<?php
/**
* Basic example for the use of the libary with some small edits
*/
require_once( __DIR__ . "/vendor/autoload.php" );
// Creates some useful objects and logs into the api
$api = new \Mediawiki\Api\MediawikiApi( "http://www.wikidata.org/w/api.php" );
$api->login( new \Mediawiki\Api\ApiUser( 'username', 'password' ) );
$dataValueClasses = array(
'unknown' => 'DataValues\UnknownValue',
'string' => 'DataValues\StringValue',
);
$wikidata = new \Wikibase\Api\WikibaseFactory(
$api,
new DataValues\Deserializers\DataValueDeserializer( $dataValueClasses ),
new DataValues\Serializers\DataValueSerializer()
);
// Gets the current revision for item Q777
$revision = $wikidata->newRevisionGetter()->getFromId( 'Q777' );
$item = $revision->getContent()->getData();
// Outputs the current sitelink for enwiki
var_dump( $item->getSiteLink( 'enwiki' ) );
// Sets the de description to 'Foobar'
$item->getFingerprint()->setDescription( 'de', 'Foobar' );
// Saves the item
$wikidata->newRevisionSaver()->save( $revision );
//Log out
$api->logout();
|
Ejemplo 2: Editando declaraciones
Puedes echar un vistazo a los comentarios del código fuente para entender como funciona.
Extended content |
---|
<?php
/**
* Basic example for the use of the library with some small edits.
*/
require_once( __DIR__ . "/vendor/autoload.php" );
// Creates some useful objects and logs into the api
$api = new \Mediawiki\Api\MediawikiApi( "https://www.wikidata.org/w/api.php" );
$api->login( new \Mediawiki\Api\ApiUser( 'username', 'password' ) );
$dataValueClasses = array(
'unknown' => 'DataValues\UnknownValue',
'string' => 'DataValues\StringValue',
);
$services = new \Wikibase\Api\WikibaseFactory(
$api,
new DataValues\Deserializers\DataValueDeserializer( $dataValueClasses ),
new DataValues\Serializers\DataValueSerializer()
);
$revision = $services->newRevisionGetter()->getFromId( 'Q777' );
$item = $revision->getContent()->getData();
$statementList = $item->getStatements();
if( $statementList->getByPropertyId( \Wikibase\DataModel\Entity\PropertyId::newFromNumber( 1320 ) )->isEmpty() ) {
$services->newStatementCreator()->create(
new \Wikibase\DataModel\Snak\PropertyValueSnak(
\Wikibase\DataModel\Entity\PropertyId::newFromNumber( 1320 ),
new \DataValues\StringValue( 'New String Value' )
),
'Q777'
);
}
// Log out
$api->logout();
|
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:
- Wikidata query
- Catscan 2
- Quick intersection
- What Links Here on Wikidata
- 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
- Wiki (parcial)
- User talk:ValterVB :)
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)
Extended content |
---|
private void CompleteExample()
{
//Wikidata query
string strWDQ = "CLAIM[31:24862] AND CLAIM[57] AND BETWEEN[577,+00000001908-00-00T00:00:00Z,+00000001908-12-31T00:00:00Z]";
ListGenerator lg = new ListGenerator();
List<string> chunks = lg.WDQ(strWDQ, 50);
//Connection to Wikipedia
WikimediaAPI WP = new WikimediaAPI("https://it.wikipedia.org", User, Password);
Pages PageList = new Pages();
//Connection to Wikidata
WikimediaAPI WD = new WikimediaAPI("https://www.wikidata.org", User, Password);
Entities EntityList = new Entities();
Dictionary<string, string> Labels = new Dictionary<string, string>();
foreach (string list in chunks)
{
// Load all entity of the chunk
string strJson = WD.LoadWD(list);
EntityList = new Entities();
EntityList = JsonConvert.DeserializeObject<Entities>(strJson, new DatavalueConverter());
foreach (KeyValuePair<string, Entity> entity in EntityList.entities)
{
if (entity.Value.sitelinks.ContainsKey("itwiki"))
{
// Load Wikipage
string Pages = WP.LoadWP(entity.Value.sitelinks["itwiki"].title);
PageList = JsonConvert.DeserializeObject<Pages>(Pages, new DatavalueConverter());
//Director from template
string director = Utility.GetTemplateParameter(PageList.query.FirstPageText, "film","Regista").Replace("[","").Replace("]", "");
Labels = new Dictionary<string, string>();
if (director=="")
{
Labels.Add("en", "1908 short movie");
}
else
{
Labels.Add("en", "1908 short movie directed by " + director);
}
// Update Wikidata
WD.EditEntity(entity.Value.id, null, Labels, null, null, null, "BOT: Update en label");
}
}
}
}
|
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):
Extended content |
---|
repo = LexData.WikidataSession("YourUsername", "YourPassword")
|
Recuperar un lexema
Puedes abrir los lexemas existentes y leer su contenido.
You can open existing Lexemes and read their content.
Extended content |
---|
L2 = LexData.Lexeme(repo, "L2")
print(L2.claims)
print(L2.forms)
print(L2.senses)
sense1 = L2.senses[0]
print(sense1.claims)
|
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.
Extended content |
---|
# Find an existing Lexeme by lemma, language and grammatical form
L2 = LexData.search_lexemes(repo, "first", en, "Q1084")
# Create a new Lexeme
L2 = LexData.create_lexeme(repo, "first", en, "Q1084")
# Find or create a Lexeme
L2 = LexData.get_or_create_lexeme(repo, "first", en, "Q1084")
|
Adding information
You can easily create forms or senses, with or without additional claims:
Extended content |
---|
if len(L2.forms) == 0:
L2.createForm("firsts", ["Q146786"])
if len(L2.senses) == 0:
L2.createSense(
{
"en": "Element in an ordered list which comes before all others according to the ordering",
"de": "einer Ordnung folgend das Element vor allen anderen",
},
claims={"P5137": ["Q19269277"]},
)
|
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
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
Extended content |
---|
#!/usr/bin/python3
from requests import get
def get_qnumber(wikiarticle, wikisite):
resp = get('https://www.wikidata.org/w/api.php', {
'action': 'wbgetentities',
'titles': wikiarticle,
'sites': wikisite,
'props': '',
'format': 'json'
}).json()
return list(resp['entities'])[0]
print(get_qnumber(wikiarticle="Andromeda Galaxy", wikisite="enwiki"))
|
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
- mw:Wikidata Toolkit Java framework
- Wikidata:Bots