Jump to content

API:Geosuche

From mediawiki.org
This page is a translated version of the page API:Geosearch and the translation is 100% complete.

GET-Abfrage um nach Wikiseiten in der NĂ€he eines Ortes mit geografischen Koordinaten oder einem Seitennamen zu suchen.

Dieses Modul wird durch die Erweiterung:GeoData unterstĂŒtzt, die derzeit nicht auf MediaWiki installiert ist, aber auf Wikipedia. Daher nutzen wir in diesem Dokument die URL en.wikipedia.org bei allen API-Endpunkten.

API-Dokumentation

Sieh dir hier die vollstĂ€ndige Dokumentation und die Liste unterstĂŒtzter Parameter an.

Beispiel 1: Koordinaten erhalten

GET-Abfrage

Erhalte Koordinaten des Hauptsitzes der Wikimedia Foundation durch Angabe des Artikeltitels:

Antwort

{
    "batchcomplete": "",
    "query": {
        "pages": {
            "18618509": {
                "pageid": 18618509,
                "ns": 0,
                "title": "Wikimedia Foundation",
                "coordinates": [
                    {
                        "lat": 37.7891838,
                        "lon": -122.4033522,
                        "primary": "",
                        "globe": "earth"
                    }
                ]
            }
        }
    }
}

Beispielcode

Python

#!/usr/bin/python3

"""
    geocoordinates.py

    MediaWiki API Demos
    Demo of `Geosearch` module: Obtain coordinates for wiki pages nearby

    MIT License
"""

import requests

S = requests.Session()

URL = "https://en.wikipedia.org/w/api.php"

PARAMS = {
    "action": "query",
    "format": "json",
    "titles": "Wikimedia Foundation",
    "prop": "coordinates"
}

R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA['query']['pages']

for k, v in PAGES.items():
    print("Latitute: " + str(v['coordinates'][0]['lat']))
    print("Longitude: " + str(v['coordinates'][0]['lon']))

PHP

<?php
/*
    geocoordinates.php

    MediaWiki API Demos
    Demo of `Geosearch` module: Obtain coordinates for wiki pages nearby

    MIT License
*/

$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
    "action" => "query",
    "prop" => "coordinates",
    "titles" => "Wikimedia Foundation",
    "format" => "json"
];

$url = $endPoint . "?" . http_build_query( $params );

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );

$result = json_decode( $output, true );

foreach( $result["query"]["pages"] as $k => $v ) {
    echo("Latitute: " . $v["coordinates"][0]["lat"] . "\n" );
    echo("Longitude: " . $v["coordinates"][0]["lon"] . "\n" );
}

JavaScript

/*
    geocoordinates.js

    MediaWiki API Demos
    Demo of `Geosearch` module: Obtain coordinates for wiki pages nearby

    MIT License
*/

var url = "https://en.wikipedia.org/w/api.php"; 

var params = {
    action: "query",
    prop: "coordinates",
    titles: "Wikimedia Foundation",
    format: "json"
};

url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});

fetch(url)
    .then(function(response){return response.json();})
    .then(function(response) {
        var pages = response.query.pages;
        for (var page in pages) {
            console.log("Latitute: " + pages[page].coordinates[0].lat);
            console.log("Longitude: " + pages[page].coordinates[0].lon);
        }
    })
    .catch(function(error){console.log(error);});

MediaWiki JS

/*
	geocoordinates.js

	MediaWiki API Demos
	Demo of `Geosearch` module: Obtain coordinates for wiki pages nearby

	MIT License
*/

var params = {
		action: 'query',
		prop: 'coordinates',
		titles: 'Wikimedia Foundation',
		format: 'json'
	},
	api = new mw.Api();

api.get( params ).done( function ( data ) {
	var pages = data.query.pages,
		page;
	for ( page in pages ) {
		console.log( 'Latitute: ' + pages[ page ].coordinates[ 0 ].lat );
		console.log( 'Longitude: ' + pages[ page ].coordinates[ 0 ].lon );
	}
} );

Beispiel 2: Nach Seiten in der NĂ€he suchen

GET-Abfrage

Suche nach Seiten in der NĂ€he des Hauptsitzes der Wikimedia Foundation durch Angabe der geografischen Koordinaten des Ortes:

Antwort

