api - 如何将维基百科 API 自动完成建议限制为特定类别?

标签 api autocomplete categories wikipedia

我有这个很棒的工作代码,可以从维基百科中提取自动完成建议。这真的很有用,只是我希望它只推荐 Bands。因此,例如,输入“Pink”只会返回以“Pink”一词开头的/bands/,而不是世界上所有与“Pink”打交道的东西。

有人知道怎么实现吗? http://codepen.io/anon/pen/VePapK

我发现有一种方法可以使用查询操作 here 按类别过滤结果(而不是 opensearch),但奇怪的是似乎没有广泛的“音乐”或“乐队”类别。所以这打开了更多 Unresolved 问题......感谢任何帮助。

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

<!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 结合使用。获取类别中的文章(通过 incategory:<category title> ),链接到另一个维基百科页面(通过 linksto:<page name> ),或通过包含通用维基百科模板的页面(通过 hastemplate:<template name> )。如果您知道正确的维基百科类别或页面,您可以轻松使用前两个选项。尽管最后一个听起来很奇怪,但维基百科组织良好的模板系统可能是您最好的选择。许多乐队文章都会有一个共同的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

返回此格式的页面列表:

{
"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 .

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

关于api - 如何将维基百科 API 自动完成建议限制为特定类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561165/

相关文章:

python - PDB 中的自动完成和制表键

html - 使用 yii2 设置自动完成输入?

php - MYSQL 获取分配给多个 "categories"的结果可能使用 JOIN?

objective-c - Objective-C中的继承和类别有什么区别

python - Google Maps API 未检索所有商店结果

javascript - 将 API 响应中的图像放在 html 页面上?

api - REST API URL 最佳实践

PHP 提示动态返回类型(基于 $class 参数)

objective-c - 如何配置 Doxygen 以正确记录 Objective-C 类别

php - Instagram API。 "Unable to reach callback url"