コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
ファイル: ne_wikidata.py プロジェクト: praging/country-levels
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
コード例 #5
0
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