Antwort
{
    "batchcomplete": "",
    "query": {
        "geosearch": [
            {
                "pageid": 18618509,
                "ns": 0,
                "title": "Wikimedia Foundation",
                "lat": 37.7891838,
                "lon": -122.4033522,
                "dist": 0,
                "primary": ""
            },
            {
                "pageid": 42936625,
                "ns": 0,
                "title": "Foxcroft Building",
                "lat": 37.789166666667,
                "lon": -122.40333333333,
                "dist": 2.5,
                "primary": ""
            }
            ...
        ]
    }
}

Beispielcode

geosearch.py

Python

#!/usr/bin/python3

"""
    geosearch.py

    MediaWiki API Demos
    Demo of `Geosearch` module: Search for wiki pages nearby

    MIT License
"""

import requests

S = requests.Session()

URL = "https://en.wikipedia.org/w/api.php"

PARAMS = {
    "format": "json",
    "list": "geosearch",
    "gscoord": "37.7891838|-122.4033522",
    "gslimit": "10",
    "gsradius": "10000",
    "action": "query"
}

R = S.get(url=URL, params=PARAMS)
DATA = R.json()

PLACES = DATA['query']['geosearch']

for place in PLACES:
    print(place['title'])

PHP

<?php
/*
    geosearch.php

    MediaWiki API Demos
    Demo of `Geosearch` module: Search for wiki pages nearby

    MIT License
*/

$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
    "action" => "query",
    "list" => "geosearch",
    "gscoord" => "37.7891838|-122.4033522",
    "gsradius" => "10000",
    "gslimit" => "10",
    "format" => "json"
];

$url = $endPoint . "?" . http_build_query( $params );

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );

$result = json_decode( $output, true );

foreach( $result["query"]["geosearch"] as $place ){
    echo( $place["title"] . "\n" );
}

JavaScript

/*
    geosearch.js

    MediaWiki API Demos
    Demo of `Geosearch` module: Search for wiki pages nearby

    MIT License
*/

var url = "https://en.wikipedia.org/w/api.php"; 

var params = {
    action: "query",
    list: "geosearch",
    gscoord: "37.7891838|-122.4033522",
    gsradius: "10000",
    gslimit: "10",
    format: "json"
};

url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});

fetch(url)
    .then(function(response){return response.json();})
    .then(function(response) {
        var pages = response.query.geosearch;
        for (var place in pages) {
            console.log(pages[place].title);
        }
    })
    .catch(function(error){console.log(error);});

MediaWiki JS

/*
	geosearch.js

	MediaWiki API Demos
	Demo of `Geosearch` module: Search for wiki pages nearby

	MIT License
*/

var params = {
		action: 'query',
		list: 'geosearch',
		gscoord: '37.7891838|-122.4033522',
		gsradius: '10000',
		gslimit: '10',
		format: 'json'
	},
	api = new mw.Api();

api.get( params ).done( function ( data ) {
	var pages = data.query.geosearch,
		place;
	for ( place in pages ) {
		console.log( pages[ place ].title );
	}
} );

Beispiel 3: Nach Seiten in der NĂ€he mit Bildern suchen

GET-Abfrage

Als Erweiterung des Beispiels 2 nutzen wir hier das Generator-Modul, um Suchergebnisse fĂŒr Seiten in der NĂ€he des Hauptsitzes der Wikimedia Foundation mit Bildern zu erhalten. Parameter, die ĂŒber einen Generator ĂŒbergeben werden, mĂŒssen mit dem PrĂ€fix g versehen sein. Beachte, dass wir in der Abfrage unten die gs-Koordinaten in ggs-Koordinaten geĂ€ndert haben.

Antwort

Antwort
{
    "batchcomplete": "",
    "query": {
        "pages": {
            "2608926": {
                "pageid": 2608926,
                "ns": 0,
                "title": "San Francisco Mechanics' Institute",
                "index": 0,
                "coordinates": [
                    {
                        "lat": 37.788844,
                        "lon": -122.403042,
                        "primary": "",
                        "globe": "earth"
                    }
                ],
                "thumbnail": {
                    "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/MechanicsInstituteSanFrancisco.jpg/32px-MechanicsInstituteSanFrancisco.jpg",
                    "width": 32,
                    "height": 50
                },
                "pageimage": "MechanicsInstituteSanFrancisco.jpg"
            },
      }
}

Beispielcode

geoimagesearch.py

Python

#!/usr/bin/python3

"""
    geoimagesearch.py

    MediaWiki API Demos
    Demo of `Geosearch` module: Use generator module
	to get search results for pages near Wikimedia HQ
	with images

    MIT License
"""

import requests

S = requests.Session()

URL = "https://en.wikipedia.org/w/api.php"

PARAMS = {
    "action": "query",
    "format": "json",
    "ggscoord": "37.7891838|-122.4033522",
    "generator": "geosearch",
    "prop": "coordinates|pageimages"
}

R = S.get(url=URL, params=PARAMS)
DATA = R.json()

PLACES = DATA['query']['pages']

for k, v in PLACES.items():
    print(str(v['title']) + ": " + str(v['thumbnail']['source']))

PHP

<?php
/*
    geoimagesearch.php

    MediaWiki API Demos
    Demo of `Geosearch` module: Use generator module
	to get search results for pages near Wikimedia HQ
	with images

    MIT License
*/

$endPoint = "https://en.wikipedia.org/w/api.php";
$params = [
    "action" => "query",
    "generator" => "geosearch",
    "prop" => "coordinates|pageimages",
    "ggscoord" => "37.7891838|-122.4033522",
    "format" => "json"
];

$url = $endPoint . "?" . http_build_query( $params );

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );

