From e66a16ed9a73e2ba3d4ac1c5a00627a28b70ad16 Mon Sep 17 00:00:00 2001 From: ForeverPyrite Date: Fri, 27 Sep 2024 21:55:22 -0400 Subject: [PATCH] we ball --- .vscode/launch.json | 25 ++++++ .vscode/settings.json | 5 ++ app.py | 31 +++++++ main.py | 52 ++++++------ requirements.txt | Bin 0 -> 1036 bytes website/app.py | 0 website/index.html | 30 +++++++ .../font-files/nimbus-sans-d-ot-light.woff | Bin 0 -> 26088 bytes .../font-files/nimbus-sans-d-ot-light.woff2 | Bin 0 -> 19912 bytes website/static/script.js | 31 +++++++ website/static/style.css | 77 ++++++++++++++++++ website/templates/index.html | 0 12 files changed, 225 insertions(+), 26 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 app.py create mode 100644 requirements.txt delete mode 100644 website/app.py create mode 100644 website/index.html create mode 100644 website/static/font-files/nimbus-sans-d-ot-light.woff create mode 100644 website/static/font-files/nimbus-sans-d-ot-light.woff2 create mode 100644 website/static/script.js delete mode 100644 website/templates/index.html diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..6654ef2 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Flask", + "type": "debugpy", + "request": "launch", + "module": "flask", + "env": { + "FLASK_APP": "app.py", + "FLASK_DEBUG": "1" + }, + "args": [ + "run", + "--debug", + "--no-reload" + ], + "jinja": true, + "autoStartBrowser": false + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8ec53f6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "html.autoClosingTags": true, + "html.format.enable": true, + "html.autoCreateQuotes": true +} \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..5cb8c16 --- /dev/null +++ b/app.py @@ -0,0 +1,31 @@ +from flask import Flask, render_template, request +from main import get_auto_transcript, get_video_id, create_and_stream + +app = Flask(__name__, static_folder="website/static", template_folder="website") + +@app.route('/') +def home(): + return render_template('index.html') + +@app.route('/process_url', methods=['POST']) +def process_url(): + url = request.form['url'] + + # Extract the video ID from the URL + video_id = get_video_id(url) # Modify this function to accept the URL + if not video_id: + return "Couldn't parse video ID from URL. (Are you sure you entered a valid YouTube.com or YouTu.be URL?)" + + # Get the transcript for that video ID + transcript = get_auto_transcript(video_id) + if (not transcript): + return "Successfully parsed video ID from URL, however the ID was either invalid, the transcript was disabled by the video owner, or some other error was raised because of YouTube." + + # Process the transcript and stream the result. + stream = create_and_stream(transcript) + + # Return a response + return stream # Add more detailed output if needed + +if __name__ == '__main__': # Change this line to properly check for main + app.run(debug=True) \ No newline at end of file diff --git a/main.py b/main.py index 1e8a460..3746838 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import re # Youtube Transcript stuff import +import youtube_transcript_api._errors from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import TextFormatter @@ -40,6 +41,7 @@ class EventHandler(AssistantEventHandler): for output in delta.code_interpreter.outputs: if output.type == "logs": print(f"\n{output.logs}", flush=True) + # Setting up OpenAI Client with API Key api_key =os.getenv("OPENAI_API_KEY") @@ -65,44 +67,42 @@ def create_and_stream(transcript): event_handler=EventHandler() ) as stream: stream.until_done() - return + messages = stream.get_final_messages() + return messages[0].content[0].text.value -def get_video_id(): - # local consts +def get_video_id(url): youtu_be = r'(?<=youtu.be/)([A-Za-z0-9_-]{11})' youtube_com = r'(?<=youtube\.com\/watch\?v=)([A-Za-z0-9_-]{11})' - # local vars - valid_id = False - # Get URL from user - while(not valid_id): - user_url = input("Enter the URL of the YouTube video: ") - id = re.search(youtu_be, user_url) - - if (not id): - id = re.search(youtube_com, user_url) - - if (not id): - print("Error: Couldn't parse video ID from URL, please make sure you are pasting a full \"youtube.com\" or \"youtu.be url\"\n") - else: - valid_id = True - - id = id.group(1) - print(id) - return id + id = re.search(youtu_be, url) + if not id: + id = re.search(youtube_com, url) + + if not id: + print("Couldn't parse video ID from URL") + return None + + return id.group(1) # Takes the transcript and formats it in basic text before writing it to auto-transcript.txt def get_auto_transcript(video_id): - transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['en'], proxies=None, cookies=None, preserve_formatting=False) - formatter = TextFormatter + trans_api_errors = youtube_transcript_api._errors + try: + transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['en'], proxies=None, cookies=None, preserve_formatting=False) + except trans_api_errors.TranscriptsDisabled: + return None + + formatter = TextFormatter() # Ensure that you create an instance of TextFormatter - txt_transcript = formatter.format_transcript(self=any, transcript=transcript) - print(txt_transcript) + txt_transcript = formatter.format_transcript(transcript) return txt_transcript + # Stores the video id imputted by the user +""" video_id = get_video_id() transcript = get_auto_transcript(video_id) -create_and_stream(transcript) \ No newline at end of file +create_and_stream(transcript) +""" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..302c6a93b279da4538d1e2829d9370a20db770fe GIT binary patch literal 1036 zcmZ9L%T9w(5Qb-M;-j=F)LLD*bz$Plh0BK0+KUyCLel#1>i5q8UP4YF%>0+RoUhN! z3ZBv$%Q$OW*@*YqD!z|)$1}09%{ddhvf9S^aVTZ+7hPR_PT;qANjxH4;uZIi z2Gy!VuRTZF%9}a=mbfxb13vY6L{E1(FYu;{q?vS%cVLdhG_Q?!ti)$bG$l_b96aE? zusxaSFP1SL)t5a{?M2KpT=mFDFf~1Careac3wbfs=zaJveV61hX0GaHUSH@}L^QPw zpK`M4I5eBYJydL5RHEI<2Mx_9y6`_^@u#0rueuX8)%bkJwKiN`>OD`rD>2n0PPC`m z)Yx_Tjt;9Y4Gb%GN!ZvT-Git&?oZURK;`5eEKm}c-aRUD#i*gBmj~bQB|5z)c@Ia= sFsa+x|F-K=zhzO^8TJ;f)|TYx9&6vFm-Dq_4!TVl@0f(9Dc7O@4L6vTLjV8( literal 0 HcmV?d00001 diff --git a/website/app.py b/website/app.py deleted file mode 100644 index e69de29..0000000 diff --git a/website/index.html b/website/index.html new file mode 100644 index 0000000..24cc215 --- /dev/null +++ b/website/index.html @@ -0,0 +1,30 @@ + + + + + + + + + Screw You Bardo + + + + + + + + + +
+

