File size: 1,904 Bytes
846b1eb
1cd8de5
0d8e5cc
1cd8de5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f5d1d18
1cd8de5
 
 
 
 
 
 
f5d1d18
 
1cd8de5
 
 
 
 
0d8e5cc
1cd8de5
0d8e5cc
743e2ec
 
1cd8de5
 
0d8e5cc
1cd8de5
0d8e5cc
1cd8de5
 
 
 
0d8e5cc
1cd8de5
 
 
 
 
8cc08af
1cd8de5
 
0d8e5cc
1cd8de5
 
 
 
 
 
 
14709ab
089145b
1cd8de5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# URL To YoutubeID
from urllib.parse import urlparse

def get_yt_video_id(url):

    from urllib.parse import urlparse, parse_qs

    if url.startswith(('youtu', 'www')):
        url = 'http://' + url
        
    query = urlparse(url)
    
    if 'youtube' in query.hostname:
        if query.path == '/watch':
            return parse_qs(query.query)['v'][0]
        elif query.path.startswith(('/embed/', '/v/')):
            return query.path.split('/')[2]
    elif 'youtu.be' in query.hostname:
        return query.path[1:]
    else:
        raise ValueError
        
# Transcription and text formatting
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter

def transcribe(youtubeId):
    transcription = YouTubeTranscriptApi.get_transcript(youtubeId)
    return transcription

formatter = TextFormatter()

def transcriptToText(transcript):
  text = formatter.format_transcript(transcript)
  text = text.replace("\n", " ")
  return text

# Summary using OpenAI API
import openai

def textToSummary(text,OpenAIkey):
  openai.api_key = OpenAIkey
  response = openai.Completion.create(
      model="text-davinci-003",
      prompt= "Summarize this in 200 words or less:\n\n" + text,
      temperature=0.7,
      max_tokens=400,
      top_p=1.0,
      frequency_penalty=0.0,
      presence_penalty=1
      )
  return response["choices"][0]["text"].replace("\n", " ").strip()

def summarize(url,OpenAIkey):
  videoId = get_yt_video_id(url)
  transcript = transcribe(videoId)
  text = transcriptToText(transcript)
  summary = textToSummary(text,OpenAIkey)
  return summary

# Gradio Setup
import gradio as gr

description = "Enter a link for a YouTube video you want summarized"

gr.Interface(fn=summarize,
             inputs=["text", "text"],
             outputs=["textbox"], 
             description=description
            ).launch()