Szerkesztő:BinBot/huwiki/wikidata.py/Példa

A wikidata.py a huwiki csomag önállóan is használható modulja. A Wikidata használatát könnyíti meg, és a magyar Wikipédia számára tervezett szolgáltatásokat nyújt.

Kiemelten hasznos listák készítésében (ez is volt a megírásának a célja) és kategóriák felosztásában.

Az ItemPlus osztály használata

szerkesztés

A p_q_generator() függvény használata

szerkesztés

Ez a generátor felsorolja a megadott tulajdonságú lapokat, csak a megfelelő P és Q értéket kell megtalálnunk egy ismert példa alapján. Például egy adott városban születettek, a második világháború katonái, az Orion csillagai, fővárosok, Johann Strauss művei, VIII. Henrik feleségei, szőke nők... A lényeg, hogy az adott tulajdonsághoz tartozó érték egy Wikidata-elem legyen, aminek van Q azonosítója (ne valami fizikai mennyiség vagy hangfájl vagy ilyesmi).

A használata rendkívül egyszerű. Alapesetben a magyar szócikkeket listázza ki. A paraméterei:

  • p (1. paraméter): a keresett tulajdonság szövegként, P-vel kezdve
  • q (2. paraméter: a keresett érték szövegként, Q-val kezdve
  • has_hu:
    • Ha az értéke 'yes' (ez az alapértelmezés), akkor csak azokat az elemeket sorolja fel, amelyekhez van magyar nyelvű szócikk.
    • Ha az értéke 'no', akkor csak azokat az elemeket sorolja fel, amelyekhez nincs magyar nyelvű szócikk.
    • Bármilyen más esetben az összes elemet felsorolja.
  • hu: ha igaz, akkor a Wikidata-elemek helyett rögtön a huwiki lapjait generálja. Ez az alapértelmezés. Csak akkor működik, ha a has_hu értéke True.
  • total: egész szám, ennyi lapnál fog megállni a listázás. Ha nem adod meg, az összeset felsorolja. (Vigyázat, ez elég soká tarthat, ha pl. az összes embert listázod ki!)


A példában keressük a Medal of Honor kitüntetettjeit. Az első esetben kiírjuk az összes kitüntetettet, akinek van cikke a Magyar Wikipédiában.

from huwiki import wikidata

q = 'Q203535'  # Medal of Honor
p = 'P166'  # kitüntetés
for page in wikidata.p_q_generator(p, q):
    print(page)

Ennyi az egész.

Ha inkább a Wikidata-adatlapokat szeretnénk kiíratni, módosítsuk így:

for page in wikidata.p_q_generator(p, q, hu=False):
    print(page)

Az első 100 olyan kitüntetett listája, akiknek nincs magyar szócikkük:

for page in wikidata.p_q_generator(p, q, has_hu='no', total=100):
    print(page)

Az összes kitüntetett adatlapja és neve (a labelt csak a Wikidata-elemekhez használhatjuk, az első példában a magyar szócikkekhez nem):

for page in wikidata.p_q_generator(p, q, has_hu=''):
    print(page, page.label)

A property_has_value metódus használata

szerkesztés

Az ItemPlus osztály property_has_value metódusa azt vizsgálja, hogy az adott Wikidata-elem megadott tulajdonsága rendelkezik-e a keresett értékkel. Ilyen tulajdonság-érték párokat egy ismert példa adatlapjára kattintva nyerhetünk. A listázás segíthet pl. a kategóriák felosztásánál, létrehozásánál vagy annak eldöntésében, hogy érdemes-e egyáltalán foglalkozni ezzel. Ugyancsak hasznos lehet megírandó cikkek keresésénél, listaszócikkek összeállításánál.

Ebben a példában kiírjuk azoknak a vélhetően magyar nőknek a nevét, akik Budapesten születtek, és nincs magyar cikkük. Az item.property_has_value('P21', 'Q6581072') részlet szűri ki a nőket. A magyarság kritériumát lásd feljebb. (Ez még nem írja ki azokat, akiknél Budapest valamelyik kerülete van megadva születési helyként.)

from huwiki import wikidata

q = 'Q1781'  # Budapest
p = 'P19'  # születési hely
for item in wikidata.p_q_generator(p, q, has_hu='no'):
    if item.is_magyar and item.property_has_value('P21', 'Q6581072'):
        print(item, item.label)

Következő példánkban a Párizs építményei kategóriából listázzuk ki a szobrokat, mégpedig egyenesen a magyar szócikkeket. Ez nemcsak megmutatja, hogy érdemes kategorizálni, hanem egy allapra bemásolva segíti a gyors kategorizálást is.

import pywikibot
from pywikibot.exceptions import NoPageError
from huwiki import ItemPlus

site=pywikibot.Site()
cat = pywikibot.Category(site, 'Párizs építményei')

# Q860861 szobor
# Q179700 figurális szobor
for page in cat.articles(recurse=True):
    try:
        wd = page.data_item()
        item = ItemPlus(wd)
    except NoPageError:
        continue  # No Wikidata item yet
    if item.property_has_value('P31', 'Q860861') \
            or item.property_has_value('P31', 'Q179700'):
        print(item.hupage)

Vagy éppen kiírathatjuk Párizs műemlékeit is:

# P1435 örökségvédelmi besorolás
# Q10387575 bejegyzett műemlék
for page in cat.articles(recurse=True):
    try:
        wd = page.data_item()
        item = ItemPlus(wd)
    except NoPageError:
        continue  # No Wikidata item yet
    if item.property_has_value('P1435', 'Q10387575'):
        print(item.hupage)