1const Apify = require('apify');
2const util = require('util')
3const parseString = require('xml2js').parseString;
4const _ = require('underscore');
5
6const parseStringPromised = util.promisify(parseString);
7
8Apify.main(async () => {
9 const {
10 sources,
11 proxy,
12 } = await Apify.getValue('INPUT');
13
14 const proxyConfiguration = await Apify.createProxyConfiguration(proxy);
15 const requestList = await Apify.openRequestList('urls', sources);
16
17 const crawler = new Apify.BasicCrawler({
18 requestList,
19
20 handleRequestFunction: async ({ request }) => {
21 const { body, statusCode } = await Apify.utils.requestAsBrowser({
22 url: request.url,
23 proxyUrl: proxyConfiguration.newUrl(),
24 });
25
26 if (statusCode >= 300) throw new Error(`Request failed with statusCode=${statusCode}`);
27
28 await Apify.pushData({
29 data: await parseStringPromised(body),
30 request,
31 });
32 },
33
34 handleFailedRequestFunction: async ({ request }) => {
35 await Apify.pushData({
36 failed: true,
37 request,
38 });
39 },
40 });
41
42 await crawler.run();
43});