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 kezdveq (2. paraméter
: a keresett érték szövegként, Q-val kezdvehas_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.
- Ha az értéke
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 ahas_hu
értékeTrue
.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)