API:Geosynchronizace

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

Požadavek GET pro vyhledání wiki stránek v blízkosti místa se zeměpisnými souřadnicemi nebo názvem stránky.

Tento modul je podporován prostřednictvím Extension:GeoData , který v současné době není nainstalován na MediaWiki, ale na Wikipedii. V tomto dokumentu tedy použijeme URL en.wikipedia.org ve všech koncových bodech API.

Dokumentace API

Kompletní dokumentaci a seznam podporovaných parametrů si můžete prohlédnout zde.

Příklad 1: Získání souřadnic

Dotazování přes GET

Získejte souřadnice sídla Wikimedia Foundation zadáním názvu článku:

Odpověď

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

Ukázkový kód

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 );
	}
} );

Příklad 2: Hledání stránek v okolí

Dotazování přes GET

Vyhledejte stránky poblíž sídla Wikimedia Foundation zadáním zeměpisných souřadnic jeho umístění:

Odpověď

Odpověď
{
    "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": ""
            }
            ...
        ]
    }
}

Ukázkový kód

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 );
	}
} );

Příklad 3: Hledání stránek v okolí s obrázky

Dotazování přes GET

Jako vylepšení příkladu 2 zde používáme generátorový modul k získání výsledků vyhledávání pro stránky poblíž sídla Wikimedia Foundation s obrázky. Parametry předávané společně s generátorem musí mít předponu g. Všimněte si, že v dotazu níže jsme změnili coord gs na ggs coord.

Odpověď

Odpověď
{
    "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"
            },
      }
}

Ukázkový kód

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 aplikace

  • Special:Nearby na anglické Wikipedii zobrazuje články o místech kolem vás
     
    Snímek obrazovky aplikace Wikipedia pro iOS – ukazuje místa v okolí sídla Wikimedia Foundation
  • Mobilní aplikace Wikipedia používají toto rozhraní API k zobrazení míst v okolí. Využití API lze vidět ve zdrojovém kódu aplikace Android a iOS
  • Nearby je aplikace pro chytré hodinky Pebble, která načítá články z Wikipedie ve vašem okolí.

Možné chyby

Kód Popis
badcoord Invalid coordinate provided

Další poznámky

  • Tento modul je podporován prostřednictvím Extension:GeoData , aktuálně nainstalovaného na Wikimedia Commons, všech Wikipediích, všech stránkách Wikivoyage a některých dalších wikin. Můžete použít Special:Version wiki ke kontrole, zda je tam přípona uvedena.
  • Kromě použití rozhraní API k vyžádání souřadnic stránky (jak je vysvětleno v příkladu 1) je zde několik dalších způsobů, jak je získat:
    • Pokud chcete aktuální polohu svého uživatele, je k dispozici prostřednictvím mnoha rozhraní API specifických pro operační systém. Nedávné prohlížeče mají objekt navigator.geolocation pro přihlášení. Viz dokumenty MDN.
    • Pokud chcete, aby uživatel poskytl souřadnice, existují různé služby, které uživateli umožňují vybrat si z mapy. Viz w:Wikipedia:Získávání zeměpisných souřadnic.

Související odkazy