You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
const assert = require("assert");
|
|
|
|
const assureResponse = require("../../shared/assure-response");
|
|
|
|
module.exports = function lcscFindCategories(state) {
|
|
let { session } = state;
|
|
|
|
return async function ({ createItem }) {
|
|
let response = await session.get("https://wwwapi.lcsc.com/v1/home/category");
|
|
|
|
assureResponse(response);
|
|
assert(response.body.length > 0);
|
|
assert(response.statusCode === 200);
|
|
|
|
function processCategoryEntries(categories) {
|
|
for (let category of categories) {
|
|
let productCount = category.productNum;
|
|
let pageCount = Math.ceil(productCount / 500);
|
|
|
|
// NOTE: We do *not* use the page count indicated by the API, but instead calculate it ourself from the product count. This is because the API-specified page count will cap out at the equivalent of 10k items, even when more pages than that are actually available.
|
|
for (let i = 1; i <= pageCount; i++) {
|
|
createItem({
|
|
id: `lcsc:category:${category.catalogId}:page-${i}`,
|
|
tags: [ "lcsc:category" ],
|
|
data: {
|
|
... category,
|
|
pageNumber: i
|
|
}
|
|
});
|
|
}
|
|
|
|
if (category.childCatelogs != null) {
|
|
processCategoryEntries(category.childCatelogs);
|
|
}
|
|
}
|
|
}
|
|
|
|
processCategoryEntries(response.body);
|
|
};
|
|
};
|