def get_osm_wd_map(): file_path = wikidata_dir / 'osm_wd_map.json' if file_path.is_file(): return read_json(file_path) endpoint_url = "https://query.wikidata.org/sparql" query = """SELECT ?region ?osm WHERE { ?region wdt:P297 ?iso1; wdt:P402 ?osm. }""" iso1_results = get_results(endpoint_url, query) query = """SELECT ?region ?osm WHERE { ?region wdt:P300 ?iso2; wdt:P402 ?osm. }""" iso2_results = get_results(endpoint_url, query) osm_wd_map = {} for result in iso1_results["results"]["bindings"] + iso2_results["results"]["bindings"]: osm = int(result['osm']['value']) wd_id = result['region']['value'].split('/')[-1] osm_wd_map[osm] = wd_id write_json(file_path, osm_wd_map, indent=2) return osm_wd_map
def run_query_latest(qids: list): wd_ids_str = make_wd_ids_str(qids) endpoint_url = "https://query.wikidata.org/sparql" query = """SELECT ?item ?population ?atTime WHERE { VALUES ?item { WD_ID_STR_TEMPLATE } ?item p:P1082 ?populationStmt . ?populationStmt pq:P585 ?atTime . ?populationStmt ps:P1082 ?population . { SELECT ?item (MAX(?time) as ?atTime) WHERE { ?item p:P1082 ?populationStmt . ?populationStmt pq:P585 ?time . } GROUP BY ?item } }""".replace('WD_ID_STR_TEMPLATE', wd_ids_str) results = get_results(endpoint_url, query) data = {} for result in results["results"]["bindings"]: qid = result['item']['value'].split('/')[-1] population = int(float(result['population']['value'])) data[qid] = population return data
def run_query_simple(qids: list): wd_ids_str = make_wd_ids_str(qids) endpoint_url = "https://query.wikidata.org/sparql" query = """SELECT ?item ?population WHERE { VALUES ?item { WD_ID_STR_TEMPLATE } ?item wdt:P1082 ?population. }""".replace('WD_ID_STR_TEMPLATE', wd_ids_str) results = get_results(endpoint_url, query) data = {} for result in results["results"]["bindings"]: qid = result['item']['value'].split('/')[-1] population = int(float(result['population']['value'])) data[qid] = population return data
def run_query_ne0(qids: list): wd_ids_str = make_wd_ids_str(qids) endpoint_url = "https://query.wikidata.org/sparql" query = """SELECT ?item ?iso WHERE { VALUES ?item { WD_ID_STR_TEMPLATE } ?item wdt:P297 ?iso. }""".replace('WD_ID_STR_TEMPLATE', wd_ids_str) results = get_results(endpoint_url, query) data = {} for result in results["results"]["bindings"]: qid = result['item']['value'].split('/')[-1] iso = result['iso']['value'] data[qid] = iso return data
def get_osm_iso1_map(): file_path = wikidata_dir / 'osm_iso1_map.json' if file_path.is_file(): return read_json(file_path) endpoint_url = "https://query.wikidata.org/sparql" query = """SELECT ?region ?iso1 ?iso2 ?osm WHERE { ?region wdt:P297 ?iso1; wdt:P402 ?osm. }""" results = get_results(endpoint_url, query) osm_iso1_map = {} for result in results["results"]["bindings"]: iso1 = result['iso1']['value'] osm = int(result['osm']['value']) osm_iso1_map[osm] = iso1 write_json(file_path, osm_iso1_map, indent=2) return osm_iso1_map