Jump to content

API:Geosuche

From mediawiki.org
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This page is a translated version of the page API:Geosearch and the translation is 76% complete.
Outdated translations are marked like this.

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 $2 bei allen API-Endpunkten. So, in this document, we will use the URL en.wikipedia.org in all API endpoints.

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 $3 versehen sein. Beachte, dass wir in der Abfrage unten die $4-Koordinaten in $5-Koordinaten geändert haben. Parameters passed along with a generator must be prefixed with a g. Note that in the query below, we've changed gs coord to ggs coord.

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 $2 nutzen, um zu prüfen, ob die Erweiterung dort aufgeführt ist. You can use Special:Version of a wiki to check if the extension is listed there.
  • 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 $1-Objekt. Siehe MDN-Dokumentation. Recent browsers have an opt-in navigator.geolocation object. See MDN docs.
    • 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