From e28744050704be8bfc0f0fbad3edf347e896a8a0 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 7 Mar 2023 11:17:00 -0800 Subject: [PATCH] feat(route): snow-peak new arrivals (#12045) * feat(route): snow-peak new arrivals * feat: change path to snowpeak/us/new-arrivals * feat: add pubData and category * feat: add variants and multiple images * fix: pubDate --- docs/en/shopping.md | 6 +++ docs/shopping.md | 6 +++ lib/v2/snowpeak/maintainer.js | 3 ++ lib/v2/snowpeak/radar.js | 13 +++++++ lib/v2/snowpeak/router.js | 3 ++ lib/v2/snowpeak/templates/new-arrivals.art | 11 ++++++ lib/v2/snowpeak/us-new-arrivals.js | 45 ++++++++++++++++++++++ 7 files changed, 87 insertions(+) create mode 100644 lib/v2/snowpeak/maintainer.js create mode 100644 lib/v2/snowpeak/radar.js create mode 100644 lib/v2/snowpeak/router.js create mode 100644 lib/v2/snowpeak/templates/new-arrivals.art create mode 100644 lib/v2/snowpeak/us-new-arrivals.js diff --git a/docs/en/shopping.md b/docs/en/shopping.md index 560f015f1..354f922c4 100644 --- a/docs/en/shopping.md +++ b/docs/en/shopping.md @@ -206,6 +206,12 @@ Language +## Snow Peak + +### New Arrivals(USA) + + + ## The Independent ### PS5 stock UK diff --git a/docs/shopping.md b/docs/shopping.md index 2f6ed7c47..626f58bea 100644 --- a/docs/shopping.md +++ b/docs/shopping.md @@ -250,6 +250,12 @@ For instance, in +## Snow Peak + +### New Arrivals(USA) + + + ## The Independent ### PS5 stock UK diff --git a/lib/v2/snowpeak/maintainer.js b/lib/v2/snowpeak/maintainer.js new file mode 100644 index 000000000..0cf798e84 --- /dev/null +++ b/lib/v2/snowpeak/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/us/new-arrivals': ['NavePnow'], +}; diff --git a/lib/v2/snowpeak/radar.js b/lib/v2/snowpeak/radar.js new file mode 100644 index 000000000..c1d6ea6d3 --- /dev/null +++ b/lib/v2/snowpeak/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'snowpeak.com': { + _name: 'Snow Peak', + '.': [ + { + title: 'New Arrivals(USA)', + docs: 'https://docs.rsshub.app/shopping.html#snow-peak', + source: ['/collections/new-arrivals', '/'], + target: '/snowpeak/us/new-arrivals', + }, + ], + }, +}; diff --git a/lib/v2/snowpeak/router.js b/lib/v2/snowpeak/router.js new file mode 100644 index 000000000..850e9e128 --- /dev/null +++ b/lib/v2/snowpeak/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/us/new-arrivals', require('./us-new-arrivals')); +}; diff --git a/lib/v2/snowpeak/templates/new-arrivals.art b/lib/v2/snowpeak/templates/new-arrivals.art new file mode 100644 index 000000000..d1b610e5b --- /dev/null +++ b/lib/v2/snowpeak/templates/new-arrivals.art @@ -0,0 +1,11 @@ +
+ Variant: +
+ {{each product.variants}} + {{$value.name}} +
+ {{/each}} + {{each product.images}} + + {{/each}} +
diff --git a/lib/v2/snowpeak/us-new-arrivals.js b/lib/v2/snowpeak/us-new-arrivals.js new file mode 100644 index 000000000..f461396a1 --- /dev/null +++ b/lib/v2/snowpeak/us-new-arrivals.js @@ -0,0 +1,45 @@ +const got = require('@/utils/got'); +const { art } = require('@/utils/render'); +const path = require('path'); +const cheerio = require('cheerio'); +const host = 'https://www.snowpeak.com'; +module.exports = async (ctx) => { + const url = `${host}/collections/new-arrivals`; + const response = await got({ + method: 'get', + url, + }); + const data = response.data; + + const $ = cheerio.load(data); + const list = $('.element.product-tile') + .map(function () { + const data = {}; + const product = $(this).find('.product-data').data('product'); + data.title = product.title; + data.link = `${host}/products/${product.handle}`; + data.pubDate = new Date(product.published_at).toUTCString(); + data.category = product.tags; + data.variants = product.variants.map((item) => item.name); + data.description = + product.description + + art(path.join(__dirname, 'templates/new-arrivals.art'), { + product, + }); + + return data; + }) + .get(); + ctx.state.data = { + title: 'Snow Peak - New Arrivals', + link: `${host}/new-arrivals`, + description: 'Snow Peak - New Arrivals', + item: list.map((item) => ({ + title: item.title, + category: item.category, + description: item.description, + pubDate: item.pubDate, + link: item.link, + })), + }; +};