Skip to content

Commit

Permalink
Update fetch-youtube-transcript extension (#15934)
Browse files Browse the repository at this point in the history
- Changelog updated and version updated
- Merge branch \'dev\'
- Error handling issue - Transcript not available resolved
  • Loading branch information
apoorv12 authored Dec 19, 2024
1 parent d9f0ae7 commit 24aea82
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 60 deletions.
6 changes: 6 additions & 0 deletions extensions/fetch-youtube-transcript/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Fetch Youtube Transcript Changelog

## [1.1.5] - 2024-12-18

### Fixed

- Now extension shows clear error if no transcript is found

## [1.1.4] - 2024-12-14

### Added
Expand Down
4 changes: 2 additions & 2 deletions extensions/fetch-youtube-transcript/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion extensions/fetch-youtube-transcript/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://www.raycast.com/schemas/extension.json",
"name": "fetch-youtube-transcript",
"version": "1.1.4",
"version": "1.1.5",
"title": "Fetch YouTube Transcript",
"description": "Fetches and saves the transcript of a YouTube video in your downaloads folder",
"icon": "extension_icon.png",
Expand Down
102 changes: 45 additions & 57 deletions extensions/fetch-youtube-transcript/src/fetch-youtube-transcript.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,69 +59,57 @@ function extractVideoId(url: string): string | null {

// Function to fetch video transcript
async function getVideoTranscript(videoId: string): Promise<TranscriptResult> {
const { defaultLanguage } = getPreferenceValues<ExtensionPreferences>();

// Try with preferred language
try {
const { defaultLanguage } = getPreferenceValues<ExtensionPreferences>();

try {
// Try with preferred language first
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: defaultLanguage || "en",
});

if (transcriptItems && transcriptItems.length > 0) {
const transcript = transcriptItems.map((item: TranscriptItem) => item.text).join("\n\n");
const title = await getVideoTitle(videoId);
return { transcript, title };
}
} catch (error) {
console.warn(`Failed to get captions in preferred language: ${defaultLanguage}`);

// Try with English as fallback
try {
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: "en",
});

if (transcriptItems && transcriptItems.length > 0) {
const transcript = transcriptItems.map((item: TranscriptItem) => item.text).join("\n\n");
const title = await getVideoTitle(videoId);
return { transcript, title };
}
} catch (error) {
console.warn("Failed to get English captions");
}

// Try auto-generated captions as last resort
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: "auto",
});

if (!transcriptItems || transcriptItems.length === 0) {
throw new Error("No captions available for this video");
}
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: defaultLanguage || "en",
});

if (transcriptItems && transcriptItems.length > 0) {
const transcript = transcriptItems.map((item: TranscriptItem) => item.text).join("\n\n");
const title = await getVideoTitle(videoId);

return {
transcript,
title,
};
return { transcript, title };
}
} catch (error: unknown) {
if (error instanceof Error) {
console.error("Detailed error:", error);
throw new Error(`Failed to fetch transcript: ${error.message}`);
} else {
console.error("Unknown error:", error);
throw new Error("Failed to fetch transcript: Unknown error occurred");
} catch (error) {
console.warn(`Failed to get captions in preferred language: ${defaultLanguage}`);
}

// Try with English
try {
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: "en",
});

if (transcriptItems && transcriptItems.length > 0) {
const transcript = transcriptItems.map((item: TranscriptItem) => item.text).join("\n\n");
const title = await getVideoTitle(videoId);
return { transcript, title };
}
} catch (error) {
console.warn("Failed to get English captions");
}

throw new Error("Failed to fetch transcript");
// Try auto-generated captions
try {
const transcriptItems = await getSubtitles({
videoID: videoId,
lang: "auto",
});

if (!transcriptItems || transcriptItems.length === 0) {
throw new Error("Transcript Not Available");
}

const transcript = transcriptItems.map((item: TranscriptItem) => item.text).join("\n\n");
const title = await getVideoTitle(videoId);
return { transcript, title };
} catch (error) {
throw new Error("Transcript Not Available");
}
}

// Helper function to get video title
Expand Down Expand Up @@ -200,8 +188,8 @@ export default async function Command(props: { arguments: { videoUrl: string } }
} catch (error) {
await showToast({
style: Toast.Style.Failure,
title: "Error fetching transcript",
message: error instanceof Error ? error.message : "Unknown error occurred",
title: "Error",
message: error instanceof Error ? error.message : "Transcript Not Available",
});
}
}

0 comments on commit 24aea82

Please sign in to comment.