ð¯ ã¯ããã«
ãæ°ã«ãªãæè¡åç»ãèŠãæéããªããªâŠããã»ãããŒã®å
容ããããšããã¹ãã§èªã¿ãããªïŒã
ãããªé¢šã«æãããšããããŸãããïŒ
ç¹ã«Cursorã䜿ãããªãçããã«ãšã£ãŠãåç»ã§ã®æ
å ±åéã¯ãšã£ãŠã倧äºã
ä»åã¯ãç§ãã¡ã䜿ã£ãŠãã ãYouTubeåç»èŠçŽæ©èœã ã®è£åŽããã£ããã玹ä»ããŸããïŒâš
âš ãã®æ©èœã£ãŠäœãã§ããã®ïŒ
ç°¡åã«èšããšãYouTubeåç»ã®è©±ããŠããå 容ãæåã«ããŠãããã«AIãããã倧äºïŒãã£ãŠãã€ã³ããæããŠãããæ©èœã§ãïŒ
- ð£ïž æåã§ãµããšèªãã: åç»ãåçããªããŠããããã¹ãã§å 容ããã§ãã¯ïŒ
- ð èŠç¹ããããšææ¡: é·ãåç»ãã倧äºãªãšããã ãæãåºããŠæçã«è²¢ç®â±ïž
- ð¡ ã€ã³ããããã¹ããŒãã¢ãã: å¹çããæ°ããç¥èãã²ããã§ããŸãïŒ
ð° ã³ã¹ããæ°ã«ãã䜿ãã: CursorãªãAPI䜿çšæãæ°ã«ãããå®é¡ã§äœåºŠã§ãèŠçŽãæŸé¡ïŒ (âãã倧äºïŒð)
âïž cursorã®ãã£ããã§ãã€ã§ãåç»ç¿»èš³ãã§ãã
ð ããªãã®ãç¥ãããïŒããããã£ãšã¹ã ãŒãºã«å¶ããŸãð
âïž äœ¿ãæ¹ãšä»çµã¿ïŒPythonã¹ã¯ãªãããšAIé£æºã®è£åŽ
ãã®äŸ¿å©ãªæ©èœã¯ãå®ã¯ Pythonã¹ã¯ãªãã ãš ç§ïŒCursorã®AIïŒ ã®é£æºãã¬ãŒð€ã§æãç«ã£ãŠããŸããããã§ã¯ããã®äœ¿ãæ¹ãšè£åŽã®ä»çµã¿ãäžç·ã«èŠãŠãããŸãããïŒ
1. ãŸãã¯æºåïŒCursorã«ãéæ³ã®åªæããæãããïŒ âïž
æåã«ãyoutubeyouyaku
ãšããã³ãã³ãïŒéæ³ã®åªæð§ââïžïŒãCursorãç解ã§ããããã«èšå®ããŸãã
- Cursorã®å·ŠåŽã¡ãã¥ãŒãã âïž Settings (èšå®) ãã¯ãªãã¯ã
- Rules (ã«ãŒã«) ã»ã¯ã·ã§ã³ãéžã³ãŸãã
- User Rules ã«ããããªã«ãŒã«ãæžã蟌ã¿ãŸãâïž (ãã¹ã¯ããªãã®PCç°å¢ã«åãããŠãã ãããïŒ)ïŒ
"youtubeyouyaku"ã®ããšã«URLã貌ããããcd C:\you-projrct; Python youtube_summarizer.py
ã®ããšã«URLãã€ããŠå®è¡ããŠãã®çµæãèŠçŽããŠãã£ããæ¬ã«åºåããŠãã
ããã§æºåOKïŒCursor㯠youtubeyouyaku [URL]
ãèŠãããããããyoutube_summarizer.py
ã¹ã¯ãªãããåãããŠãçµæãèŠçŽãããïŒããšç解ããŠãããŸãð
2. 䜿ã£ãŠã¿ããïŒã³ãã³ãäžçºã§èŠçŽã¹ã¿ãŒãïŒ ð
æºåãã§ããããããšã¯ç°¡åïŒCursorã®ãã£ããã«ãèŠçŽãããYouTubeåç»ã®URLãšäžç·ã«ã³ãã³ããå ¥åããã ãã§ãã
youtubeyouyaku https://youtu.be/xxxxxxxxxxx
(äŸãšããŠNet Ninjaããã®åç»ã䜿ã£ãŠã¿ãŸãã)
youtubeyouyaku https://youtu.be/OHT0wGUz5GI?list=PL4cUxeGkcC9goeb7U1FXFdNszWetCmhfB
ãããå®è¡ãããšãè£åŽã§ã¯æ¬¡ã®ãããªããšãèµ·ãã£ãŠããŸãð
3. è£åŽã®åãïŒã¹ã¯ãªãããæåèµ·ãã â AIãèŠçŽïŒ ðâ¡ïžð§
ããªããã³ãã³ããå®è¡ãããšããŸãStep1ã§èšå®ãã youtube_summarizer.py
ãšããPythonã¹ã¯ãªãããåãåºããŸãã
ãã®ã¹ã¯ãªããã®åœ¹å²ã¯ãæå®ãããYouTubeåç»ãããæåèµ·ããããŒã¿ããåã£ãŠããããšïŒ
ããããã®ã¹ã¯ãªãã (youtube_summarizer.py
) ã®äžèº«ã§ãïŒ
# youtube_summarizer.py
from youtube_transcript_api import YouTubeTranscriptApi
import argparse
import os
# import google.generativeai as genai # äžèŠã«ãªã£ãããã³ã¡ã³ãã¢ãŠããŸãã¯åé€
# --- APIããŒèšå®ã¯äžèŠ ---
# API_KEY = os.getenv("GOOGLE_API_KEY")
# if not API_KEY:
# print("èŠå: ç°å¢å€æ° GOOGLE_API_KEY ãèšå®ãããŠããŸãããèŠçŽæ©èœã¯å©çšã§ããŸããã")
# else:
# genai.configure(api_key=API_KEY)
def get_transcript(youtube_url):
"""YouTubeåç»ã®URLããæåèµ·ãããååŸãã"""
try:
# URLããVideo IDãæœåº (ããå
ç¢ãªæ¹æ³ãæ€èšå¯èœ)
if "v=" in youtube_url:
video_id = youtube_url.split("v=")[1].split("&")[0]
elif "youtu.be/" in youtube_url:
video_id = youtube_url.split("youtu.be/")[1].split("?")[0]
else:
print("ãšã©ãŒ: æå¹ãªYouTube URL圢åŒã§ã¯ãããŸããã")
return None
print(f"Video ID: {video_id}")
# å©çšå¯èœãªæåèµ·ããèšèªãååŸ
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
# æ¥æ¬èªãè±èªããã以å€ã®é ã§è©Šã
target_languages = ['ja', 'en']
transcript = None
for lang in target_languages:
try:
transcript = transcript_list.find_transcript([lang])
print(f"{lang} ã®æåèµ·ãããèŠã€ãããŸããã")
break
except:
continue
# æ¥æ¬èªã»è±èªãèŠã€ãããªãå Žåãå©çšå¯èœãªæåã®èšèªãååŸ
if not transcript:
try:
available_langs = [t.language for t in transcript_list]
if not available_langs:
print("ãšã©ãŒ: å©çšå¯èœãªæåèµ·ãããèŠã€ãããŸããã§ããã")
return None
print(f"æ¥æ¬èªã»è±èªã®æåèµ·ãããèŠã€ãããŸãããå©çšå¯èœãªèšèª: {available_langs}")
transcript = transcript_list.find_transcript([available_langs[0]])
print(f"{available_langs[0]} ã®æåèµ·ããã䜿çšããŸãã")
except Exception as e:
print(f"å©çšå¯èœãªæåèµ·ããã®ååŸäžã«ãšã©ãŒ: {e}")
return None
# transcript.fetch() ãè¿ããªããžã§ã¯ãã®æ§é å€æŽã«å¯Ÿå¿
# 以å: item['text']
# çŸåš: item.text
transcript_text = " ".join([item.text for item in transcript.fetch()])
return transcript_text
except Exception as e:
print(f"æåèµ·ããã®ååŸãŸãã¯åŠçäžã«äºæãã¬ãšã©ãŒãçºçããŸãã: {e}")
import traceback
traceback.print_exc() # 詳现ãªãšã©ãŒæ
å ±ã衚瀺
return None
# summarize_text é¢æ°ã¯äžèŠã«ãªã£ãããåé€ãŸãã¯ã³ã¡ã³ãã¢ãŠã
# def summarize_text(text):
# """ããã¹ããGemini APIã䜿ã£ãŠèŠçŽãã"""
# ...
def main():
parser = argparse.ArgumentParser(
description="YouTubeåç»ã®URLãæå®ããŠããã®æåèµ·ãããååŸããŸãã", # 説æãä¿®æ£
formatter_class=argparse.RawTextHelpFormatter # ãã«ãã¡ãã»ãŒãžã®æ¹è¡ãä¿æ
)
parser.add_argument("youtube_url", help="æåèµ·ãããååŸãããYouTubeåç»ã®URL\näŸ: \"https://www.youtube.com/watch?v=XXXXXXXXXXX\"") # ãã«ããä¿®æ£
args = parser.parse_args()
print(f"åç»URL: {args.youtube_url}")
print("æåèµ·ãããååŸäž...")
transcript = get_transcript(args.youtube_url)
if transcript:
print("\næåèµ·ããååŸå®äºã")
print("\n--- æåèµ·ããçµæ --- ")
print(transcript) # ååŸããæåèµ·ããå
šæã衚瀺
print("---------------------")
print("\näžèšã®ããã¹ããã³ããŒããŠãCursorãªã©ã®ãšãã£ã¿ã§èŠçŽããŠãã ããã")
else:
print("\næåèµ·ãããååŸã§ããªãã£ããããåŠçãçµäºããŸãã")
if __name__ == "__main__":
main()
ð¡ ã¹ã¯ãªããã®åããç°¡åã«è§£èª¬ïŒ
-
argparse
ã£ãŠããã©ã€ãã©ãªã§ãããªããå ¥åããYouTubeã®URLãåãåããŸãã -
get_transcript
é¢æ°ã®äžã§ãyoutube_transcript_api
ã©ã€ãã©ãªã䜿ã£ãŠãåç»ã®æåèµ·ããããŒã¿ãã²ããïŒ- æ¥æ¬èª (
ja
) ãè±èª (en
) ã®æåèµ·ãããåªå çã«æ¢ããŸãã - ããèŠã€ãããªããã°ããã®åç»ã§å©çšã§ããä»ã®èšèªã®æåèµ·ãããæ¢ããŠãããŸãã
- æ¥æ¬èª (
- åã£ãŠããæåèµ·ããããŒã¿ãã
print
ã䜿ã£ãŠãã£ããç»é¢ã«è¡šç€ºããŸãã
â ïž ãããããœïŒãã®ã¹ã¯ãªããã¯æåèµ·ãããåã£ãŠããŠè¡šç€ºããã ãïŒ èŠçŽã¯ããŸããã
ããããã©ããã£ãŠèŠçŽãããã®ïŒ ð€
ã¹ã¯ãªãããæåèµ·ããã衚瀺ããåŸããã®ããã¹ããç§ïŒCursorã®AIïŒãèªã¿åã£ãŠãããµããµãâŠããšå 容ãç解ããã®ã¥ã®ã¥ããšèŠç¹ããŸãšããèŠçŽæãçæããŠããã£ããç»é¢ã«åºåãããã§ãïŒ
ãŸãã«ãã¹ã¯ãªãããéããŠããææïŒæåèµ·ããïŒããAIã調çïŒèŠçŽïŒããð³ããããªé£æºãã¬ãŒãªãã§ããïŒ
å®è¡çµæã®ã€ã¡ãŒãžã¯ãããªæãïŒ
ãŸããã¹ã¯ãªãããæåèµ·ãããåºåããŠâŠïŒãºã©ãŒããšããã¹ãã衚瀺ãããŸãïŒ
åç»èŠçŽ ð¬:
ãã®åç»ã¯ã[åç»ã®ã¿ã€ãã«ãå
容ã«å¿ããç°¡åãªèª¬æ] ãããŒãã®ããã§ããã
äž»ãªãã€ã³ãã¯ãããªæãã§ãã
ããã§ãã³ãã³ãäžçºã§åç»ã®èŠç¹ããµã¯ããšåãã£ã¡ããããã§ãð
ð» 䜿ã£ãŠãäž»ãªæè¡ãã¡
ãã®æ©èœã¯ããããã®æè¡ã®çµã¿åããã§ã§ããŠããŸãïŒ
- Cursor: ãã€ãã®éçºç°å¢ å Œ AIãšãããã¹ãããå Žæ
- Python: ãã®æ©èœãäœã£ãŠãããã°ã©ãã³ã°èšèª ð
- youtube_transcript_api: YouTubeåç»ããæåèµ·ãããåã£ãŠãã䟿å©ãªå€éšããŒã« ð
- AI (ç§ã ãïŒ): ããã¹ãã®æå³ãç解ããŠãããæãã«èŠçŽããé è³ ð§
ð± ãããããã£ãšé²åããããïŒ (å¯èœæ§)
ä»ã¯ã¹ã¯ãªãããšAIã圹å²åæ ããŠãŸãããå°æ¥çã«ã¯ãããªé¢šã«ãã¯ãŒã¢ãããããé¢çœããïŒãªããŠèããŠãŸãã
- å šèªåèŠçŽãã·ã³å: OpenAI APIãšããã¹ã¯ãªããã«å ¥ããŠãæåèµ·ããâèŠçŽãŸã§äžæ°ã«èªååïŒ
- ã°ããŒãã«å¯Ÿå¿: è±èªãšããä»ã®èšèªã®åç»ãèŠçŽã§ãããå¬ããã§ãããïŒ ð
- èŠçŽã¬ãã«éžæ: ããã£ããã§OKããããã¡ãã詳ããããã¬ãããªç¥ããããã¿ããã«ãèŠçŽã®é·ããéžã¹ãã䟿å©ããïŒ
ð ãŸã ãŸã 䟿å©ã«ãªãå¯èœæ§ãç§ããŠãŸããïŒ
ð ãããã«
ãã®ãYouTubeåç»èŠçŽæ©èœãã¯ãCursor ç°å¢ã§ Python ãš AI ãè³¢ã䜿ã£ãŠãåç»ããã®æ å ±ã²ããããã£ãšæ¥œã¡ãã«ããããã®è©Šã¿ãªãã§ãðª
ãã®ä»çµã¿ããçããã®ãAIã£ãŠãããªé¢šã«ã䜿ãããã ïŒãã£ãŠããçºèŠããã³ãã«ãªãã°ããããå¬ããã§ã âš
ãŸã ã·ã³ãã«ãªäœãã§ããããããããã£ãšè¯ãããŠãããããªã£ãŠæã£ãŠããŸãã
ãã®èšäºãèªãã§ããžãïœé¢çœãïŒãã圹ã«ç«ã£ãïŒãã£ãŠæã£ãŠããããããã² ð ãã¿ã³ãã³ã¡ã³ãã§æããŠãã ãããïŒå±ã¿ã«ãªããŸãð
ããããªæ©èœããã£ããæé«ïŒãã¿ãããªã¢ã€ãã¢ã倧æè¿ã§ãïŒåŸ
ã£ãŠãŸãïŒ
ð« ãé£çµ¡
ãããã°ãçºèŠãããå Žåãããããããã°ãã£ãšè¯ããªãã®ã§ã¯ããšãã£ããæèŠã»ãèŠæããããŸãããããæ°è»œã«ä»¥äžã®é£çµ¡å ãŸã§ãç¥ããããã ãããšå¬ããã§ãã
ðŠ X (æ§Twitter): https://x.com/wyUMAjanaiyo
ð§ Gmail: adwddwdaw@gmail.com