feat(route): add 豆瓣招聘 and refactor to V2 standard (#8937)
* Add(route): add 豆瓣招聘 and change to V2 * Fix(route): fix typo of filename * Fix(route): sort routes * Fix(route): Update lib/v2/douban/router.js Co-authored-by: Tony <TonyRL@users.noreply.github.com> Co-authored-by: Tony <TonyRL@users.noreply.github.com>
This commit is contained in:
parent
96270cd1cc
commit
8891ad1020
|
|
@ -944,6 +944,16 @@ YouTube 官方亦有提供频道 RSS,形如 <https://www.youtube.com/feeds/vid
|
|||
|
||||
</Route>
|
||||
|
||||
### 豆瓣招聘
|
||||
|
||||
<Route author="Fatpandac" example="/douban/jobs/campus" path="/douban/jobs/:type" :paramsDesc="['招聘类型,见下表']">
|
||||
|
||||
| 社会招聘 | 校园招聘 | 实习生招聘 |
|
||||
| :------: | :------: | :--------: |
|
||||
| social | campus | intern |
|
||||
|
||||
</Route>
|
||||
|
||||
## 饭否
|
||||
|
||||
::: warning 注意
|
||||
|
|
|
|||
|
|
@ -2416,38 +2416,6 @@ module.exports = {
|
|||
},
|
||||
],
|
||||
},
|
||||
'douban.com': {
|
||||
_name: '豆瓣',
|
||||
www: [
|
||||
{
|
||||
title: '用户的广播',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/people/:user/',
|
||||
target: (params, url, document) => {
|
||||
const uid = document && document.querySelector('html').innerHTML.match(/"id":"([0-9]+)"/)[1];
|
||||
return uid ? `/douban/people/${uid}/status` : '';
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '小组-最新',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid',
|
||||
},
|
||||
{
|
||||
title: '小组-最热',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid/essence',
|
||||
},
|
||||
{
|
||||
title: '小组-精华',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid/elite',
|
||||
},
|
||||
],
|
||||
},
|
||||
'okjike.com': {
|
||||
_name: '即刻',
|
||||
m: [
|
||||
|
|
|
|||
|
|
@ -163,33 +163,6 @@ router.get('/pixiv/search/:keyword/:order?/:mode?', lazyloadRouteHandler('./rout
|
|||
// pixiv-fanbox
|
||||
router.get('/fanbox/:user?', lazyloadRouteHandler('./routes/fanbox/main'));
|
||||
|
||||
// 豆瓣
|
||||
router.get('/douban/movie/playing', lazyloadRouteHandler('./routes/douban/playing'));
|
||||
router.get('/douban/movie/playing/:score', lazyloadRouteHandler('./routes/douban/playing'));
|
||||
router.get('/douban/movie/playing/:score/:city', lazyloadRouteHandler('./routes/douban/playing'));
|
||||
router.get('/douban/movie/later', lazyloadRouteHandler('./routes/douban/later'));
|
||||
router.get('/douban/movie/ustop', lazyloadRouteHandler('./routes/douban/ustop'));
|
||||
router.get('/douban/movie/weekly/:type?', lazyloadRouteHandler('./routes/douban/weekly_best'));
|
||||
router.get('/douban/movie/classification/:sort?/:score?/:tags?', lazyloadRouteHandler('./routes/douban/classification.js'));
|
||||
router.get('/douban/group/:groupid/:type?', lazyloadRouteHandler('./routes/douban/group'));
|
||||
router.get('/douban/explore', lazyloadRouteHandler('./routes/douban/explore'));
|
||||
router.get('/douban/music/latest/:area?', lazyloadRouteHandler('./routes/douban/latest_music'));
|
||||
router.get('/douban/book/latest', lazyloadRouteHandler('./routes/douban/latest_book'));
|
||||
router.get('/douban/event/hot/:locationId', lazyloadRouteHandler('./routes/douban/event/hot'));
|
||||
router.get('/douban/commercialpress/latest', lazyloadRouteHandler('./routes/douban/commercialpress/latest'));
|
||||
router.get('/douban/bookstore', lazyloadRouteHandler('./routes/douban/bookstore'));
|
||||
router.get('/douban/book/rank/:type?', lazyloadRouteHandler('./routes/douban/book/rank'));
|
||||
router.get('/douban/doulist/:id', lazyloadRouteHandler('./routes/douban/doulist'));
|
||||
router.get('/douban/explore/column/:id', lazyloadRouteHandler('./routes/douban/explore_column'));
|
||||
router.get('/douban/people/:userid/status/:routeParams?', lazyloadRouteHandler('./routes/douban/people/status.js'));
|
||||
router.get('/douban/people/:userid/wish/:routeParams?', lazyloadRouteHandler('./routes/douban/people/wish.js'));
|
||||
router.get('/douban/replies/:uid', lazyloadRouteHandler('./routes/douban/replies'));
|
||||
router.get('/douban/replied/:uid', lazyloadRouteHandler('./routes/douban/replied'));
|
||||
router.get('/douban/topic/:id/:sort?', lazyloadRouteHandler('./routes/douban/topic.js'));
|
||||
router.get('/douban/channel/:id/:nav?', lazyloadRouteHandler('./routes/douban/channel/topic.js'));
|
||||
router.get('/douban/channel/:id/subject/:nav', lazyloadRouteHandler('./routes/douban/channel/subject.js'));
|
||||
router.get('/douban/celebrity/:id/:sort?', lazyloadRouteHandler('./routes/douban/celebrity.js'));
|
||||
|
||||
// 法律白話文運動
|
||||
router.get('/plainlaw/archives', lazyloadRouteHandler('./routes/plainlaw/archives.js'));
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
module.exports = {
|
||||
'/book/latest': ['fengkx'],
|
||||
'/book/rank/:type?': ['xyqfer', 'queensferryme'],
|
||||
'/bookstore': ['xyqfer'],
|
||||
'/celebrity/:id/:sort?': ['minimalistrojan'],
|
||||
'/channel/:id/:nav?': ['umm233'],
|
||||
'/channel/:id/subject/:nav': ['umm233'],
|
||||
'/commercialpress/latest': ['xyqfer'],
|
||||
'/doulist/:id': ['LogicJake'],
|
||||
'/event/hot/:locationId': ['xyqfer'],
|
||||
'/explore': ['clarkzsd'],
|
||||
'/explore_column/:id': ['LogicJake'],
|
||||
'/group/:groupid/:type?': ['DIYgod'],
|
||||
'/jobs/:type': ['Fatpandac'],
|
||||
'/movie/classification/:sort?/:score?/:tags?': ['zzwab'],
|
||||
'/movie/later': ['DIYgod'],
|
||||
'/movie/playing': ['DIYgod'],
|
||||
'/movie/playing/:score': ['DIYgod'],
|
||||
'/movie/ustop': ['DIYgod'],
|
||||
'/movie/weekly/:type?': ['numm233', 'nczitzk'],
|
||||
'/music/latest/:area?': ['fengkx', 'xyqfer'],
|
||||
'/people/:userid/status/:routeParams': ['alfredcai'],
|
||||
'/people/:userid/wish/:routeParams?': ['exherb'],
|
||||
'/replied/:uid': ['nczitzk'],
|
||||
'/replies/:uid': ['nczitzk'],
|
||||
'/topic/:id/:sort?': ['LogicJake'],
|
||||
};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const got = require('../../utils/got');
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
const rootUrl = 'https://jobs.douban.com';
|
||||
|
||||
const titleMap = {
|
||||
social: '社会招聘',
|
||||
campus: '校园招聘',
|
||||
intern: '实习生招聘',
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const type = ctx.params.type;
|
||||
const url = `${rootUrl}/jobs/${type}`;
|
||||
|
||||
const response = await got.get(url);
|
||||
const $ = cheerio.load(response.data);
|
||||
const list = $('div.mod.position');
|
||||
|
||||
const items = list
|
||||
.map((_, item) => ({
|
||||
title: $(item).find('h3').text(),
|
||||
link: `${url}#${$(item).find('h3').attr('id')}`,
|
||||
description: $(item).find('div.bd').html(),
|
||||
}))
|
||||
.get();
|
||||
|
||||
ctx.state.data = {
|
||||
title: `豆瓣${titleMap[type]}`,
|
||||
link: url,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
module.exports = {
|
||||
'douban.com': {
|
||||
_name: '豆瓣',
|
||||
www: [
|
||||
{
|
||||
title: '用户的广播',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/people/:user/',
|
||||
target: (params, url, document) => {
|
||||
const uid = document && document.querySelector('html').innerHTML.match(/"id":"([0-9]+)"/)[1];
|
||||
return uid ? `/douban/people/${uid}/status` : '';
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '小组-最新',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid',
|
||||
},
|
||||
{
|
||||
title: '小组-最热',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid/essence',
|
||||
},
|
||||
{
|
||||
title: '小组-精华',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/group/:groupid',
|
||||
target: '/douban/group/:groupid/elite',
|
||||
},
|
||||
],
|
||||
jobs: [
|
||||
{
|
||||
title: '社会招聘',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/jobs/social',
|
||||
target: '/jobs/social',
|
||||
},
|
||||
{
|
||||
title: '校园招聘',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/jobs/campus',
|
||||
target: '/jobs/campus',
|
||||
},
|
||||
{
|
||||
title: '实习生招聘',
|
||||
docs: 'https://docs.rsshub.app/social-media.html#dou-ban',
|
||||
source: '/jobs/intern',
|
||||
target: '/jobs/intern',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/book/latest', require('./other/latest_book'));
|
||||
router.get('/book/rank/:type?', require('./book/rank'));
|
||||
router.get('/bookstore', require('./other/bookstore'));
|
||||
router.get('/celebrity/:id/:sort?', require('./other/celebrity.js'));
|
||||
router.get('/channel/:id/subject/:nav', require('./channel/subject.js'));
|
||||
router.get('/channel/:id/:nav?', require('./channel/topic.js'));
|
||||
router.get('/commercialpress/latest', require('./commercialpress/latest'));
|
||||
router.get('/doulist/:id', require('./other/doulist'));
|
||||
router.get('/event/hot/:locationId', require('./event/hot'));
|
||||
router.get('/explore', require('./other/explore'));
|
||||
router.get('/explore/column/:id', require('./other/explore_column'));
|
||||
router.get('/group/:groupid/:type?', require('./other/group'));
|
||||
router.get('/jobs/:type', require('./other/jobs.js'));
|
||||
router.get('/movie/classification/:sort?/:score?/:tags?', require('./other/classification.js'));
|
||||
router.get('/movie/later', require('./other/later'));
|
||||
router.get('/movie/playing', require('./other/playing'));
|
||||
router.get('/movie/playing/:score', require('./other/playing'));
|
||||
router.get('/movie/ustop', require('./other/ustop'));
|
||||
router.get('/movie/weekly/:type?', require('./other/weekly_best'));
|
||||
router.get('/music/latest/:area?', require('./other/latest_music'));
|
||||
router.get('/people/:userid/status/:routeParams?', require('./people/status.js'));
|
||||
router.get('/people/:userid/wish/:routeParams?', require('./people/wish.js'));
|
||||
router.get('/replied/:uid', require('./other/replied'));
|
||||
router.get('/replies/:uid', require('./other/replies'));
|
||||
router.get('/topic/:id/:sort?', require('./other/topic.js'));
|
||||
};
|
||||
Loading…
Reference in New Issue