【问题标题】:MediaWiki Query and/or WikidataQuery to find Wikipedia articleMediaWiki Query 和/或 WikidataQuery 以查找 Wikipedia 文章
【发布时间】:2015-04-23 00:27:29
【问题描述】:

这不是关于 AngularJS 的问题,而是关于 Wikimedia 和 Wikidata 查询 API 的问题。

虽然我尝试在 AngularJS 中显示 Wikipedia 文章的内容,但在进行了某个不存在问题的查询之后。我已经知道如何显示它了...问题是搜索一篇或多篇文章。

我正在尝试按历史事件日期以及以及地理位置查询 Wikipedia。

让我们选择一个随机事件,任何事件。假设“1986 Mozambican Tupolev Tu-134 crash”。链接:http://en.wikipedia.org/wiki/1986_Mozambican_Tupolev_Tu-134_crash

从文章中,我可以看到确切的日期:1986 年 10 月 19 日
以及活动的地理位置:-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]

它返回这个:

{"status":{"error":"OK","items":1,"querytime":"544ms","parsed_query":"(AROUND[625,-25.9114,31.9572,5] 和 BETWEEN[585,+00000001985-00-00T00:00:00Z,+00000001987-00-00T00:00:00Z])"},"items":[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 中显示该文章的内容。 p>

有没有办法同时按历史事件的日期和地理位置进行查询。使用 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;
                    });
                });
        });
}]);

【问题讨论】:

    标签: angularjs json geolocation mediawiki-api wikidata-api


    【解决方案1】:

    950273 是维基数据实体 ID。您可以在 https://www.wikidata.org/wiki/Q950273 找到实体本身

    通过使用它,您可以使用 API 和操作 wbgetentities 查询 Wikidata 中与之关联的文章,并像这样询问 sitelinkssitelinks/urlhttp://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

    【讨论】:

    • 你的建议奏效了。我花了一段时间才弄清楚如何从步骤 A 到 C 并通过 B,但我做到了。这似乎有点像黑客,但它确实有效。我在“编辑”所在的位置上方发布了我的控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-10-09
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多