为什么曲目名称中的点会混淆通过 Spotify Web API 进行的搜索?
Why are dots in track name confusing searches via Spotify Web API?
例如,我们要搜索曲目Sixx:A.M. Life Is Beautiful
。为此,请转到 Spotify Console。 total
int 响应为零。没有找到。
现在,转到该站点。将相同的文本 Sixx:A.M. Life Is Beautiful
粘贴到搜索字段中。结果不止一个。
有什么问题?
Description 搜索请求
回应:
{
"tracks": {
"href": "https://api.spotify.com/v1/search?query=Sixx%3AA.M.+Life+Is+Beautiful&type=track&offset=0&limit=1",
"items": [],
"limit": 1,
"next": null,
"offset": 0,
"previous": null,
"total": 0
}
}
站点url:
https://open.spotify.com/search/Sixx%3AA.M.%20Life%20Is%20Beautiful
更新
如果从字符串中删除点 - Sixx:AM
Life Is Beautiful - Spotify Console returns 需要的曲目!但是例如 P.O.D. Find My Way
- 点不干扰,结果与它们一起给出。我不明白它是如何工作的...
因为query
参数不是像网站那样简单的"search string"。是一个包含字段和运算符的字符串,如您在 the documentation 中所读。将用户输入直接作为 query
参数传递可能会导致问题,因为用户可以在不知情的情况下为运算符编写过滤器。您应该:
- 将此事通知用户。用户将编写运算符等知道他在做什么。
- 解析收到的字符串并创建适当的
query
参数。
我猜 Spotify 不喜欢他们查询中的奇怪字符,例如点等(例如 Google 相同,但 Google 过滤它们),所以我建议只解析字符串,删除点,将所有非字母数字字符转换为空格并使所有字符串小写,因此没有运算符(如文档所述,运算符为大写)。所以:
function cleanQuery(str) {
return encodeURIComponent(str.replace(/\./g, "").replace(/[^0-9a-z]/gi, " ").toLowerCase());
}
console.log("Clean \"Sixx:A.M. Life Is Beautiful\":", cleanQuery("Sixx:A.M. Life Is Beautiful"));
我用返回的结果进行了查询,结果有效:
请注意,这是一个快速测试。我注意到点的问题在于它们不是 第一个词 。也许有更多字符有问题,例如破折号。这将是一个反复试验的过程,因为文档有点含糊(例如,没有记录点)。
例如,我们要搜索曲目Sixx:A.M. Life Is Beautiful
。为此,请转到 Spotify Console。 total
int 响应为零。没有找到。
现在,转到该站点。将相同的文本 Sixx:A.M. Life Is Beautiful
粘贴到搜索字段中。结果不止一个。
有什么问题?
Description 搜索请求
回应:
{
"tracks": {
"href": "https://api.spotify.com/v1/search?query=Sixx%3AA.M.+Life+Is+Beautiful&type=track&offset=0&limit=1",
"items": [],
"limit": 1,
"next": null,
"offset": 0,
"previous": null,
"total": 0
}
}
站点url:
https://open.spotify.com/search/Sixx%3AA.M.%20Life%20Is%20Beautiful
更新
如果从字符串中删除点 - Sixx:AM
Life Is Beautiful - Spotify Console returns 需要的曲目!但是例如 P.O.D. Find My Way
- 点不干扰,结果与它们一起给出。我不明白它是如何工作的...
因为query
参数不是像网站那样简单的"search string"。是一个包含字段和运算符的字符串,如您在 the documentation 中所读。将用户输入直接作为 query
参数传递可能会导致问题,因为用户可以在不知情的情况下为运算符编写过滤器。您应该:
- 将此事通知用户。用户将编写运算符等知道他在做什么。
- 解析收到的字符串并创建适当的
query
参数。
我猜 Spotify 不喜欢他们查询中的奇怪字符,例如点等(例如 Google 相同,但 Google 过滤它们),所以我建议只解析字符串,删除点,将所有非字母数字字符转换为空格并使所有字符串小写,因此没有运算符(如文档所述,运算符为大写)。所以:
function cleanQuery(str) {
return encodeURIComponent(str.replace(/\./g, "").replace(/[^0-9a-z]/gi, " ").toLowerCase());
}
console.log("Clean \"Sixx:A.M. Life Is Beautiful\":", cleanQuery("Sixx:A.M. Life Is Beautiful"));
我用返回的结果进行了查询,结果有效:
请注意,这是一个快速测试。我注意到点的问题在于它们不是 第一个词 。也许有更多字符有问题,例如破折号。这将是一个反复试验的过程,因为文档有点含糊(例如,没有记录点)。