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_API_KEY") google_analtycs=""" """ 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 70 words: ========= """+ context +""" ========= Answer:""" if (lang=="ru"):prompt = """Я хочу, чтобы вы выступили в роли автора контента, который взят с транскрипт youtube видео, его нужно преобразовать в читаемый вид. Резюмируйте следующий текст в 50 слов: ========= """+ 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_url, request: gr.Request): #Если есть get переменная v, создаем video_url try: headers =request.headers url = headers.get('referer') parsed_url = urlparse(url) query_params = parse_qs(parsed_url.query) my_dict = query_params except KeyError as e: print("Что то случилось в header", e) try: my_v = my_dict['v'][0] video_url ="https://youtube.com/watch?v="+my_v except KeyError: 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, html_embed #похоже ли video_url на номальну ссылку if "youtube.com/watch?v=" in video_url: x=111 else: return "Неверный URL", "Ошибка" #Пробуем извлеч video_id пока на английском video_id = video_url[-11:] try: transcript_list = YouTubeTranscriptApi.list_transcripts(video_id) except Exception as e: return "No access for transcript ", "Error transcript_list" # iterate over all available transcripts 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", "Error 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 = 12000 if (lang_video=="ru"): chunk_size = 5000 if (lang_video=="uk"): chunk_size = 5000 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_embed='' html_content="
"+"
"+final_answer_gpt+"
" return html_content, html_embed 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 summarise and translate the YouTube video in 22 languages

"+google_analtycs) 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, inputs=input_d, outputs=dt) demo.load(generate, inputs=input_d, outputs=dt) demo.launch(share=False, debug=True )