Python Flask
https://flask.palletsprojects.com/en/2.3.x/installation/
Create an environment
C:\flask_dev>py -3 -m venv venv
Activate the environment
C:\flask_dev>venv\Scripts\activate
Install Flask
venv C:\flask_dev>pip install Flask
Install requirements
pytube
pytube is a genuine, lightweight, dependency-free Python library (and command-line utility) for downloading YouTube videos.
https://pypi.org/project/pytube/
(venv) PS C:\flask_dev\myapp>pip install pytube
pathlib
pathlib offers a set of classes to handle filesystem paths. It offers the following advantages over using string objects:
https://pypi.org/project/pathlib/
(venv) PS C:\flask_dev\myapp>pip install pathlib
C:\flask_dev\myapp\app.py
#
from flask import Flask, request, render_template
from pytube import YouTube #pip install pytube https://pypi.org/project/pytube/
from pathlib import Path #pip install pathlib https://pypi.org/project/pathlib/
import os
import re
app = Flask(__name__)
@app.route("/download", methods=["GET","POST"])
def downloadVideo():
mesage = ''
errorType = 0
if request.method == 'POST' and 'video_url' in request.form:
youtubeUrl = request.form["video_url"]
if(youtubeUrl):
validateVideoUrl = (
r'(https?://)?(www\.)?'
'(youtube|youtu|youtube-nocookie)\.(com|be)/'
'(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})')
validVideoUrl = re.match(validateVideoUrl, youtubeUrl)
if validVideoUrl:
url = YouTube(youtubeUrl)
video = url.streams.get_highest_resolution()
downloadFolder = str(os.path.join(Path.home(), "Downloads/Youtube_download"))
video.download(downloadFolder)
mesage = 'Video Downloaded Successfully!'
errorType = 1
else:
mesage = 'Enter Valid YouTube Video URL!'
errorType = 0
else:
mesage = 'Enter YouTube Video Url.'
errorType = 0
return render_template('youtube.html', mesage = mesage, errorType = errorType)
if __name__ == "__main__":
app.run()
templates/youtube.html
#templates/youtube.html
<html>
<head>
<Title>Python Flask YouTube video Downloader</Title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-3">
<h2>Python Flask YouTube Downloader</h2>
<form action="/download" method="post">
{% if mesage is defined and mesage %}
{% if errorType is defined and errorType %}
<div class="alert alert-success">{{ mesage }}</div>
{% else %}
<div class="alert alert-danger">{{ mesage }}</div>
{% endif %}
{% endif %}
<div class="mb-3 mt-3">
<label for="video_url">Enter YouTube Video Url:</label>
<input type="text" class="form-control" id="video_url" placeholder="Enter url" name="video_url">
</div>
<button type="submit" class="btn btn-primary">Download</button>
</form>
</div>
<br><br>
</body>
</html>
run (venv) C:\flask_dev\myapp>flask run http://127.0.0.1:5000/download
