87 lines
1.6 KiB
TypeScript
87 lines
1.6 KiB
TypeScript
|
import { YOUTUBE_API_KEY } from "@lib/env.ts";
|
||
|
|
||
|
const BASE_URL = "https://youtube.googleapis.com/youtube/v3/";
|
||
|
|
||
|
export interface APIResponse {
|
||
|
kind: string;
|
||
|
etag: string;
|
||
|
items: Item[];
|
||
|
pageInfo: PageInfo;
|
||
|
}
|
||
|
|
||
|
export interface Item {
|
||
|
kind: string;
|
||
|
etag: string;
|
||
|
id: string;
|
||
|
snippet: Snippet;
|
||
|
contentDetails: ContentDetails;
|
||
|
statistics: Statistics;
|
||
|
}
|
||
|
|
||
|
export interface Snippet {
|
||
|
publishedAt: string;
|
||
|
channelId: string;
|
||
|
title: string;
|
||
|
description: string;
|
||
|
thumbnails: Thumbnails;
|
||
|
channelTitle: string;
|
||
|
tags: string[];
|
||
|
categoryId: string;
|
||
|
liveBroadcastContent: string;
|
||
|
localized: Localized;
|
||
|
}
|
||
|
|
||
|
export interface Thumbnails {
|
||
|
default: Resolution;
|
||
|
medium: Resolution;
|
||
|
high: Resolution;
|
||
|
standard: Resolution;
|
||
|
maxres: Resolution;
|
||
|
}
|
||
|
|
||
|
export interface Resolution {
|
||
|
url: string;
|
||
|
width: number;
|
||
|
height: number;
|
||
|
}
|
||
|
|
||
|
export interface Localized {
|
||
|
title: string;
|
||
|
description: string;
|
||
|
}
|
||
|
|
||
|
export interface ContentDetails {
|
||
|
duration: string;
|
||
|
dimension: string;
|
||
|
definition: string;
|
||
|
caption: string;
|
||
|
licensedContent: boolean;
|
||
|
contentRating: ContentRating;
|
||
|
projection: string;
|
||
|
}
|
||
|
|
||
|
export interface ContentRating {}
|
||
|
|
||
|
export interface Statistics {
|
||
|
viewCount: string;
|
||
|
likeCount: string;
|
||
|
favoriteCount: string;
|
||
|
commentCount: string;
|
||
|
}
|
||
|
|
||
|
export interface PageInfo {
|
||
|
totalResults: number;
|
||
|
resultsPerPage: number;
|
||
|
}
|
||
|
|
||
|
export async function getYoutubeVideoDetails(
|
||
|
id: string,
|
||
|
): Promise<Item> {
|
||
|
const response = await fetch(
|
||
|
`${BASE_URL}videos?part=snippet%2CcontentDetails%2Cstatistics&id=${id}&key=${YOUTUBE_API_KEY}`,
|
||
|
);
|
||
|
const json = await response.json();
|
||
|
|
||
|
return json?.items[0];
|
||
|
}
|