diff --git a/assets/radar-rules.js b/assets/radar-rules.js index 3ddd2dd656..9fd8c7fb74 100644 --- a/assets/radar-rules.js +++ b/assets/radar-rules.js @@ -858,4 +858,72 @@ }, ], }, + + 'ithome.com': { + _name: 'IT 之家', + it: [ + { + title: 'IT 资讯', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/it', + }, + ], + soft: [ + { + title: '软件之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/soft', + }, + ], + win10: [ + { + title: 'win10 之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/win10', + }, + ], + iphone: [ + { + title: 'iphone 之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/iphone', + }, + ], + ipad: [ + { + title: 'ipad 之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/ipad', + }, + ], + android: [ + { + title: 'android 之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/android', + }, + ], + digi: [ + { + title: '数码之家', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/digi', + }, + ], + next: [ + { + title: '智能时代', + docs: 'https://docs.rsshub.app/new-media.html#it-zhi-jia', + source: '/', + target: '/ithome/next', + }, + ], + }, }); diff --git a/docs/new-media.md b/docs/new-media.md index dca52585cd..0aa980891f 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -99,6 +99,18 @@ pageClass: routes +## IT 之家 + +### 分类资讯 + + + +| it | soft | win10 | iphone | ipad | android | digi | next | +| ------- | -------- | ---------- | ----------- | --------- | ------------ | -------- | -------- | +| IT 资讯 | 软件之家 | win10 之家 | iphone 之家 | ipad 之家 | android 之家 | 数码之家 | 智能时代 | + + + ## IT 桔子 ### 投融资事件 diff --git a/lib/router.js b/lib/router.js index f22d600747..df5f79e3a0 100644 --- a/lib/router.js +++ b/lib/router.js @@ -2013,6 +2013,9 @@ router.get('/nyaa/search/:query?', require('./routes/nyaa/search')); // 片源网 router.get('/pianyuan/:media?', require('./routes/pianyuan/app')); +// IT home +router.get('/ithome/:caty', require('./routes/ithome/index')); + // 巴哈姆特 router.get('/bahamut/creation/:author/:category?', require('./routes/bahamut/creation')); router.get('/bahamut/creation_index/:category?/:subcategory?/:type?', require('./routes/bahamut/creation_index')); diff --git a/lib/routes/ithome/index.js b/lib/routes/ithome/index.js new file mode 100644 index 0000000000..66a41d2263 --- /dev/null +++ b/lib/routes/ithome/index.js @@ -0,0 +1,83 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +const get_url = (caty) => `https://${caty}.ithome.com/`; + +const config = { + it: { + title: 'IT 资讯', + }, + soft: { + title: '软件之家', + }, + win10: { + title: 'win10 之家', + }, + iphone: { + title: 'iphone 之家', + }, + ipad: { + title: 'ipad 之家', + }, + android: { + title: 'android 之家', + }, + digi: { + title: '数码之家', + }, + next: { + title: '智能时代', + }, +}; + +module.exports = async (ctx) => { + const cfg = config[ctx.params.caty]; + if (!cfg) { + throw Error('Bad category. See https://docs.rsshub.app/new-media.html#it-zhi-jia'); + } + + const current_url = get_url(ctx.params.caty); + const response = await got({ + method: 'get', + url: current_url, + }); + + const $ = cheerio.load(response.data); + const list = $('div.wrap_left_top div.mf div.new-list-1 li[class!="top"] span.title a') + .slice(0, 10) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: item.attr('href'), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const res = await got({ method: 'get', url: item.link }); + const content = cheerio.load(res.data); + const post = content('div#con div.content'); + const paragraph = post.find('div#paragraph'); + paragraph.find('img[data-original]').each((_, ele) => { + ele = $(ele); + ele.attr('src', ele.attr('data-original')); + ele.removeAttr('class'); + ele.removeAttr('data-original'); + }); + item.description = paragraph.html(); + item.pubDate = new Date(post.find('span#pubtime_baidu').text() + ' GMT+8').toUTCString(); + return item; + }) + ) + ); + + ctx.state.data = { + title: 'IT 之家 - ' + cfg.title, + link: current_url, + item: items, + }; +};