首页 > 解决方案 > NodeJS cloudinary search API by context

问题描述

我可以使用这个从我的云端获取所有图像/视频的列表

  const response = await axios.get('https://api.cloudinary.com/v1_1/cloud_name/resources/image', {
    auth: {
      username: 'xxx',
      password: 'xx'
    }
  })

但我只想获得具有正确上下文的图像,所以我有两个要搜索的键值对。

{month: "November"}
{year: "2020}

但我似乎无法弄清楚如何从他们的文档中使用它,更重要的是下载他们的小部件以使用我不想使用的小部件,而只是使用 axios。

https://cloudinary.com/documentation/admin_api

它的路线列为 /resources/:resource_type/context/

但是,如果我尝试诸如https://api.cloudinary.com/v1_1/cloud_name/resources/image/context/month=November&year=2020

我收到一个错误

{
"error": {
"message": "Invalid value context for parameter type"
}
}

标签: node.jsaxioscloudinary

解决方案


更新 20201117

我发现有一种方法可以使用搜索 API 按多个上下文进行搜索。
您需要使用And来组合条件。
我已经尝试过了,它有效。

axios.post('https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/cloud_name/resources/search', {
    "expression": "context.month=November AND context.year=2020"
}).then((response) => {
    console.log(response.data);
})

原始答案

你可以这样使用。 https://api.cloudinary.com/v1_1/cloud_name/resources/image/context?key=month&value=November只有一个键值对

这是一个模板表单文档。
curl https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/video/context?mycontextkey&value=mycontextvalue

但是,在文档中我没有看到Get Resource by Context中有多个键值对。

而在cloudinary的nodejs SDK中。
它只实现了一个键值对,你可以在github中看到它

params.key = key;
if (value != null) {
    params.value = value;
}
return call_api("get", uri, params, callback, options);

而且我认为搜索 api 可能会将其存档。
但在search api的表达式字段中,它说。

您可以搜索特定的键值对,或者搜索具有特定键而不管值如何的所有资源,或者具有特定值而不考虑键的所有资源。

所以,是的……搜索 api 中只有一个特定的键值上下文
但是,如果您仍然想尝试使用搜索 api,您可以使用POST方法来执行此操作。

axios.post('https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/cloud_name/resources/search', {
    "expression": "context.month=November"
}).then((response) => {
    console.log(response.data);
})

我也很困惑为什么在 cloudinary 中没有用于上下文搜索的多个键值对。
然后,我认为您可以转换上下文结构。

原来的:

month=November
year=2020

将其转换为

date=2020-November

然后使用它在GETMethod 中进行上下文搜索。
curl https://api.cloudinary.com/v1_1/cloud_name/resources/image/context?key=date&value=2020-November

或者用这样的方法使用表达式POST

axios.post('https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/cloud_name/resources/search', {
    "expression": "context.date=2020-November"
}).then((response) => {
    console.log(response.data);
})

推荐阅读