Wikidata:Tworzenie bota

This page is a translated version of the page Wikidata:Creating a bot and the translation is 53% complete.
Outdated translations are marked like this.

Na tej stronie opisano jak stworzyć boty Wikidanych. Proszę rozważyć podzielenie się kodem, dodawanie nowych przykładów i wszelkie ulepszenia.

Wymagania

Aby stworzyć boty potrzebne jest:

  • Pewne umiejętności programowania (Python, Perl, PHP ...)
  • Framework (jeden z podanych poniżej) i jakiś kod do uruchomienia, aby wykonać całe zadanie
  • Konto bota (zatwierdzone)
  • Edytor kodu źródłowego (Notepad++, Geany, vi, emacs)

Rekomendacja

Pywikibot

W kolejnych rozdziałach dowiesz się, jak zainstalować, skonfigurować i zalogować się używając pywikipediabot. Te trzy pierwsze kroki wystarczy wykonać tylko raz. Ponadto podanych jest kilka podstawowych przykładów, aby nauczyć się podstaw programowania bota.

Instalacja

Szczegółowe informacje na temat instalacji pywikibot znajdziesz na stronach mw:Manual:Pywikibot/Installation/pl i Wikidata:Pywikibot - Python 3 Tutorial/Setting up Shop
Aby użyć pywikibota bez instalacji, zobacz mw:Manual:Pywikibot/PAWS/pl

Aby zainstalować pywikibot:

Konfiguracja

Szczegółowe informacje na temat konfiguracji pywikibot znajdziesz na stronie mw:Manual:Pywikibot/user-config.py.

You must configure user-config.py file with the bot username, family project and language. For Wikidata both family and language parameters are the same, wikidata.

Możesz zmniejszyć opóźnienie między edycjami dodając: put_throttle = 1 put_throttle = 1

Logowanie

Po skonfigurowaniu pliku user-config.py zaloguj się w następujący sposób:

$ python login.py

Program zapyta o hasło bota, wpisz je i naciśnij klawisz enter. Jeśli zrobiłeś to poprawnie, powinieneś zostać zalogowany.

Przykład 1: Pobieranie danych

Ten przykład pobiera dane dla strony odnoszącej się do Douglasa Adamsa. Zapisz poniższy kod źródłowy do pliku i wykonaj go python example1.py

item.get() łączy się do Wikidanych i pobiera dane. Na wyjściu otrzymujemy (sformatowane dla czytelności):

