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];
 | |
| }
 |