sparql query materials
parent
5401f72ccf
commit
63d42b7850
@ -0,0 +1,59 @@
|
|||||||
|
# import rdflib
|
||||||
|
# g = rdflib.Graph()
|
||||||
|
# https://stackoverflow.com/questions/68824808/query-wikidata-rest-api-with-related-identifier
|
||||||
|
|
||||||
|
from urllib.request import urlopen
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
def get_info (wdurl):
|
||||||
|
m = re.search(r"^https?:\/\/www\.wikidata\.org\/(wiki|entity)/(?P<q>Q\d+)$", wdurl)
|
||||||
|
if m is not None:
|
||||||
|
qid = m.groupdict()['q']
|
||||||
|
# print ("qid", qid)
|
||||||
|
url = f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json?flavor=simple"
|
||||||
|
return json.load(urlopen(url))['entities'][qid]
|
||||||
|
else:
|
||||||
|
print("unrecognized url")
|
||||||
|
|
||||||
|
def query (q, format="json", endpoint="https://query.wikidata.org/sparql"):
|
||||||
|
p = {}
|
||||||
|
p['format'] = format
|
||||||
|
p['query'] = q
|
||||||
|
f = urlopen(endpoint+"?"+urlencode(p))
|
||||||
|
return json.load(f)['results']['bindings']
|
||||||
|
|
||||||
|
|
||||||
|
q1 = """
|
||||||
|
PREFIX p: <http://www.wikidata.org/prop/>
|
||||||
|
PREFIX ps: <http://www.wikidata.org/prop/statement/>
|
||||||
|
|
||||||
|
SELECT DISTINCT ?item ?statement0 ?material WHERE
|
||||||
|
{
|
||||||
|
?item p:P186 ?statement0.
|
||||||
|
?statement0 ps:P186 ?material.
|
||||||
|
}
|
||||||
|
LIMIT 10
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
print (q1)
|
||||||
|
print ()
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
for result in query(q1):
|
||||||
|
statement = result['statement0']['value']
|
||||||
|
value, item = result['material']['value'], result['item']['value']
|
||||||
|
value = get_info(value)
|
||||||
|
item = get_info(item)
|
||||||
|
# print ("value", value)
|
||||||
|
# print ("item", item)
|
||||||
|
try:
|
||||||
|
material_label, item_label = value['labels']['en']['value'], item['labels']['en']['value']
|
||||||
|
print (f"A {item_label} made of {material_label}. See {statement}")
|
||||||
|
print ()
|
||||||
|
sleep(3)
|
||||||
|
except KeyError:
|
||||||
|
print ("no english label?")
|
Loading…
Reference in New Issue