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