Skip to content

Commit f212709

Browse files
authored
Merge pull request #16 from jkawamoto/lru_cache
Optimize transcript fetching with LRU caching
2 parents 71e3b6c + e8eb614 commit f212709

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/mcp_youtube_transcript/server.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# This software is released under the MIT License.
66
#
77
# http://opensource.org/licenses/mit-license.php
8-
8+
from functools import lru_cache
99
from urllib.parse import urlparse, parse_qs
1010

1111
import requests
@@ -32,6 +32,24 @@ def new_server(
3232

3333
ytt_api = YouTubeTranscriptApi(proxy_config=proxy_config)
3434

35+
@lru_cache
36+
def _get_transcript(video_id: str, lang: str) -> str:
37+
if lang == "en":
38+
languages = ["en"]
39+
else:
40+
languages = [lang, "en"]
41+
42+
page = requests.get(
43+
f"https://www.youtube.com/watch?v={video_id}", headers={"Accept-Language": ",".join(languages)}
44+
)
45+
page.raise_for_status()
46+
soup = BeautifulSoup(page.text, "html.parser")
47+
title = soup.title.string if soup.title else "Transcript"
48+
49+
transcripts = ytt_api.fetch(video_id, languages=languages)
50+
51+
return f"# {title}\n" + "\n".join((item.text for item in transcripts))
52+
3553
mcp = FastMCP("Youtube Transcript")
3654

3755
@mcp.tool()
@@ -50,20 +68,6 @@ def get_transcript(
5068
raise ValueError(f"couldn't find a video ID from the provided URL: {url}.")
5169
video_id = q[0]
5270

53-
if lang == "en":
54-
languages = ["en"]
55-
else:
56-
languages = [lang, "en"]
57-
58-
page = requests.get(
59-
f"https://www.youtube.com/watch?v={video_id}", headers={"Accept-Language": ",".join(languages)}
60-
)
61-
page.raise_for_status()
62-
soup = BeautifulSoup(page.text, "html.parser")
63-
title = soup.title.string if soup.title else ""
64-
65-
transcripts = ytt_api.fetch(video_id, languages=languages)
66-
67-
return f"# {title}\n" + "\n".join((item.text for item in transcripts))
71+
return _get_transcript(video_id, lang)
6872

6973
return mcp

0 commit comments

Comments
 (0)