diff --git a/docs/en/programming.md b/docs/en/programming.md index 62cb51655..bab2cc0f1 100644 --- a/docs/en/programming.md +++ b/docs/en/programming.md @@ -420,3 +420,17 @@ Subscribe to the updates (threads and submission) from a paritcular Hacker News ### weekly + +## ui.dev + +### BYTES - Your weekly dose of JS + +Staying informed on the JavaScript ecosystem has never been so entertaining. Delivered every Monday and Thursday, for free. https://bytes.dev/ + + + +### React Newsletter + +Stay up to date on the latest React news, tutorials, resources, and more. Delivered every Tuesday, for free. https://reactnewsletter.com/ + + diff --git a/lib/v2/bytes/bytes.js b/lib/v2/bytes/bytes.js new file mode 100644 index 000000000..ff008882e --- /dev/null +++ b/lib/v2/bytes/bytes.js @@ -0,0 +1,25 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const currentURL = 'https://bytes.dev/archives'; +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const resp = await got(currentURL); + const $ = cheerio.load(resp.data); + const text = $('script#__NEXT_DATA__').text(); + const json = JSON.parse(text); + const posts = [json.props.pageProps.featuredPost].concat(json.props.pageProps.posts); + const items = posts.map((item) => ({ + title: `Issue ${item.slug}`, + pubDate: parseDate(item.date), + description: item.title, + link: `/archives/${item.slug}`, + })); + + ctx.state.data = { + title: 'bytes.dev', + description: 'Your weekly dose of JS', + link: currentURL, + item: items, + }; +}; diff --git a/lib/v2/bytes/maintainer.js b/lib/v2/bytes/maintainer.js new file mode 100644 index 000000000..e9948c57f --- /dev/null +++ b/lib/v2/bytes/maintainer.js @@ -0,0 +1,4 @@ +module.exports = { + '': ['meixger'], + '/': ['meixger'], +}; diff --git a/lib/v2/bytes/radar.js b/lib/v2/bytes/radar.js new file mode 100644 index 000000000..b8de55f89 --- /dev/null +++ b/lib/v2/bytes/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'bytes.dev': { + _name: 'ui.dev', + '.': [ + { + title: 'BYTES - Your weekly dose of JS', + docs: 'https://docs.rsshub.app/en/programming.html#ui-dev-bytes', + source: ['/archives', '/'], + target: '/bytes', + }, + ], + }, +}; diff --git a/lib/v2/bytes/router.js b/lib/v2/bytes/router.js new file mode 100644 index 000000000..8029e8890 --- /dev/null +++ b/lib/v2/bytes/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/', require('./bytes')); +}; diff --git a/lib/v2/reactnewsletter/maintainer.js b/lib/v2/reactnewsletter/maintainer.js new file mode 100644 index 000000000..e9948c57f --- /dev/null +++ b/lib/v2/reactnewsletter/maintainer.js @@ -0,0 +1,4 @@ +module.exports = { + '': ['meixger'], + '/': ['meixger'], +}; diff --git a/lib/v2/reactnewsletter/radar.js b/lib/v2/reactnewsletter/radar.js new file mode 100644 index 000000000..ed8f75edb --- /dev/null +++ b/lib/v2/reactnewsletter/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'bytes.dev': { + _name: 'ui.dev', + '.': [ + { + title: 'React Newsletter', + docs: 'https://docs.rsshub.app/en/programming.html#ui-dev-bytes', + source: ['/issues', '/'], + target: '/reactnewsletter', + }, + ], + }, +}; diff --git a/lib/v2/reactnewsletter/reactnewsletter.js b/lib/v2/reactnewsletter/reactnewsletter.js new file mode 100644 index 000000000..3c20d2f48 --- /dev/null +++ b/lib/v2/reactnewsletter/reactnewsletter.js @@ -0,0 +1,25 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const currentURL = 'https://reactnewsletter.com/issues'; +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const resp = await got(currentURL); + const $ = cheerio.load(resp.data); + const text = $('script#__NEXT_DATA__').text(); + const json = JSON.parse(text); + + const items = json.props.pageProps.issues.map((item) => ({ + title: item.title, + pubDate: parseDate(item.date), + description: item.summary, + link: `/issues/${item.slug}`, + })); + + ctx.state.data = { + title: 'reactnewsletter.dev', + description: 'Stay up to date on the latest React news, tutorials, resources, and more. Delivered every Tuesday, for free.', + link: currentURL, + item: items, + }; +}; diff --git a/lib/v2/reactnewsletter/router.js b/lib/v2/reactnewsletter/router.js new file mode 100644 index 000000000..a548ef9fb --- /dev/null +++ b/lib/v2/reactnewsletter/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/', require('./reactnewsletter')); +};