$result = json_decode( $output, true );

foreach( $result["query"]["pages"] as $k => $v ) {
    echo( $v["title"] . ": " . $v["thumbnail"]["source"] . "\n" );
}

JavaScript

/*
    geoimagesearch.js

    MediaWiki API Demos
    Demo of `Geosearch` module: Use generator module
	to get search results for pages near Wikimedia HQ
	with images

    MIT License
*/

var url = "https://en.wikipedia.org/w/api.php"; 

var params = {
    action: "query",
    generator: "geosearch",
    prop: "coordinates|pageimages",
    ggscoord: "37.7891838|-122.4033522",
    format: "json"
};

url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});

fetch(url)
    .then(function(response){return response.json();})
    .then(function(response) {
        var pages = response.query.pages;
        for (var page in pages) {
            console.log(pages[page].title + ": " + pages[page].thumbnail.source);
        }
    })
    .catch(function(error){console.log(error);});

MediaWiki JS

/*
	geoimagesearch.js

	MediaWiki API Demos
	Demo of `Geosearch` module: Use generator module
	to get search results for pages near Wikimedia HQ
	with images

	MIT License
*/

var params = {
		action: 'query',
		generator: 'geosearch',
		prop: 'coordinates|pageimages',
		ggscoord: '37.7891838|-122.4033522',
		format: 'json'
	},
	api = new mw.Api();

api.get( params ).done( function ( data ) {
	var pages = data.query.pages,
		page;
	for ( page in pages ) {
		console.log( pages[ page ].title + ': ' + pages[ page ].thumbnail.source );
	}
} );

Demo-App(s)

  • Special:Nearby auf der englischsprachigen Wikipedia zeigt Artikel ĂŒber Orte in deiner NĂ€he
    Bildschirmfoto der Wikipedia-iOS-App - zeigt Orte in der NĂ€he des Hauptsitzes der Wikimedia Foundation
  • Wikipedia-Apps nutzen diese API, um nahegelegene Orte zu zeigen. Die API-Nutzung ist im Quellcode der Android- und iOS-App zu sehen
  • Nearby ist eine App fĂŒr die Pebble-Smartwatch, die Wikipedia-Artikel in deiner NĂ€he anzeigt.

Mögliche Fehler

Code Information
badcoord UngĂŒltige Koordinaten angegeben

ZusÀtzliche Anmerkungen

  • Dieses Modul wird durch die Erweiterung:GeoData unterstĂŒtzt, die derzeit auf Wikimedia Commons, allen Wikipedias, allen Wikivoyage-Seiten und einigen anderen Wikis installiert ist. Du kannst in einem Wiki Special:Version nutzen, um zu prĂŒfen, ob die Erweiterung dort aufgefĂŒhrt ist.
  • ZusĂ€tzlich zur Nutzung der API, um die Seiten-Koordinaten zu erhalten (wie in Beispiel 1 erklĂ€rt), sind hier einige weitere Möglichkeiten, um diese zu erhalten:
    • Wenn du den derzeitigen Aufenthaltsort eines Benutzers erhalten möchtest, ist dieser ĂŒber viele OS-spezifische APIs erhĂ€ltlich. Aktuelle Browser haben als Opt-In ein navigator.geolocation-Objekt. Siehe MDN-Dokumentation.
    • Wenn du den Benutzer Koordinaten angeben lassen möchtest, gibt es einige Dienste, die den Benutzer diese auf einer Karte auswĂ€hlen lassen. Siehe w:Wikipedia:Obtaining geographic coordinates.

Siehe auch