我有这个很棒的工作代码,可以从维基百科中提取自动完成建议。这真的很有用,只是我希望它只推荐 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
像这样在一起:
返回此格式的页面列表:
{
"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/