code optimize
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
// console.log(request);
|
// console.log(request);
|
||||||
switch (request.from) {
|
switch (request.from) {
|
||||||
case "DataExtracter:Extract":
|
case "DataExtracter:Extract":
|
||||||
let data = extractData(request.itemsSelector, request.fieldSelectors);
|
let data = extractTabData(request.itemsSelector, request.fieldSelectors);
|
||||||
if (sendResponse) sendResponse(data);
|
if (sendResponse) sendResponse(data);
|
||||||
break;
|
break;
|
||||||
case "DataExtracter:GotoUrl":
|
case "DataExtracter:GotoUrl":
|
||||||
@ -22,7 +22,7 @@
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
function extractData(itemsSelector, fieldSelectors) {
|
function extractTabData(itemsSelector, fieldSelectors) {
|
||||||
return $(itemsSelector).toArray().map(
|
return $(itemsSelector).toArray().map(
|
||||||
item => fieldSelectors.map(
|
item => fieldSelectors.map(
|
||||||
selector => {
|
selector => {
|
||||||
@ -69,7 +69,9 @@ extract('.list-item', ['a.title', 'a.title@href'])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
saveFileAsk(extractData(args[0], args[1]));
|
let data = extractTabData(args[0], args[1]);
|
||||||
|
data.unshift(args[1]);
|
||||||
|
saveFileAsk(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let message = {
|
let message = {
|
||||||
|
|||||||
@ -4,21 +4,36 @@
|
|||||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||||
* @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages]
|
* @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages]
|
||||||
*/
|
*/
|
||||||
function extract(itemsSelector, fieldSelectors, ...args) {
|
async function extract(itemsSelector, fieldSelectors, ...args) {
|
||||||
|
let data = await extractData(itemsSelector, fieldSelectors, ...args);
|
||||||
|
data.unshift(fieldSelectors);
|
||||||
|
saveFileAsk(data);
|
||||||
|
resolve("save done.")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract data from current tab / multiple urls.
|
||||||
|
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||||
|
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||||
|
* @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages]
|
||||||
|
*/
|
||||||
|
async function extractData(itemsSelector, fieldSelectors, ...args) {
|
||||||
let urls = [];
|
let urls = [];
|
||||||
let listOrTempl = args.shift();
|
let arg = args.shift();
|
||||||
if (listOrTempl instanceof Array) {
|
if (arg instanceof Array) {
|
||||||
urls = listOrTempl;
|
urls = arg;
|
||||||
} else if (url) {
|
} else {
|
||||||
let urlTempl = listOrTempl;
|
let urlTempl = arg;
|
||||||
if (args[0] instanceof Array) {
|
if (urlTempl) {
|
||||||
urls = args[0].map(p => urlTempl.replace("${page}", p));
|
if (args[0] instanceof Array) {
|
||||||
} else if (args.length >= 3) {
|
urls = args[0].map(p => urlTempl.replace("${page}", p));
|
||||||
let from = args.shift();
|
} else if (args.length >= 3) {
|
||||||
let to = args.shift();
|
let from = args.shift();
|
||||||
let interval = args.shift();
|
let to = args.shift();
|
||||||
for (let i = from; i <= to; i += interval) {
|
let interval = args.shift();
|
||||||
urls.push(urlTempl.replace("${page}", i));
|
for (let i = from; i <= to; i += interval) {
|
||||||
|
urls.push(urlTempl.replace("${page}", i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,20 +50,18 @@ function extract(itemsSelector, fieldSelectors, ...args) {
|
|||||||
results => {
|
results => {
|
||||||
data.push(...results);
|
data.push(...results);
|
||||||
return redirectTab(tab, url).then(
|
return redirectTab(tab, url).then(
|
||||||
() => extractData(tab, itemsSelector, fieldSelectors)
|
() => extractTabData(tab, itemsSelector, fieldSelectors)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
() => p
|
() => p
|
||||||
), Promise.resolve([]));
|
), Promise.resolve([]));
|
||||||
} else {
|
} else {
|
||||||
pms = extractData(tab, itemsSelector, fieldSelectors);
|
pms = extractTabData(tab, itemsSelector, fieldSelectors);
|
||||||
}
|
}
|
||||||
pms.then(
|
pms.then(
|
||||||
results => {
|
results => {
|
||||||
data.push(...results);
|
data.push(...results);
|
||||||
data.unshift(fieldSelectors);
|
resolve(data);
|
||||||
saveFileAsk(data);
|
|
||||||
resolve("save done.")
|
|
||||||
},
|
},
|
||||||
err => reject(err)
|
err => reject(err)
|
||||||
);
|
);
|
||||||
@ -74,13 +87,13 @@ function redirectTab(tab, url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extract data in from the target tab, usually used to detect if the content script is ready.
|
* extract data in from the target tab.
|
||||||
* @param {any} tab target tab
|
* @param {any} tab target tab
|
||||||
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||||
* @returns {Promise<string[]>} a promise of extracted data
|
* @returns {Promise<string[]>} a promise of extracted data
|
||||||
*/
|
*/
|
||||||
function extractData(tab, itemsSelector, fieldSelectors) {
|
function extractTabData(tab, itemsSelector, fieldSelectors) {
|
||||||
let req = {
|
let req = {
|
||||||
from: "DataExtracter:Extract",
|
from: "DataExtracter:Extract",
|
||||||
itemsSelector: itemsSelector,
|
itemsSelector: itemsSelector,
|
||||||
|
|||||||
Reference in New Issue
Block a user