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 геолокации, и я могу найти указанное выше событие либо по ключевому слову, либо по координатам. Результат также обнаруживает любые другие статьи, которые существуют в пределах определенного радиуса вокруг него, используя это:

http://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gscoord=-25.911389|31.957222&prop=extracts|info&exintro&titles=1986_Mozambican_Tupolev_Tu-134_crash&format=json&explaintext&redirects&inprop=url&indexpageids&format=json&callback=JSON_CALLBACK

Тем не менее, нет никакого способа выполнить поиск в 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:

http://tools.wmflabs.org/autolist/autolist1.html?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987]

Я вижу, что 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

Другие вопросы по тегам