{
    '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]]

It prints a dictionary with keys for

  • the set of claims in the page: Property:P646 is the Freebase identifier, Property:P800 is "notable work", etc.
  • the label of the item in many languages
  • the sitelinks for the item, not just Wikipedias in many languages, but also Wikiquote in many languages
  • the item description in many languages
  • the aliases for the item in many languages

Then a list with all the keys for the key-values pairs in the dictionary. Finally, you can see that the Wikidata item about Douglas Adams is Q42.

Alternatywy

The example above gets the ItemPage using the en wikipedia article. Alternatively, we can also get the ItemPage directly:

Przykład 2: Pobieranie linków interwiki

Ten przykład pokazuje pobieranie linków interwiki do elementu. Są to linki do wszystkich Wikipedii, w których jest ten artykuł.

Wynikiem jest:

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

With item.iterlinks(), an iterator over all these sitelinks is returned, where each article is given not as plain text as above but already as a Page object for further treatment (e.g., edit the text in the corresponding Wikipedia articles).

Przykład 4: Ustawianie opisu

W tym przykładzie przestawione jest ustawienie angielskiego i niemieckiego opisu elementu Douglas Adams.

Setting labels and aliases works accordingly.

Przykład 6: Ustawianie linku interwiki

Przykład 6: Ustawienie linku interwiki

Przykład 7: Ustawianie deklaracji

Statements are set using the Claim class. In the following, we set for Douglas Adams place of birth (P19): Cambridge (Q350).

For other datatypes, this works similar. In the following, we add claims with string (IMDb ID (P345)) and coordinate (coordinate location (P625)) datatypes (URL is the same as string):

Przykład 8: Dodawanie kwalifikatora

Qualifiers are also represented by the Claim class. In the following, we add the qualifier incertae sedis (P678): family (Q35409) to the Claim "claim". Make sure you add the item before adding the qualifier.

Przykład 9: Dodawanie źródła

Also, sources are represented by the Claim class. Unlike for qualifiers, a source may contain more than one Claim. In the following, we add stated in (P248): Integrated Taxonomic Information System (Q82575) with retrieved (P813) March 20, 2014 as source to the Claim "claim". The claim has to be either retrieved from Wikidata or added to an itempage beforehand.

Przykład 10: Generatory strony

TODO

Example 11: Get values of sub-properties

In the following, we get values of sub-properties from branch described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> properties reference URL (P854) and title (P1476).

Więcej przykładów

Niektórzy użytkownicy udostępniają swoje kody źródłowe. Dowiedz się więcej z kolejnych linków:

Intergator Wikidanych

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.

For more information, documentation, download & installation instructions, see here: 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

Forked from Wikidata Integrator by User:Myst in 2020 and has seen several improvements to the API that makes it even easier to create bots using the library.

For more information, documentation, download & installation instructions, see here: https://github.com/LeMyst/WikibaseIntegrator

Przykład półautomatycznego skryptu

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

Wikibase.NET is the api that replaces the now deprecated DotNetDataBot. Api client for the MediaWiki extension Wikibase. They aren't compatible because Wikibase.NET does no longer need the DotNetWikiBot framework.

Pobieranie i instalacja

Framework można pobrać z GitHub tutaj. Wystarczy postępować zgodnie z instrukcjami pojawiającymi się na tej stronie.

Znane problemy

Przykłady

Wkrótce ...

DotNetDataBot (przestarzałe)

Instalacja

Konfiguracja

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.

Logowanie

To login you have to create a new Site object with the url of the wiki, your bot's username and its password.

Przykład 1: Pobieranie id za pomocą strony wiki

You can access the id of an item by searching for using the site and the title of the connected page.

Przykład 2: Pobieranie linków interwiki

You can get the interwiki links of an item by loading the content and accessing the links field of the object.

Przykład 3: Ustawianie opisu

Aby ustawić opis musisz wywołać funkcję setDescription.

Przykład 4: Ustawianie etykiety

Działa to w ten sam sposób jak przy ustawianiu etykiety. Należy wywołać funkcję setLabel.

Przykład 5: Pobieranie linków interwiki dla 100 stron

Ta funkcja nie jest obsługiwana. Wystarczy iteracji listy.

API Wikibase dla PHP

To jest klient API dla Wikibase napisany w PHP. Można go pobrać stąd.

Przykład 1: Prosty przykład

Spójrz na komentarze źródłowe, aby zobaczyć jak to działa.


Przykład 2: Tworzenie stwierdzeń

Spójrz na komentarze źródłowe, aby zobaczyć jak to działa.

VBot (no updates since 2017)

Framework for Wikidata and Wikipedia. Read and write on Wikidata and other Wikimedia project and have a useful list generator to generate list of Wikipedia page and Wikidata entity. Can read also JSON dump of Wikidata.

Przegląd

Bot do czytania oraz edytowania Wikidanych i Wikipedii.

  • 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"

Pobieranie

The framework can be downloaded from GitHub here.

Instrukcja

Przykład 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.

Wskazówki

The documentation of LexData is still a bit lacking so look at existing implementations in MachtSinn or Wikdata Lexeme Forms for ideas how to use it.

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.

Instalacja

Możesz zainstalować LexData za pomocą pip:

$ pip install LexData

Login

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):


Retrieve a Lexeme

You can open existing Lexemes and read their content.

Searching and creating Lexemes

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.

Dodatkowe informacje

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

Bezpośrednie użycie API Wikidata

The other sections describe how to use bot frameworks to access and update Wikidata information. You can also directly interact with the Wikibase API that Wikidata provides. You need to do this if you're developing your own framework or if you need to do something that a framework doesn't support. The documentation for the Wikibase API can be found at mediawiki.org. You can also play around with it at Special:ApiSandbox, try action=wbgetentities.

W tych przykładach API nie potrzeba instalować żadnego dodatkowego oprogramowania, tylko interpreter języka (Python, Perl itp.).

Przykład 1: Pobieranie numeru Q

W tym przykładzie przestawione jest pobieranie elementu o numerze Q, który zawiera link do artykuł o galaktyce Andromedy na anglojęzycznej Wikipedii.

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

Try following the link. This requests no additional information about the entity; remove &props= from the URL to see much more information about it. See the generated help for wbgetentities for more parameters you can specify.

Python

Wynikiem jest:

Q2469

Example 2: Get list of items without particular interwiki

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

Zobacz też

Linki zewnętrzne