import os import openai import gradio as gr from youtube_transcript_api import YouTubeTranscriptApi from urllib.parse import urlparse, parse_qs from requests.structures import CaseInsensitiveDict openai.api_key = os.getenv("OPENAI_KEY") def Prompt_T(context, lang): prompt = """I want you to act as a content writer who is working with youtube video transcript. Summarise the following text in 40 words: ========= """+ context +""" ========= Answer:""" if (lang=="ru"):prompt = """Я хочу, чтобы вы выступили в роли автора контента, который взят с транскрипт youtube видео, его нужно преобразовать в читаемый вид. Резюмируйте следующий текст в 40 слов: ========= """+ context +""" ========= Ответ:""" if (lang=="uk"):prompt = """Я хочу, щоб ви виступили в ролі автора контенту, який узятий з транскрипту youtube відео, його треба перетворити у читабельний вигляд. Резюмуйте наступний текст у 50 слів: ========= """+ context +""" ========= Ответ:""" return prompt def split_string(string, chunk_size): return [string[i:i+chunk_size] for i in range(0, len(string), chunk_size)] def gpt_api (input_text): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": input_text} ] ) response = completion.choices[0].message.content return response def generate_video_html(video_url, request: gr.Request): my_v = "" if (video_url =="") and (my_v == ""): video_url ="https://youtube.com/watch?v=PQBYZDyDBrY" #похоже ли video_url на номальну ссылку if "youtube.com/watch?v=" in video_url: x=111 else: return "Неверный URL" #Пробуем извлеч video_id пока на английском video_id = video_url[-11:] html_embed='' return html_embed def generate(video_url, request: gr.Request): my_v = "" #Если две переменные пустые, то показываем базовую страницу с рекламой if (video_url =="") and (my_v == ""): html_embed='

An easy way to get video descriptions If you are on YouTube itself, simply add "zxc" in front of YouTube to the videos address.
' summarize="" return summarize #похоже ли video_url на номальну ссылку if "youtube.com/watch?v=" in video_url: x=111 else: return "Неверный URL" #Пробуем извлеч video_id пока на английском video_id = video_url[-11:] print("video_id=", video_id) try: transcript_list = YouTubeTranscriptApi.list_transcripts(video_id) except Exception as e: return "No access for transcript " lang_video="en" for transcript in transcript_list: if (transcript.is_generated == True): lang_video = transcript.language_code print ("transcript.language_code=", transcript.language_code) try: t = YouTubeTranscriptApi.get_transcript(video_id,languages=[lang_video]) # do something with the transcript except Exception as e: return "No access for transcript" finalString = "" for item in t: text = item['text'] finalString += text + " " print("Transcript:",finalString) print("Transcript lenght:",len(finalString)) print ("===============================================") input_string = finalString chunk_size = 4000 if (lang_video=="ru"): chunk_size = 2000 if (lang_video=="uk"): chunk_size = 2000 result_list = split_string(input_string, chunk_size) final_answer_gpt="" count= 0 print("++++++++++++++++++++++++++++++++++++++") for item in result_list: print(item) for item in result_list: count = count +1 context = item input_gpt = Prompt_T(context,lang_video) final_answer_gpt = final_answer_gpt +"

" + gpt_api (input_gpt)+"

" html_content="
"+"
"+final_answer_gpt+"
" yield html_content html_content="
"+"
"+final_answer_gpt+"
" return html_content title = "YouTube Summorize (en,ua,ru)" css=""" footer {visibility: hidden} .gradio-container {padding-top: 100px} """ with gr.Blocks(css=css, title=title) as demo: gr.HTML("

A simple way to summarize YouTube video

") with gr.Row(): with gr.Column(): input_d = gr.Textbox(label="YouTube video URL", placeholder="https://www.youtube.com/watch?v=XXXXXXXX", value="") greet_btn = gr.Button("Summarise") dt_2 = gr.outputs.HTML() dt_1 = gr.outputs.HTML() dt =[dt_1, dt_2] greet_btn.click(generate_video_html, inputs=input_d, outputs=dt_2) greet_btn.click(generate, inputs=input_d, outputs=dt_1) demo.load(generate_video_html, inputs=input_d, outputs=dt_2) demo.load(generate, inputs=input_d, outputs=dt_1) demo.queue() demo.launch(debug=True, share=False)