Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) Safe-mode: OFF (not secure) /var/www/html/OTapi/routes/ drwxr-xr-x | |
| Viewing file: Select action/file-type: const express = require('express');
const router = express.Router();
const Product = require('../models/Product');
const client = require('../lib/client');
const dotenv = require('dotenv');
dotenv.config();
const { INSTANCE_KEY, SECRET, OTAPI_BASE } = process.env;
// 1. Search by keyword
router.get('/search', async (req, res, next) => {
try {
const { q, page = 1, pageSize = 20 } = req.query;
var skip=parseInt(page-1)*20;
var limit=parseInt(page)*20;
var itemList=await Product.find({ keyword : q, page : parseInt(page)}).skip(skip).limit(limit);
// console.log(page*20);
if (itemList.length==0) {
const methodName = 'SearchItemsFrame';
const xmlParameters = `<SearchItemsParameters>
<ItemTitle>${q}</ItemTitle>
<Provider>Alibaba1688</Provider>
<Order>TotalVolumeDesc</Order>
</SearchItemsParameters>`;
const params = {
instanceKey: INSTANCE_KEY,
language: '',
framePosition: skip,
frameSize: 200,
format: 'json',
xmlParameters: xmlParameters,
// timestamp: timestamp, // <-- Add this line
blockList: '',
sessionId: '',
};
const result = await client.callOTAPI(methodName, params);
// console.log(result);
var items=result.OtapiItemSearchResultAnswer.Result.Items.Content.Item;
// console.log(items[0]);
const operations = items.map(element => {
let totalSales = null;
const fvValue = element.FeaturedValues?.Value;
if (Array.isArray(fvValue)) {
const entry = fvValue.find(v => v?.Name === "TotalSales");
totalSales = entry?._ ? parseInt(entry._, 10) : null;
} else if (fvValue?.Name === "TotalSales") {
totalSales = fvValue._ ? parseInt(fvValue._, 10) : null;
}
return {
updateOne: {
filter: { id: element.Id },
update: {
$set: {
title: element.Title,
price: element.Price.ConvertedPriceWithoutSign,
category_id: element.CategoryId,
MainPictureUrl: element.MainPictureUrl,
last_get: Date.now(),
page: parseInt(page),
keyword: q,
TotalSales: totalSales, // ← included here
},
$setOnInsert: {
created_at: Date.now()
}
},
upsert: true
}
};
});
// const operations = items.map(element => ({
// updateOne: {
// filter: { id: element.Id },
// update: {
// $set: {
// title: element.Title,
// price: element.Price.ConvertedPriceWithoutSign,
// category_id: element.CategoryId,
// MainPictureUrl: element.MainPictureUrl,
// // created_at: Date.now(),
// last_get: Date.now(),
// page: parseInt(page),
// keyword : q,
// },
// $setOnInsert: {
// created_at: Date.now()
// }
// },
// upsert: true
// }
// }));
const resul = await Product.bulkWrite(operations);
var itemList=await Product.find({ keyword : q, page : parseInt(page)}).skip(skip).limit(limit);
// var data;
// var itemList = [];
// items.forEach(element => {
// // Process each item as needed
// data = {
// id: element.Id,
// title: element.Title,
// price: element.Price.ConvertedPriceWithoutSign,
// category_id: element.CategoryId,
// MainPictureUrl: element.MainPictureUrl,
// created_at: Date.now(),
// last_get: Date.now(),
// page: parseInt(page),
// keyword : q,
// // image: element.PictureList.Content[0].PictureUrl,
// };
// itemList.push(data);
// });
}
// const item = await Product.insertMany(itemList);
res.json(itemList);
} catch (err) {
next(err);
}
});
router.get('/products/:itemId', async (req, res, next) => {
try {
var itemId= req.params.itemId;
var methodName="GetItemFullInfo";
const params = {
instanceKey: INSTANCE_KEY,
language: '',
format: 'json',
itemId: itemId
// timestamp: timestamp, // <-- Add this line
};
const result = await client.callOTAPI(methodName, params);
res.json(result.OtapiItemFullInfoAnswer.OtapiItemFullInfo);
} catch (err) {
next(err);
}
});
router.get('/store/:storeId', async (req, res, next) => {
try {
var storeId= req.params.storeId;
const methodName = 'SearchItemsFrame';
const xmlParameters = `<SearchItemsParameters>
<VendorId>${storeId}</VendorId>
<Provider>Alibaba1688</Provider>
<Order>TotalVolumeDesc</Order>
</SearchItemsParameters>`;
const params = {
instanceKey: INSTANCE_KEY,
language: '',
framePosition: 0,
frameSize: 200,
format: 'json',
xmlParameters: xmlParameters,
// timestamp: timestamp, // <-- Add this line
blockList: '',
sessionId: '',
};
const result = await client.callOTAPI(methodName, params);
var items=result.OtapiItemSearchResultAnswer.Result.Items.Content.Item;
var data;
var itemList = [];
items.forEach(element => {
// console.log(element);
let totalSales = null;
const fvValue = element.FeaturedValues?.Value;
if (Array.isArray(fvValue)) {
const entry = fvValue.find(v => v?.Name === "TotalSales");
totalSales = entry?._ ? parseInt(entry._, 10) : null;
} else if (fvValue?.Name === "TotalSales") {
totalSales = fvValue._ ? parseInt(fvValue._, 10) : null;
}
data = {
id: element.Id,
title: element.Title,
price: element.Price.ConvertedPriceWithoutSign,
category_id: element.CategoryId,
MainPictureUrl: element.MainPictureUrl,
TotalSales : totalSales
};
itemList.push(data);
});
res.json(itemList);
} catch (err) {
next(err);
}
});
module.exports = router; |
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0083 ]-- |