Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d7bf64

Browse files
committed
Save bad pages, with cUrl ''verification''; start to treat dealerships differently
1 parent c39db53 commit 3d7bf64

5 files changed

Lines changed: 34 additions & 15 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ unmatched-jeep.json
1111
subaru.json
1212
page.html
1313
cache
14-
install.sh
14+
install.sh
15+
crap

dealer-common.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
const fetcher = require('./fetch-with-cache.js');
22
const cheerio = require('cheerio');
33
const fs = require('fs');
4+
const childProcess = require('child_process');
45

56
const windowStickerUrl = 'https://window-sticker-services.pse.dealer.com/windowsticker/MAKE?vin=VIN'
67

8+
function getQueryByDealer(dealerUrl, make) {
9+
if (make === 'subaru') {
10+
return 'new-inventory/index.htm?search=&model=Outback&trim=Onyx+Edition+XT';
11+
}
12+
13+
if (dealerUrl.includes('fremontcdjr')) {
14+
return 'new-vehicles/#action=im_ajax_call&perform=get_results&model=Wrangler&page=1';
15+
}
16+
17+
return 'new-inventory/index.htm?search=&model=Wrangler';
18+
}
19+
720
async function fetchFromDealer(dealerUrl, make, query) {
21+
if (!query)
22+
query = getQueryByDealer(dealerUrl, make);
823
const url = `${dealerUrl}${query}`;
924
const body = await fetcher.getHtml(url);
1025
let result = await parseResults(body, dealerUrl, make, url);
@@ -47,9 +62,13 @@ async function parseResults(body, dealer, make, pageUrl) {
4762

4863
if (carList.length === 0) {
4964
console.error(`No cars found at ${pageUrl}`);
50-
// const dealerForFile = dealer.match(/https?\:\/\/(www\.)?(?<dealer>\w*)\./).groups.dealer;
51-
// fs.writeFileSync(`crap/page_${dealerForFile}.html`, body);
52-
// console.error('Page saved for inspection');
65+
const dealerForFile = dealer.match(/https?\:\/\/(www\.)?(?<dealer>\w*)\./).groups.dealer;
66+
fs.writeFileSync(`crap/page_${dealerForFile}.html`, body);
67+
childProcess.exec(`curl -L "${pageUrl}" -o crap/curl_${dealerForFile}.html`);
68+
console.error('Page saved for inspection');
69+
if (content('*').text().toUpperCase().includes('CAPTCHA')) {
70+
console.error(`Captcha request at ${pageUrl}`);
71+
}
5372
}
5473
let dealerName = content('.org').text().trim();
5574
if (!dealerName) {
@@ -127,4 +146,4 @@ async function parseResults(body, dealer, make, pageUrl) {
127146
return { cars, reportedCars };
128147
}
129148

130-
module.exports = { fetchFromDealer }
149+
module.exports = { fetchFromDealer, getQueryByDealer }

fetch-with-cache.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const fetch = require('node-fetch');
22
const moment = require('moment');
33
const md5 = require('md5');
44
const fs = require('fs');
5+
const childProcess = require('child_process');
56

67
function makeCacheFilename(url) {
78
const key = `${url}${moment().format('YYYY-MM-DD_HH')}`
@@ -12,9 +13,12 @@ async function getHtml(url) {
1213
const filename = `${makeCacheFilename(url)}.html`;
1314
if (fs.existsSync(filename)) {
1415
// console.debug(`Cache hit ${filename} => ${url}`);
15-
return fs.readFileSync(filename);
16+
return String(fs.readFileSync(filename));
1617
}
1718

19+
// childProcess.execSync(`curl -L "${url}" -o ${filename}`);
20+
// return String(fs.readFileSync(filename));
21+
1822
const response = await fetch(url);
1923
const data = await response.text();
2024
fs.writeFile(filename, data, err => {

jeep-mfg.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const fetcher = require('./fetch-with-cache.js');
22
const moment = require('moment');
33
const fs = require('fs');
4-
const { fetchFromDealer } = require('./dealer-common.js');
4+
const { fetchFromDealer, getQueryByDealer } = require('./dealer-common.js');
55

66
function formatCurrency(numberString) {
77
let result = ''
@@ -212,9 +212,7 @@ async function getCarsFromDealers() {
212212
const dealerUrls = [... new Set(factoryCars.map(a => a.dealer.website))];
213213
console.log(`Factory query resulted in ${factoryCars.length} cars from ${dealerUrls.length} dealers.`);
214214

215-
const query = 'new-inventory/index.htm?search=&model=Wrangler';
216-
217-
const carsByDealer = await Promise.all(dealerUrls.map(url => fetchFromDealer(url, 'jeep', query)));
215+
const carsByDealer = await Promise.all(dealerUrls.map(url => fetchFromDealer(url, 'jeep')));
218216
const allCars = [];
219217
carsByDealer.map(cars => allCars.push(...cars)); // these are all the cars in dealerships that have at least one car we want.
220218

@@ -223,6 +221,7 @@ async function getCarsFromDealers() {
223221
for (const factoryCar of factoryCars) {
224222
const matches = allCars.filter(a => a.vin.trim() === factoryCar.vin.trim());
225223
if (!matches || matches.length === 0) {
224+
const query = getQueryByDealer(factoryCar.dealer.website, 'jeep');
226225
console.error(`Could not find car ${factoryCar.vin} at ${factoryCar.dealer.website}${query}`)
227226
unmatchedCars.push({vin: factoryCar.vin, url:`${factoryCar.dealer.website}${query}`});
228227
continue;

subaru.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ const fs = require('fs');
22
const moment = require('moment');
33
const { fetchFromDealer } = require('./dealer-common.js');
44

5-
async function fetchCars(dealer) {
6-
const query = 'new-inventory/index.htm?search=&model=Outback&trim=Onyx+Edition+XT';
7-
return await fetchFromDealer(dealer, 'subaru', query);
8-
}
95

106
async function getCarsFromDealers() {
117
const dealers = [
@@ -27,7 +23,7 @@ async function getCarsFromDealers() {
2723
'https://www.superiorsubaruofhouston.com/'
2824
]
2925

30-
const carsByDealer = await Promise.all(dealers.map(dealer => fetchCars(dealer)));
26+
const carsByDealer = await Promise.all(dealers.map(dealer => fetchFromDealer(dealer, 'subaru')));
3127
const allCars = [];
3228
carsByDealer.map(cars => allCars.push(...cars));
3329

0 commit comments

Comments
 (0)