RSSHub/lib/v2/uber/blog.js

59 lines
1.9 KiB
JavaScript

const got = require('@/utils/got');
const { parseDate } = require('@/utils/parse-date');
const rootURL = 'https://www.uber.com';
const apiURL = 'https://blogapi.uber.com';
module.exports = async (ctx) => {
let maxPage = Number(ctx.params.maxPage);
if (Number.isNaN(maxPage)) {
maxPage = 1;
}
let pages = await Promise.all(
[...Array(maxPage).keys()].map((pageIdx) =>
got(`${apiURL}/wp-json/blog/v1/data`, {
searchParams: {
page: pageIdx + 1,
parent: 'pittsburgh',
slug: 'engineering',
},
})
)
);
pages = pages.map((page) => page.data);
const result = await Promise.all(
pages.map((page) =>
Promise.all(
page.posts.map((post) =>
ctx.cache.tryGet(`${rootURL}${post.link}`, async () => {
let { data: article } = await got(`${apiURL}/wp-json/blog/v1/data`, {
searchParams: {
slug: post.link.replace(/\//g, '').replace('blog', ''),
},
});
article = article.article;
return {
link: article.link,
title: article.title,
description: article.content,
pubDate: parseDate(article.created),
author: article.author,
category: article.categories.map((category) => category.category_name),
};
})
)
)
)
);
ctx.state.data = {
title: `Uber Engineering Blog`,
link: rootURL + '/blog/engineering',
description: 'The technology behind Uber Engineering',
item: result.flat(),
};
};