Files
RSSHub/lib/routes/gitlab/explore.js

44 lines
1.5 KiB
JavaScript

const got = require('@/utils/got');
const cheerio = require('cheerio');
const config = require('@/config').value;
const { allowHost } = require('./common');
module.exports = async (ctx) => {
let { type, host } = ctx.params;
type = type === 'all' ? '' : type;
host = host ? host : 'gitlab.com';
const typename = {
trending: 'Trending',
starred: 'Most stars',
all: 'All',
};
if (!config.feature.allow_user_supply_unsafe_domain && !allowHost.includes(new URL(host).hostname)) {
ctx.throw(403, `This RSS is disabled unless 'ALLOW_USER_SUPPLY_UNSAFE_DOMAIN' is set to 'true'.`);
}
const res = await got({
method: 'get',
url: `https://${host}/explore/projects/${type}`,
});
const $ = cheerio.load(res.data);
const list = $('ul.projects-list').find('li');
ctx.state.data = {
title: `${typename[ctx.params.type]} - Explore - Gitlab`,
link: `https://${host}/explore/projects/${type}`,
item:
list &&
list
.map((index, item) => {
item = $(item);
return {
title: item.find('.project-full-name').text(),
author: item.find('.namespace-name').text().slice(0, -1).split('\n').join('').trim(),
description: item.find('.description').text(),
link: `https://${host}${item.find('a.text-plain').attr('href')}`,
};
})
.get(),
};
};