From f4997c45add54c8b64c8b52f7f06637de7720c71 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 12 Mar 2023 12:38:31 -0700 Subject: [PATCH] feat(route): Magazinelib latest magazine (#12072) * feat(route): magazinelib latest magazine * feat: add subTitle * fix: wrong docs position * fix: wrong router * fix: wrong radar rules * chore: use arrow function * chore: remove extra blank lines * chore: remove extra blank lines * fix: magazineLib name * feat: use wordpress api * feat: use _embed to get image url --- docs/en/reading.md | 10 ++++ docs/reading.md | 10 ++++ lib/v2/magazinelib/latest-magazine.js | 55 +++++++++++++++++++ lib/v2/magazinelib/maintainer.js | 3 + lib/v2/magazinelib/radar.js | 19 +++++++ lib/v2/magazinelib/router.js | 3 + .../templates/magazine-description.art | 3 + 7 files changed, 103 insertions(+) create mode 100644 lib/v2/magazinelib/latest-magazine.js create mode 100644 lib/v2/magazinelib/maintainer.js create mode 100644 lib/v2/magazinelib/radar.js create mode 100644 lib/v2/magazinelib/router.js create mode 100644 lib/v2/magazinelib/templates/magazine-description.art diff --git a/docs/en/reading.md b/docs/en/reading.md index 09d5207cb..c79de7b7b 100644 --- a/docs/en/reading.md +++ b/docs/en/reading.md @@ -56,6 +56,16 @@ Eg: +## MagazineLib + +### Latest Magazine + + + +For instance, when doing search at and you get url , the query is `new+yorker` + + + ## Mobilism ### eBook Releases diff --git a/docs/reading.md b/docs/reading.md index 22facade0..4964ef5a0 100644 --- a/docs/reading.md +++ b/docs/reading.md @@ -67,6 +67,16 @@ pageClass: routes +## MagazineLib + +### Latest Magazine + + + +For instance, when doing search at and you get url , the query is `new+yorker` + + + ## Mobilism ### 电子书 diff --git a/lib/v2/magazinelib/latest-magazine.js b/lib/v2/magazinelib/latest-magazine.js new file mode 100644 index 000000000..df6b9a17c --- /dev/null +++ b/lib/v2/magazinelib/latest-magazine.js @@ -0,0 +1,55 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { art } = require('@/utils/render'); +const path = require('path'); + +const host = 'https://magazinelib.com'; +module.exports = async (ctx) => { + const query = ctx.params.query; + const url = `${host}/wp-json/wp/v2/posts/`; + const response = await got({ + method: 'get', + url, + searchParams: { + search: query, + per_page: 30, + _embed: 1, + }, + }); + let subTitle = query; + if (subTitle !== undefined) { + subTitle = subTitle.replace(/[^a-zA-Z0-9]+/g, ' ').toUpperCase(); + subTitle = ` - ${subTitle}`; + } else { + subTitle = ''; + } + + const items = response.data.map((obj) => { + const data = {}; + data.date = obj.date_gmt; + data.link = obj.link; + data.featuredMediaLink = obj._links['wp:featuredmedia'][0].href; + data.title = obj.title.rendered; + const $ = cheerio.load(obj.content.rendered); + const content = $('.vk-att'); + content.find('img[src="https://magazinelib.com/wp-includes/images/media/default.png"]').remove(); + data.content = content.html(); + const imgUrl = obj._embedded['wp:featuredmedia'][0].source_url; + data.description = data.content + art(path.join(__dirname, 'templates/magazine-description.art'), { imgUrl }); + data.categories = obj._embedded['wp:term'][0].map((item) => item.name); + return data; + }); + + ctx.state.data = { + title: `MagazineLib - Latest Magazines${subTitle}`, + link: `{host}/?s=${query}`, + description: `MagazineLib - Latest Magazines${subTitle}`, + item: items.map((item) => ({ + title: item.title, + link: item.link, + category: item.categories, + pubDate: new Date(item.pubDate).toUTCString(), + description: item.description, + })), + }; +}; diff --git a/lib/v2/magazinelib/maintainer.js b/lib/v2/magazinelib/maintainer.js new file mode 100644 index 000000000..b8e0456ba --- /dev/null +++ b/lib/v2/magazinelib/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/latest-magazine/:query?': ['NavePnow'], +}; diff --git a/lib/v2/magazinelib/radar.js b/lib/v2/magazinelib/radar.js new file mode 100644 index 000000000..517d8f6c0 --- /dev/null +++ b/lib/v2/magazinelib/radar.js @@ -0,0 +1,19 @@ +module.exports = { + 'magazinelib.com': { + _name: 'magazineLib', + '.': [ + { + title: 'Latest Magazine', + docs: 'https://docs.rsshub.app/reading.html#magazinelib', + source: ['/'], + target: (_, url) => { + const query = new URL(url).searchParams.get('s'); + if (query === null) { + return '/magazinelib/latest-magazine'; + } + return `/magazinelib/latest-magazine/${query}`; + }, + }, + ], + }, +}; diff --git a/lib/v2/magazinelib/router.js b/lib/v2/magazinelib/router.js new file mode 100644 index 000000000..9dadb1db9 --- /dev/null +++ b/lib/v2/magazinelib/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/latest-magazine/:query?', require('./latest-magazine')); +}; diff --git a/lib/v2/magazinelib/templates/magazine-description.art b/lib/v2/magazinelib/templates/magazine-description.art new file mode 100644 index 000000000..43f9138e6 --- /dev/null +++ b/lib/v2/magazinelib/templates/magazine-description.art @@ -0,0 +1,3 @@ +
+ +