Response will appear here.

+
+ + +
+ + +
+ + + \ No newline at end of file diff --git a/website/static/font-files/nimbus-sans-d-ot-light.woff b/website/static/font-files/nimbus-sans-d-ot-light.woff new file mode 100644 index 0000000000000000000000000000000000000000..6ad134e30931af55cbc1e7c176de79faa780ec3a GIT binary patch literal 26088 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 Lue;gRJOBUyA3CvU literal 0 HcmV?d00001 diff --git a/website/static/script.js b/website/static/script.js new file mode 100644 index 0000000..474c14c --- /dev/null +++ b/website/static/script.js @@ -0,0 +1,31 @@ + +document.addEventListener("DOMContentLoaded", (event) => { + document.getElementById('submit').addEventListener('click', function() { + var url = document.getElementById('url_box').value; + const response_area = document.getElementById('response-area'); + + if (!url) { + response_area.innerText = 'Please enter a URL.'; + return; + } + else{ + response_area.innerText = "Sending URL and retriving transcript." + } + + fetch('/process_url', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: new URLSearchParams({ url: url }) + }) + .then(response => response.text()) + .then(data => { + response_area.innerText = data; + }) + .catch(error => { + console.error('Error:', error); + response_area.innerText = 'An error occurred. Please try again.'; + }); + }); +}); diff --git a/website/static/style.css b/website/static/style.css index e69de29..afc363b 100644 --- a/website/static/style.css +++ b/website/static/style.css @@ -0,0 +1,77 @@ + + +@font-face { + font-family: 'nimbus_sans_d_otlight'; + src: url('font-files/nimbus-sans-d-ot-light.woff2') format('woff2'), + url('font-files/nimbus-sans-d-ot-light.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +* { + font-family: 'nimbus_sans_d_otlight'; + color: white; +} + +body { + display: flex; + flex-direction: column; + width: 100%; + max-width: 100vw; + height: 100%; + min-height: 100vh; + max-height: 100vh; + margin: 0; + background-color: rgb(31, 31, 31); +} + +body .content { + display: flex; + flex-direction: column; + align-self: center; + width: 75%; + max-width: 65vw; + height: 100%; + min-height: 100vh; + max-height: 100vh; +} + +#response-area { + display: block; + height: 90%; + min-height: 90vh; + overflow: auto; + flex-wrap: wrap; + align-content: flex-end; +} + +.form_box { + display: flex; + width: 100%; + justify-content: space-between; + align-content: space-around; +} + +#url_box { + display: flex; + height: 5%; + min-height: 5vh; + width: 90%; + min-width: 80vh; + background-color: rgb(31, 31, 31); +} + +#submit { + display: flex; + width: 5%; + min-width: 3vw; + background-color: rgb(49, 49, 49); +} +#submit:hover { + cursor: pointer; + background-color: rgb(31, 31, 31); +} + +input { + border-radius: 15px; +} diff --git a/website/templates/index.html b/website/templates/index.html deleted file mode 100644 index e69de29..0000000