本文介紹Image Search服務Node.js SDK的使用方法及樣本。
準備工作
- 在安裝和使用阿里雲SDK前,確保您已經註冊阿里雲帳號並產生存取金鑰(AccessKey)。詳情請參見t1938336.html#task968。
- 安裝Image SearchNode.js SDK,Node.js大於等於6.X版本。
$ npm install @alicloud/imagesearch-2018-01-20 --save
建立Client
建立Client程式碼範例如下。
var Client = require("@alicloud/imagesearch-2018-01-20");
var client = new Client({
accessKeyId: "<AccessKeyID>", // 擷取地址: https://ak-console.aliyun.com
accessKeySecret: "<AccessKeySecret>",
endpoint: "http://imagesearch.ap-southeast-1.aliyuncs.com", // 擷取地址: https://www.alibabacloud.com/help/zh/doc-detail/179213.html
apiVersion: "2018-01-20"
});
新增圖片
新增圖片時,商品圖片搜尋執行個體使用者可以選擇指定或者不指定類目ID,通用圖片搜尋執行個體請不要指定類目ID。新增圖片程式碼範例如下。
var instanceName = "<InstanceName>"; // 購買的Image Search執行個體名稱,如: imagesearchtest
var catId = "0"; // 類目ID,參考: https://www.alibabacloud.com/help/zh/doc-detail/179184.html
var itemId = "1234"; // 商品/圖片ID
var custContent = "{\"key\":\"value\"}"; // 商品/圖片的Meta資訊,搜尋結果中會透傳
var picList = {}; // 圖片列表
// 下面以目前的目錄下的1.jpg 和 2.jpg 為例
picList[new Buffer("1.jpg").toString("base64")] = fs.readFileSync(path.resolve(__dirname, "1.jpg")).toString("base64");
picList[new Buffer("2.jpg").toString("base64")] = fs.readFileSync(path.resolve(__dirname, "2.jpg")).toString("base64");
var buildAddContent = function () {
if (!itemId || !catId || Object.keys(picList).length <= 0) {
return ;
}
if (custContent == null) {
custContent = "";
}
var params = {};
params.item_id = itemId;
params.cat_id = catId + "";
params.cust_content = custContent;
var picListStr = "";
Object.keys(picList).forEach(function (picName) {
if (picList[picName].length <= 0) {
return;
}
picListStr += picName + ",";
params[picName] = picList[picName];
});
params.pic_list = picListStr.substr(0, picListStr.length - 1);
return buildContent(params);
}
var buildContent = function (params) {
var meta = "";
var body = "";
var start = 0;
Object.keys(params).forEach(function (key) {
if (meta.length > 0) {
meta += "#";
}
meta += key +"," + start + "," + (start + params[key].toString().length);
body += params[key];
start += params[key].length;
})
return meta + "^" + body;
}
client.addItem({
instanceName: instanceName,
}, buildAddContent()).then(function (value) {
console.log("Result", JSON.stringify(value));
}).catch(function (err) {
console.log("Error Message: ", err);
});
查詢圖片
查詢圖片程式碼範例如下。
var instanceName = "<InstanceName>"; // 購買的Image Search執行個體名稱,如: imagesearchtest
var start = 0;
var num = 10;
var catId = "0";
// 下面以目前的目錄下的 1.jpg 為例
var picContent = fs.readFileSync(path.resolve(__dirname, "1.jpg")).toString("base64");
var buildSearchContent = function () {
var params = {};
params.s = start + "";
params.n = num + "";
if (!!catId) {
params.cat_id = catId + "";
}
var picName = new Buffer("searchPic").toString("base64");
params.pic_list = picName;
params[picName] = picContent;
return buildContent(params);
}
var buildContent = function (params) {
var meta = "";
var body = "";
var start = 0;
Object.keys(params).forEach(function (key) {
if (meta.length > 0) {
meta += "#";
}
meta += key +"," + start + "," + (start + params[key].toString().length);
body += params[key];
start += params[key].length;
})
return meta + "^" + body;
}
client.searchItem({
instanceName: instanceName,
}, buildSearchContent()).then(function (value) {
console.log("Result", JSON.stringify(value));
}).catch(function (err) {
console.log("Error Message: ", err);
});
刪除圖片
刪除圖片程式碼範例如下。
var instanceName = "<InstanceName>"; // 購買的Image Search執行個體名稱,如: imagesearchtest
var itemId = "1234";
var picList = ["1.jpg"]; // 如果不傳入,則刪除itemId下對應所有圖片
var buildDeleteContent = function () {
if (!itemId) {
return ;
}
var params = {};
params.item_id = itemId;
var picListStr = "";
picList.forEach(function (picName) {
if (picName.length >= 0) {
picListStr += new Buffer(picName).toString("base64") + ",";
}
});
params.pic_list = picListStr.substr(0, picListStr.length - 1);
return buildContent(params);
}
var buildContent = function (params) {
var meta = "";
var body = "";
var start = 0;
Object.keys(params).forEach(function (key) {
if (meta.length > 0) {
meta += "#";
}
meta += key +"," + start + "," + (start + params[key].toString().length);
body += params[key];
start += params[key].length;
})
return meta + "^" + body;
}
client.deleteItem({
instanceName: instanceName,
}, buildDeleteContent()).then(function (value) {
console.log("Result", JSON.stringify(value));
}).catch(function (err) {
console.log("Error Message: ", err);
});