70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import GhostContentAPI, { type PostsOrPages } from '@tryghost/content-api'
|
|
|
|
export interface NewsPostAuthor {
|
|
id: string | undefined,
|
|
name: string | undefined,
|
|
slug: string | undefined,
|
|
profileImage: string | undefined,
|
|
url: string | undefined
|
|
}
|
|
|
|
export interface NewsPost {
|
|
id: string,
|
|
uuid: string | undefined,
|
|
title: string | undefined,
|
|
featureImage: string | undefined,
|
|
featureImageAlt: string | undefined,
|
|
createdAt: string | undefined,
|
|
updatedAt: string | undefined,
|
|
publishedAt: string | undefined,
|
|
slug: string,
|
|
url: string | undefined,
|
|
excerpt: string | undefined,
|
|
customExcerpt: string | undefined,
|
|
readingTime: number | undefined,
|
|
primaryAuthor: NewsPostAuthor | undefined
|
|
}
|
|
|
|
export async function getPosts() {
|
|
const newsApi = new GhostContentAPI({
|
|
url: 'https://sbanews.manticorum.com',
|
|
key: '37abf30917ce55d6d9155b537d',
|
|
version: 'v5.0'
|
|
})
|
|
|
|
const posts: PostsOrPages = await newsApi.posts.browse({
|
|
limit: 4,
|
|
include: ['authors', 'tags'],
|
|
})
|
|
|
|
return makeNewPostsFromPostsOrPages(posts)
|
|
}
|
|
|
|
function makeNewPostsFromPostsOrPages(posts: PostsOrPages): NewsPost[] {
|
|
return posts.map(p => {
|
|
return {
|
|
id: p.id,
|
|
uuid: p.uuid,
|
|
title: p.title,
|
|
featureImage: p.feature_image ?? undefined,
|
|
featureImageAlt: p.feature_image_alt ?? undefined,
|
|
createdAt: p.created_at ?? undefined,
|
|
updatedAt: p.updated_at ?? undefined,
|
|
publishedAt: p.published_at ?? undefined,
|
|
slug: p.slug,
|
|
url: p.url,
|
|
excerpt: p.excerpt,
|
|
customExcerpt: p.custom_excerpt,
|
|
readingTime: p.reading_time,
|
|
primaryAuthor: {
|
|
id: p.primary_author?.id,
|
|
name: p.primary_author?.name,
|
|
slug: p.primary_author?.slug,
|
|
profileImage: p.primary_author?.profile_image ?? undefined,
|
|
url: p.primary_author?.url ?? undefined
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|