-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathicao
executable file
·44 lines (39 loc) · 1.35 KB
/
icao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python3
import argparse
from pprint import pprint
import requests
parser = argparse.ArgumentParser()
parser.add_argument("query", nargs="+", help="City name or ICAO code")
args = parser.parse_args()
ua = requests.Session()
ua.headers["User-Agent"] = "Mozilla/4.0 ~/bin/icao (gh://grawity)"
header = []
results = []
err = False
for query in args.query:
# https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service
# https://query.wikidata.org/sparql?query={SPARQL}
# https://stackoverflow.com/questions/30501124/or-in-a-sparql-query
# https://pypi.org/project/sparql-client/
sparql = """
SELECT DISTINCT ?item ?itemLabel ?iata ?icao
WHERE
{
?item wdt:P31 wd:Q1248784;
wdt:P238 ?iata;
wdt:P239 ?icao.
{ ?item ?label "%(query)s"@en. }
UNION
{ ?item wdt:P238|wdt:P239 "%(query)s". }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
""" % {"query": query}
resp = ua.get("https://query.wikidata.org/sparql",
params={"query": sparql},
headers={"Accept": "application/sparql-results+json"})
resp.raise_for_status()
data = resp.json()
for result in data["results"]["bindings"]:
# Flatten for display
result = {k: v["value"] for k, v in result.items()}
pprint(result)