MediaWiki 查询 and/or WikidataQuery 以查找维基百科文章
MediaWiki Query and/or WikidataQuery to find Wikipedia article
这与其说是关于 AngularJS 的问题,不如说是关于维基媒体和维基数据查询 API 的问题。
虽然我在执行某个查询后尝试在 AngularJS 中显示 Wikipedia 文章的内容,但这不是问题所在。我已经知道怎么显示了。。。问题是搜索文章。
我正在尝试通过历史事件日期以及以及地理位置来查询维基百科。
让我们选择一个随机事件,任何事件。假设“1986 年莫桑比克图波列夫 Tu-134 坠毁”。 Link: http://en.wikipedia.org/wiki/1986_Mozambican_Tupolev_Tu-134_crash
从文章中,我可以看到确切的日期:1986 年 10 月 19 日
以及事件的地理位置:-25.911389, 31.957222
我正在尝试在 AngularJS 中构建一个搜索,它可以使用日期范围 and/or 地理定位坐标来查找事件。
我知道 mediawiki 现在有一个地理定位 API,我可以通过关键字或坐标找到上述事件。结果还会出现在它周围一定半径内存在的任何其他文章:
但是,无法通过时间点或事件日期使用 mediawiki 进行搜索。
另一方面,维基数据有两种搜索数据的方法……它有日期范围和地理位置。
但是,当查询为 运行 时,我不知道返回的是什么。
例如,当我使用这个查询字符串时:
https://wdq.wmflabs.org/api?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987]
它returns这个:
{"status":{"error":"OK","items":1,"querytime":"544ms","parsed_query":"(AROUND[625,-25.9114,31.9572,5]
AND
BETWEEN[585,+00000001985-00-00T00:00:00Z,+00000001987-00-00T00:00:00Z])"},"items":[950273]}
使用维基数据的查询工具:
我可以看出 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;
});
});
});
}]);
950273 是维基数据实体 ID。您在 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
这与其说是关于 AngularJS 的问题,不如说是关于维基媒体和维基数据查询 API 的问题。
虽然我在执行某个查询后尝试在 AngularJS 中显示 Wikipedia 文章的内容,但这不是问题所在。我已经知道怎么显示了。。。问题是搜索文章。
我正在尝试通过历史事件日期以及以及地理位置来查询维基百科。
让我们选择一个随机事件,任何事件。假设“1986 年莫桑比克图波列夫 Tu-134 坠毁”。 Link: http://en.wikipedia.org/wiki/1986_Mozambican_Tupolev_Tu-134_crash
从文章中,我可以看到确切的日期:1986 年 10 月 19 日
以及事件的地理位置:-25.911389, 31.957222
我正在尝试在 AngularJS 中构建一个搜索,它可以使用日期范围 and/or 地理定位坐标来查找事件。
我知道 mediawiki 现在有一个地理定位 API,我可以通过关键字或坐标找到上述事件。结果还会出现在它周围一定半径内存在的任何其他文章:
但是,无法通过时间点或事件日期使用 mediawiki 进行搜索。
另一方面,维基数据有两种搜索数据的方法……它有日期范围和地理位置。
但是,当查询为 运行 时,我不知道返回的是什么。
例如,当我使用这个查询字符串时:
https://wdq.wmflabs.org/api?q=AROUND[625,-25.911389,31.957222,5]%20AND%20BETWEEN[585,1985,1987]
它returns这个:
{"status":{"error":"OK","items":1,"querytime":"544ms","parsed_query":"(AROUND[625,-25.9114,31.9572,5] AND BETWEEN[585,+00000001985-00-00T00:00:00Z,+00000001987-00-00T00:00:00Z])"},"items":[950273]}
使用维基数据的查询工具:
我可以看出 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;
});
});
});
}]);
950273 是维基数据实体 ID。您在 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