2015-04-23 1 views
1

Это не столько вопрос, как AngularJS, как и API-интерфейсы Wikimedia и Wikidata.Запрос MediaWiki и/или WikidataQuery, чтобы найти статью Википедии

Хотя я пытаюсь отобразить содержимое статьи Википедии в AngularJS после выполнения определенного запроса, это не проблема. Я уже знаю, как отображать его ... проблема заключается в поиске статьи или статей.

Я пытаюсь запросить Википедию по исторической дате события , а также как по геолокации.

Давайте выбираем случайное событие, любое событие. Скажем, «1986 Мозамбикский Ту-134 Ту-134 сбой». Ссылка: 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 по точке во время или дату проведения мероприятие.

С другой стороны, у Wikidata есть два метода поиска данных ... у него есть диапазон дат, а также геолокация.

Однако, когда запрос выполняется, я понятия не имею, что возвращается.

Например, когда я использую эту строку запроса:

https://wdq.wmflabs.org/api?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987] 

возвращает это:

{ "Статус": { "Ошибка": "OK", "пункты": 1 , "querytime": "544ms", "parsed_query": "(ВОКРУГ [625, -25.9114,31.9572,5] И МЕЖДУ [585, + 00000001985-00-00T00: 00: 00Z, + 00000001987-00-00T00 : 00: 00Z]) "}," пункты ": [950273]}

Используя инструмент запроса викиданного в:

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

Я могу видеть, что представляет статью в некотором роде. Я просто не уверен, как использовать это, чтобы направить меня к фактической статье в Википедии.

Я не знаю, что такое «элементов»: [950273] »представляет или как его использовать, чтобы привести меня к статье в Википедии и отобразить содержимое этой статьи в AngularJS.

Есть ли способ выполнить как запрос по дате исторического события, так и геолокацию. Либо используя mediawiki, либо wikidata, либо их комбинацию?


EDIT: Это решение на мой вопрос выше. Кажется, это немного взломать ... но это работает. Достаточно хорошо. Вот мой контроллер.

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

ответ

4

является викиданным идентификатором объекта. Вы находите саму сущность в https://www.wikidata.org/wiki/Q950273

При использовании, что вы можете запросить викиданные для статей, связанных с ним, используя 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

+0

Ваше предложение сработало. Мне потребовалось некоторое время, чтобы понять, как перейти от шага A к C и через B, но я это сделал. Кажется, это немного взломанный, но он работает. Я отправил свой контроллер выше, где находится «Редактировать». – Livi17

Смежные вопросы