MediaWiki Query и / или WikidataQuery для поиска статьи в Википедии
Это не столько вопрос к AngularJS, сколько вопрос об API запросов Wikimedia и Wikidata.
Хотя я пытаюсь отобразить содержание статьи в Википедии в AngularJS после выполнения определенного запроса, который не является проблемой. Я уже знаю, как это отобразить... проблема в поиске статьи или статей.
Я пытаюсь запросить Википедию по исторической дате события, а также по географическому положению.
Давайте выберем случайное событие, любое событие. Допустим, "крушение Ту-134 в Мозамбике в 1986 году". Ссылка: http://en.wikipedia.org/wiki/1986_Mozambican_Tupolev_Tu-134_crash
Из статьи я вижу точную дату: 19 октября 1986 г.
а также географическое положение события: -25,911389, 31,957222
Я пытаюсь построить поиск в AngularJS, который может использовать или диапазон дат и / или координаты геолокации, чтобы найти событие.
Мне известно, что в Mediawiki теперь есть API геолокации, и я могу найти указанное выше событие либо по ключевому слову, либо по координатам. Результат также обнаруживает любые другие статьи, которые существуют в пределах определенного радиуса вокруг него, используя это:
Тем не менее, нет никакого способа выполнить поиск в MediaWiki по моменту времени или дате события.
В Викиданных, с другой стороны, есть два метода поиска данных... у него есть диапазон дат, а также геолокация.
Однако, когда выполняется запрос, я понятия не имею, что возвращается.
Например, когда я использую эту строку запроса:
https://wdq.wmflabs.org/api?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987]
это возвращает это:
{"status": {"error": "OK", "items": 1, "querytime": "544ms", "parsed_query": "(ВОКРУГ [625,-25.9114,31.9572,5] И МЕЖДУ [585,+00000001985-00-00T00:00:00Z +00000001987-00-00T00:00:00Z])"}," элементы ":[950273]}
Используя инструмент запросов wikidata:
Я вижу, что 950273 представляет статью в некотором роде. Я просто не уверен, как использовать это, чтобы направить меня к реальной статье в Википедии.
Я не знаю, что представляют собой "items": [950273]", или как его использовать, чтобы добраться до статьи в Википедии и отобразить содержание этой статьи в AngularJS.
Есть ли способ сделать запрос как по дате исторического события, так и по геолокации. Или с помощью MediaWiki или Wikidata или их комбинации?
РЕДАКТИРОВАТЬ: Это решение моего вопроса выше. Это похоже на взлом... но это работает. Пока достаточно. Вот мой контроллер.
.controller('WikiQueryCtrl', ['$scope', '$http', function($scope, $http) {
$http({
//these geo coordinates and the date ranges will eventually be dynamic.
url: 'https://wdq.wmflabs.org/api?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987]&callback=JSON_CALLBACK',
method: 'jsonp'
})
.success(function(response) {
var items = response.items;
$scope.jason = items;
var wikiDataString = 'http://www.wikidata.org/w/api.php?action=wbgetentities&format=json&ids=Q' + items + '&props=sitelinks%7Csitelinks%2Furls&callback=JSON_CALLBACK';
$http({
url: wikiDataString,
method: 'jsonp'
})
.success(function(response2) {
$scope.jason2 = response2;
var url = response2.entities["Q" + items].sitelinks.enwiki.url;
var wikipediaTitle = url.substr(24, url.length);
var wikipediaURL = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&titles=' + wikipediaTitle + '&format=json&explaintext&redirects&inprop=url&indexpageids&format=json&callback=JSON_CALLBACK';
$http({
url: wikipediaURL,
method: 'jsonp'
}).success(function(response4) {
var query = response4.query;
var pageID = response4.query.pageids;
var title = response4.query.pages[pageID].title;
var fullurl = response4.query.pages[pageID].fullurl;
var content = response4.query.pages[pageID].extract;
$scope.title = title;
$scope.content = content;
$scope.fullurl = fullurl;
$scope.jason = query;
});
});
});
}]);
1 ответ
950273 - это идентификатор объекта Wikidata. Саму сущность вы найдете на https://www.wikidata.org/wiki/Q950273
Используя это, вы можете запросить Wikidata для статей, связанных с ним, используя API и действие wbgetentities
и попросить sitelinks
а также sitelinks/url
как это: http://wikidata.org/w/api.php?action=wbgetentities&format=json&ids=Q950273&props=sitelinks%7Csitelinks%2Furls
Или попробуйте перейти на выбранную языковую версию напрямую, используя Special:GoToLinkedPage. Например. https://www.wikidata.org/wiki/Special:GoToLinkedPage/enwiki/Q950273