feat(route): arcteryx regear new arrivals (#12063)

* feat(route): arcteryx regear new arrivals

* feat(route): arcteryx regear new arrivals

* Update lib/v2/arcteryx/radar.js

* fix: arcteryx regear radar

* fix: arcteryx regear price

* fix: filter first

---------
This commit is contained in:
Evan 2023-03-08 14:02:42 -08:00 committed by GitHub
parent c3950998a7
commit 965e652487
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 87 additions and 0 deletions

View File

@ -62,6 +62,10 @@ Parameter `country` can be found within the url of `Arcteryx` website.
</RouteEn>
### Regear New Arrivals
<RouteEn author="NavePnow" example="/arcteryx/regear/new-arrivals" path="/arcteryx/regear/new-arrivals" />
## Bellroy
### New Releases

View File

@ -74,6 +74,10 @@ pageClass: routes
</Route>
### Regear 新发布
<Route author="NavePnow" example="/arcteryx/regear/new-arrivals" path="/arcteryx/regear/new-arrivals" />
## Bellroy
### 新发布

View File

@ -1,3 +1,4 @@
module.exports = {
'/new-arrivals/:country/:gender': ['NavePnow'],
'/regear/new-arrivals': ['NavePnow'],
};

View File

@ -9,5 +9,13 @@ module.exports = {
target: '/arcteryx/new-arrivals/:country/:gender',
},
],
regear: [
{
title: 'Regear 新发布',
docs: 'https://docs.rsshub.app/shopping.html#arcteryx',
source: ['/shop/new-arrivals', '/'],
target: '/arcteryx/regear/new-arrivals',
},
],
},
};

View File

@ -0,0 +1,53 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const { art } = require('@/utils/render');
const path = require('path');
const host = 'https://www.regear.arcteryx.com';
function getUSDPrice(number) {
return (number / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' });
}
module.exports = async (ctx) => {
const url = `${host}/shop/new-arrivals`;
const response = await got({
method: 'get',
url,
});
const data = response.data;
const $ = cheerio.load(data);
const contents = $('script:contains("window.__PRELOADED_STATE__")').text();
const regex = /{.*}/;
let items = JSON.parse(contents.match(regex)[0]).shop.items;
items = items.filter((item) => item.availableSizes.length !== 0);
const list = items.map((item) => {
const data = {};
data.title = item.displayTitle;
data.link = item.pdpLink.url;
data.imgUrl = JSON.parse(item.imageUrls).front;
data.availableSizes = item.availableSizes;
data.color = item.color;
data.originalPrice = getUSDPrice(item.originalPrice);
if (item.priceRange[0] === item.priceRange[1]) {
data.regearPrice = getUSDPrice(item.priceRange[0]);
} else {
data.regearPrice = `${getUSDPrice(item.priceRange[0])} - ${getUSDPrice(item.priceRange[1])}`;
}
data.description = art(path.join(__dirname, 'templates/regear-product-description.art'), {
data,
});
return data;
});
ctx.state.data = {
title: 'Arcteryx - Regear - New Arrivals',
link: url,
description: 'Arcteryx - Regear - New Arrivals',
item: list.map((item) => ({
title: item.title,
link: item.link,
description: item.description,
})),
};
};

View File

@ -1,3 +1,4 @@
module.exports = function (router) {
router.get('/new-arrivals/:country/:gender', require('./new-arrivals'));
router.get('/regear/new-arrivals', require('./regear-new-arrivals'));
};

View File

@ -0,0 +1,16 @@
<div>
Available Sizes:&nbsp;
{{each data.availableSizes}}
{{$value}}&nbsp;
{{/each}}
<br>
Color: {{data.color}}
<br>
Original Price: {{data.originalPrice}}
<br>
Regear Price: {{data.regearPrice}}
<br>
<img src={{data.imgUrl}}>
<br><br>
</div>