import os
|
|
|
|
import yaml
|
|
import json
|
|
|
|
|
|
class wikidata_PEP(object):
|
|
def __init__(self, config_file):
|
|
with open(config_file, "r") as stream:
|
|
try:
|
|
self.config = yaml.safe_load(stream)
|
|
except yaml.YAMLError as exc:
|
|
print(exc)
|
|
|
|
def import_members_of_parliament_dict(self, list_of_countries):
|
|
self.full_dictionary_member_lists = {}
|
|
|
|
for country in list_of_countries:
|
|
print("started to parse data of members of " + country + " ..")
|
|
|
|
f = open("crawlers/output/" + country + "MemberList.txt")
|
|
text = f.read()
|
|
|
|
self.full_dictionary_member_lists[country] = eval(text)
|
|
|
|
# print(self.full_dictionary_member_lists)
|
|
|
|
def check_for_entity_ids(self, list_of_countries):
|
|
from wikibaseintegrator import WikibaseIntegrator
|
|
from wikibaseintegrator import wbi_helpers
|
|
|
|
full_dictionary_member_lists = self.full_dictionary_member_lists
|
|
|
|
for country in list_of_countries:
|
|
for member_id in full_dictionary_member_lists[country].keys():
|
|
name = full_dictionary_member_lists[country][member_id]["name"]
|
|
|
|
results = wbi_helpers.search_entities(search_string=name)
|
|
|
|
for entity_id in results:
|
|
wbi = WikibaseIntegrator()
|
|
wikidata_item = wbi.item.get(entity_id=entity_id)
|
|
|
|
for claim_key in wikidata_item.get_json()["claims"].keys():
|
|
if claim_key == "P31":
|
|
if (
|
|
wikidata_item.get_json()["claims"][claim_key][0][
|
|
"mainsnak"
|
|
]["datavalue"]["value"]["id"]
|
|
== "Q5"
|
|
):
|
|
print(entity_id)
|
|
print("---------")
|
|
print(name)
|
|
print("is a human")
|
|
|
|
def create_member_on_wikidata(self):
|
|
from wikibaseintegrator import wbi_login, WikibaseIntegrator
|
|
from wikibaseintegrator.datatypes import ExternalID, Item
|
|
from wikibaseintegrator.wbi_config import config as wbi_config
|
|
|
|
wbi_config["USER_AGENT"] = "PEPimport/1.0 (https://www.wikidata.org/wiki/User:)"
|
|
|
|
# login object
|
|
login_instance = wbi_login.OAuth2(consumer_token="", consumer_secret="")
|
|
|
|
wbi = WikibaseIntegrator(login=login_instance)
|
|
|
|
# data type object, e.g. for a NCBI gene entrez ID
|
|
is_human = Item(value="Q5", prop_nr="P31")
|
|
occupation_politician = ExternalID(value="Q82955", prop_nr="P106")
|
|
occupation_deputy = ExternalID(value="Q1055894", prop_nr="P106")
|
|
# referenceURL = URL(value='http://legislacion.asamblea.gob.ni/Tablas%20Generales.nsf/InfoDiputado.xsp?documentId=3D4CFDC4B3006D70062587C5007C29E1&action=openDocument&SessionID=1868803A06AB73D50B7F89BD0AB', prop_nr='P106')
|
|
|
|
# print(is_human)
|
|
# print(referenceURL)
|
|
|
|
# data goes into a list, because many data objects can be provided to
|
|
data1 = [is_human]
|
|
data2 = [occupation_deputy]
|
|
data3 = [occupation_politician]
|
|
|
|
# Create a new item
|
|
item = wbi.item.new()
|
|
|
|
# Set an english label
|
|
item.labels.set(language="en", value="Carlos Humberto Ruíz")
|
|
|
|
# Carlos Humberto Ruiz has the Qid Q116918332
|
|
|
|
# Set a French description
|
|
item.descriptions.set(
|
|
language="en", value="Nicaraguan National Assembly Deputy"
|
|
)
|
|
|
|
item.claims.add(data1)
|
|
# item.claims.add(data2)
|
|
# item.claims.add(data3)
|
|
print(item.write())
|
|
|
|
def editMemberOnWikidata(self, Qid):
|
|
from wikibaseintegrator import wbi_login, WikibaseIntegrator
|
|
from wikibaseintegrator.datatypes import ExternalID, Item, Time, String
|
|
from wikibaseintegrator.wbi_config import config as wbi_config
|
|
from wikibaseintegrator.wbi_enums import ActionIfExists
|
|
from wikibaseintegrator.wbi_enums import WikibaseDatePrecision
|
|
|
|
wbi_config[
|
|
"USER_AGENT"
|
|
] = "PEPimport/1.0 (https://www.wikidata.org/wiki/User:Alpcentaur)"
|
|
|
|
# login object
|
|
login_instance = wbi_login.OAuth2(consumer_token="", consumer_secret="")
|
|
|
|
wbi = WikibaseIntegrator(login=login_instance)
|
|
|
|
# data type object, e.g. for a NCBI gene entrez ID
|
|
# is_human = Item(value='Q5', prop_nr='P31')
|
|
# occupation_politician = Item(value='Q82955', prop_nr='P106')
|
|
# occupation_deputy = Item(value='Q1055894', prop_nr='P106')
|
|
# referenceURL = ExternalID(value='http://legislacion.asamblea.gob.ni/Tablas%20Generales.nsf/InfoDiputado.xsp?documentId=3D4CFDC4B3006D70062587C5007C29E1&action=openDocument&SessionID=1868803A06AB73D50B7F89BD0AB', prop_nr='P854')
|
|
|
|
# print(is_human)
|
|
# print(referenceURL)
|
|
|
|
references = [
|
|
[
|
|
ExternalID(
|
|
value="http://legislacion.asamblea.gob.ni/Tablas%20Generales.nsf/InfoDiputado.xsp?documentId=3D4CFDC4B3006D70062587C5007C29E1&action=openDocument&SessionID=1868803A06AB73D50B7F89BD0AB",
|
|
prop_nr="P854",
|
|
),
|
|
Time(
|
|
time="+2023-02-27T00:00:00Z",
|
|
prop_nr="P813",
|
|
precision=WikibaseDatePrecision.DAY,
|
|
),
|
|
]
|
|
]
|
|
|
|
occupation_deputy = Item(value="Q1055894", prop_nr="P106", references=references)
|
|
|
|
## data goes into a list, because many data objects can be provided to
|
|
# data1 = [is_human]
|
|
data2 = [occupation_deputy]
|
|
# data3 = [occupation_politician]
|
|
# data4 = [referenceURL]
|
|
## get item for Qid
|
|
item = wbi.item.get(entity_id=Qid)
|
|
|
|
# print(item.claims)
|
|
|
|
# Set an english label
|
|
# item.labels.set(language='en', value='Carlos Humberto Ruíz', action_if_exists=ActionIfExists.KEEP)
|
|
|
|
# Set a French description
|
|
# item.descriptions.set(language='en', value='Nicaraguan National Assembly Deputy', action_if_exists=ActionIfExists.KEEP)
|
|
|
|
# item.claims.add(data4)
|
|
item.claims.add(data2)
|
|
# item.claims.add(data3)
|
|
print(item.write())
|