diff --git a/src/parser/classes/PlayerMicroformat.ts b/src/parser/classes/PlayerMicroformat.ts index 5dbab4d2..ff3e147e 100644 --- a/src/parser/classes/PlayerMicroformat.ts +++ b/src/parser/classes/PlayerMicroformat.ts @@ -34,6 +34,7 @@ class PlayerMicroformat extends YTNode { publish_date: string; upload_date: string; available_countries: string[]; + start_timestamp: Date | null; constructor(data: any) { super(); @@ -65,6 +66,7 @@ class PlayerMicroformat extends YTNode { this.publish_date = data.publishDate; this.upload_date = data.uploadDate; this.available_countries = data.availableCountries; + this.start_timestamp = data.liveBroadcastDetails?.startTimestamp ? new Date(data.liveBroadcastDetails.startTimestamp) : null; } } diff --git a/src/parser/youtube/VideoInfo.ts b/src/parser/youtube/VideoInfo.ts index afc604d6..0baefb58 100644 --- a/src/parser/youtube/VideoInfo.ts +++ b/src/parser/youtube/VideoInfo.ts @@ -133,7 +133,8 @@ class VideoInfo { channel: info.microformat?.is(PlayerMicroformat) ? info.microformat?.channel : null, is_unlisted: info.microformat?.is_unlisted, is_family_safe: info.microformat?.is_family_safe, - has_ypc_metadata: info.microformat?.is(PlayerMicroformat) ? info.microformat?.has_ypc_metadata : null + has_ypc_metadata: info.microformat?.is(PlayerMicroformat) ? info.microformat?.has_ypc_metadata : null, + start_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.start_timestamp : null }, like_count: undefined as number | undefined, is_liked: undefined as boolean | undefined, diff --git a/test/main.test.ts b/test/main.test.ts index cb4f1fcf..4ebffb8c 100644 --- a/test/main.test.ts +++ b/test/main.test.ts @@ -54,6 +54,12 @@ describe('YouTube.js Tests', () => { const b_info = await yt.getBasicInfo(VIDEOS[5].ID); expect(b_info.basic_info.is_live).toBe(true); }); + + it('should extract live stream start timestamp', async () => { + const b_info = await yt.getBasicInfo(VIDEOS[4].ID); + expect(b_info.basic_info.start_timestamp).not.toBeNull() + expect(b_info.basic_info.start_timestamp!.toISOString()).toBe('2024-03-30T23:00:00.000Z'); + }) }); describe('Search', () => {