45 lines
1.3 KiB
JavaScript
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,
|
|
};
|
|
};
|