Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs MediaWiki查询和/或WikidataQuery以查找Wikipedia文章_Angularjs_Json_Geolocation_Mediawiki Api_Wikidata Api - Fatal编程技术网

Angularjs MediaWiki查询和/或WikidataQuery以查找Wikipedia文章

Angularjs MediaWiki查询和/或WikidataQuery以查找Wikipedia文章,angularjs,json,geolocation,mediawiki-api,wikidata-api,Angularjs,Json,Geolocation,Mediawiki Api,Wikidata Api,这与其说是关于AngularJS的问题,不如说是关于Wikimedia和Wikidata查询API的问题 虽然我在做了一个特定的查询后,试图用AngularJS显示维基百科文章的内容,但这并不是问题所在。我已经知道如何显示它了。。。问题是搜索一篇或多篇文章 我试图通过历史事件日期和地理位置查询维基百科 让我们选择一个随机事件,任意事件。比如说“1986年莫桑比克图波列夫图-134坠毁事件”。链接: 从这篇文章中,我可以看到确切的日期:1986年10月19日 以及活动的地理位置:-25.91138

这与其说是关于AngularJS的问题,不如说是关于Wikimedia和Wikidata查询API的问题

虽然我在做了一个特定的查询后,试图用AngularJS显示维基百科文章的内容,但这并不是问题所在。我已经知道如何显示它了。。。问题是搜索一篇或多篇文章

我试图通过历史事件日期和地理位置查询维基百科

让我们选择一个随机事件,任意事件。比如说“1986年莫桑比克图波列夫图-134坠毁事件”。链接:

从这篇文章中,我可以看到确切的日期:1986年10月19日 以及活动的地理位置:-25.911389、31.957222

我正在尝试在AngularJS中构建一个搜索,它可以使用日期范围和/或地理位置坐标来查找事件

我知道mediawiki现在有一个地理定位API,我可以通过关键字或坐标找到上面的事件。结果还显示了在其周围一定半径内存在的任何其他项目,使用以下方法:

但是,无法使用mediawiki按时间点或事件日期进行搜索

另一方面,Wikidata有两种搜索数据的方法。。。它有一个日期范围和地理位置

但是,当运行查询时,我不知道返回的是什么

例如,当我使用此查询字符串时:

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,+0000000 1985-00-00T00:00:00Z,+0000000 1987-00-00T00:00:00Z])“}”之间,“项目:[950273]}

使用wikidata的查询工具:

我可以看出,950273在某种程度上代表了这篇文章。我只是不知道如何用它来引导我找到维基百科上的实际文章

我不知道“项目“:[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是Wikidata实体ID。您可以在

通过使用它,您可以使用API和操作
wbgetentities
查询Wikidata中与之连接的文章,并请求
sitelinks
sitelinks/url
,如下所示:


尝试直接使用Special:GotolkedPage转到您选择的语言版本。例如

您的建议奏效了。我花了一段时间才弄清楚如何从步骤a到C再到步骤B,但我做到了。这看起来有点像黑客,但很有效。我将控制器贴在了“编辑”的上方。