RSSHub/lib/v2/openai/blog.js

45 lines
1.3 KiB
JavaScript

const got = require('@/utils/got');
const { toTitleCase } = require('@/utils/common-utils');
const { getApiUrl, parseArticle } = require('./common');
module.exports = async (ctx) => {
const tag = ctx.params.tag || '';
const rootUrl = 'https://openai.com';
const blogRootUrl = 'https://openai.com/blog';
const blogOriginUrl = `${rootUrl}/blog${tag === '' ? '' : `?topics=${tag}`}`;
const apiUrl = new URL('/api/v1/blog-details', await getApiUrl());
// Construct API query
apiUrl.searchParams.append('sort', '-publicationDate,-createdAt');
apiUrl.searchParams.append('page[size]', '20');
apiUrl.searchParams.append('page[number]', '1');
apiUrl.searchParams.append('include', 'media,topics,authors');
if (tag) {
apiUrl.searchParams.append('filter[topics][slugs][0]', tag);
}
const response = await got({
method: 'get',
url: apiUrl,
});
const list = response.data.data.filter((entry) => entry.type === 'blog-details');
const items = await Promise.all(
list.map((item) => {
const attributes = item.attributes;
return parseArticle(ctx, blogRootUrl, attributes);
})
);
const title = `OpenAI Blog${tag ? ` - ${toTitleCase(tag)}` : ''}`;
ctx.state.data = {
title,
link: blogOriginUrl,
item: items,
};
};