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.
32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
3 years ago
|
"use strict";
|
||
|
|
||
|
const surgeon = require("../../shared/surgeon-utils");
|
||
|
|
||
|
// https://uk.farnell.com/molex/51281-2694/fpc-connector-rcpt-26pos-0-3mm/dp/3051223
|
||
|
|
||
|
module.exports = function farnellScrapeProduct({ gotSession }) {
|
||
|
return async function ({ data, updateData, expireDependents }) {
|
||
|
let response = await gotSession(data.url, { timeout: 30000 });
|
||
|
|
||
|
let detailsTable = surgeon(`selectOne ".productDescription dl" | extractDefinitionList`, response.body);
|
||
|
|
||
|
let itemData = surgeon({
|
||
|
datasheetURL: [ () => detailsTable, `maybeCell "Technical Datasheet:" | selectOne a | readAttr href` ],
|
||
|
manufacturer: `selectOne .schemaOrg | text`,
|
||
|
model: `selectOne .ManufacturerPartNumber | text`,
|
||
|
productID: `selectOne .ManufacturerOrderCode | text`,
|
||
|
description: `selectOne .pdpAttributesName | text`,
|
||
|
alsoKnownAs: [ () => detailsTable, `maybeCell "Also Known As:" | text` ]
|
||
|
}, response.body);
|
||
|
|
||
|
// TODO: Merge self into productID-normalized item to deal gracefully with changing URLs
|
||
|
|
||
|
updateData((oldData) => ({
|
||
|
... oldData,
|
||
|
itemData: itemData
|
||
|
}));
|
||
|
|
||
|
expireDependents();
|
||
|
};
|
||
|
};
|