gpt4 book ai didi

javascript - 从类型返回所有​​内容 - Freebase MQL

转载 作者:行者123 更新时间:2023-11-28 01:42:49 26 4
gpt4 key购买 nike

为什么会返回 400 错误(唯一查询最多只能有一个结果。得到 100):

[{
name:null,
type:'music/artist'
}]

我希望它返回音乐/艺术家的前 100 个名字?它如何是一个独特的查询?

我正在尝试构建一个随机查询,我可以在其中提供两个参数 - 页面和页面内要返回的结果 - 并获取一个项目

如果 MQL 支持类似 return: 'random'

的东西那就太棒了

编辑 - 添加完整的 Angular 工厂。如果我将查询输入到 freebase.com/query 引擎,则查询运行良好。

myApp.factory('FB_Random', function ($http) {
return {
fn: function (callback) {
$http.get("https://www.googleapis.com/freebase/v1/mqlread",
{
params: {
query:[{
name: null,
type: '/music/artist'
}]
}
}
).success(function (d, status, headers, config) {
callback(d.result);
}).error(function (d, status, headers, config) {
console.log(d);
});
}
};
});

最佳答案

看起来这里发生了一些未记录的 Angular 行为。根据the Angular docsparams 参数采用“字符串或对象的映射,将在 url 之后转换为 ?key1=value1&key2=value2”。

但是,似乎有一些额外的逻辑在 params 映射中查找数组值并将它们转换为重复的参数; IE。 ?query={...}&query={...}。由于您的查询(正确)包装在数组表示法中,表明您期望多个结果,因此 Angular 将其解释为查询参数具有单个值的列表。然后它提取该查询参数并将其添加到 url 中,如下所示:

https://www.googleapis.com/freebase/v1/mqlread?query={%22name%22:null,%22type%22:%22/music/artist%22}

这就是为什么您收到有关查询错误地要求单个结果的错误的原因。因为 Angular 删除了 MQL 所需的外部数组表示法。

解决此问题的最简单方法是将查询简单地包装在一个附加数组中,如下所示:

$http.get("https://www.googleapis.com/freebase/v1/mqlread",
{
params: {
query:[[{
name: null,
type: '/music/artist'
}]]
}
}
)

如果您想让修复更加明确并且代码更易于阅读,您可以自己对 MQL 查询进行字符串化,如下所示:

$http.get("https://www.googleapis.com/freebase/v1/mqlread",
{
params: {
query: JSON.stringify([{
name: null,
type: '/music/artist'
}])
}
}
)

关于javascript - 从类型返回所有​​内容 - Freebase MQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20679977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com