如何将 Wikipedia API 自动完成建议限制为特定类别?

How to limit Wikipedia API Autocomplete suggestions to a certain category?

我有这个很棒的工作代码,可以从维基百科中提取自动完成建议。这真的很有用,只是我希望它只推荐 Bands。因此,例如,输入 "Pink" 只会 return /bands/ 以单词 "Pink" 开头,而不是世界上所有处理 'Pink'.[=14= 的东西]

有谁知道如何做到这一点? http://codepen.io/anon/pen/VePapK

我发现有一种方法可以通过使用查询操作 here(而不是 opensearch)按类别过滤结果,但奇怪的是似乎没有广泛的 "Music" 或 "Bands" 类别。所以这打开了更多未解决的问题....任何帮助表示赞赏。

编辑:或者,如果有人知道一种更简单的方法来在您网站的下拉列表中显示所有重要波段的更新列表,请告诉我。

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
            <form method="get" id="search">
                <input type="text" class="searchbox" value="Type here.. " onblur="if(this.value == '') { this.value = 'Type here..'; }" onfocus="if(this.value == 'Type here..') { this.value = ''; }" name="s">
                <button type="submit">Submit</button>
            </form> 





<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
<script type="text/javascript">
$(".searchbox").autocomplete({
    source: function(request, response) {
        console.log(request.term);
        $.ajax({
            url: "http://en.wikipedia.org/w/api.php",
            dataType: "jsonp",
            data: {
                'action': "opensearch",
                'format': "json",
                'search': request.term
            },
            success: function(data) {
                response(data[1]);
            }
        });
    }
});
</script>
</body>
</html>

关于维基百科的分类系统确实有很多问题需要解决。值得庆幸的是,有更好的方法。

这里有另一种方法可以让您从维基百科搜索中获得所需的内容:您可以将搜索参数与维基百科的 CirrusSearch API to get articles within a category (via incategory:<category title>), with a link to another Wikipedia page (via linksto:<page name>), or by a page that transcludes a common Wikipedia template (via hastemplate:<template name>). If you know the right Wikipedia category or page, you can use the first two options easily. Although the last one might sound odd, Wikipedia's well organized template system may be your best bet. Many band articles will have a common infobox on the right 一起使用,这将帮助您缩小搜索范围。

您可以像这样一起使用 CirrusSearch 和 hastemplate:Infobox_musical_artist

https://en.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch=hastemplate%3AInfobox_musical_artist+daft

其中returns这种格式的页面列表:

{
"batchcomplete": "",
"continue": {
    "sroffset": 10,
    "continue": "-||"
},
"query": {
    "searchinfo": {
        "totalhits": 470,
        "suggestion": "hastemplate:Infobox_musical_artist dart",
        "suggestionsnippet": "hastemplate:Infobox_musical_artist <em>dart</em>"
    },
    "search": [
        {
            "ns": 0,
            "title": "Daft Punk",
            "snippet": "<span class=\"searchmatch\">Daft</span> Punk are an electronic music duo consisting of French musicians Guy-Manuel de Homem-Christo and Thomas Bangalter. The duo achieved significant popularity",
            "size": 76278,
            "wordcount": 8170,
            "timestamp": "2016-02-08T01:33:54Z"
        },
        ...

这是一个 CodePen 演示http://codepen.io/slaporte/pen/obmaWY

它仍然可能无法捕获维基百科上 100% 的波段。如果您正在寻找特定的子流派,您可以尝试使用 hastemplate 参数以及链接或类别来缩小或扩大您的搜索范围。您可以了解更多有关其他维基百科 CirrusSearch 参数的信息 here.

顺便说一下,这是一种有趣的自动完成方法!