aboutsummaryrefslogtreecommitdiffstats
path: root/hypervideo_gui.py
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-12-10 15:35:14 -0500
committerJesús <heckyel@hyperbola.info>2019-12-10 15:35:14 -0500
commitbd22eee549859b18e04c2ae3958987016e326bcd (patch)
treebb7309ff630089c63e809e0e250468088d841e1f /hypervideo_gui.py
parentf92fdb822eb030fc21087b56d49b6616272f2c33 (diff)
downloadhypervideo-gui-bd22eee549859b18e04c2ae3958987016e326bcd.tar.lz
hypervideo-gui-bd22eee549859b18e04c2ae3958987016e326bcd.tar.xz
hypervideo-gui-bd22eee549859b18e04c2ae3958987016e326bcd.zip
simple valid URL regex
Diffstat (limited to 'hypervideo_gui.py')
-rw-r--r--hypervideo_gui.py61
1 files changed, 6 insertions, 55 deletions
diff --git a/hypervideo_gui.py b/hypervideo_gui.py
index b3e9a6c..b14fe43 100644
--- a/hypervideo_gui.py
+++ b/hypervideo_gui.py
@@ -4,7 +4,9 @@ import re
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
-from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtCore import (
+ pyqtSlot,
+)
import threading
import hypervideo
@@ -29,59 +31,7 @@ class App(QMainWindow):
"""
Simple applicaction for download using hypervideo
"""
- _VALID_URL = r"""(?x)^
- (
- (?:https?://|//) # http(s):// or protocol-independent URL
- (?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com/|
- (?:www\.)?deturl\.com/www\.youtube\.com/|
- (?:www\.)?pwnyoutube\.com/|
- (?:www\.)?hooktube\.com/|
- (?:www\.)?yourepeat\.com/|
- tube\.majestyc\.net/|
- # Invidious instances taken from https://github.com/omarroth/invidious/wiki/Invidious-Instances
- (?:(?:www|dev)\.)?invidio\.us/|
- (?:(?:www|no)\.)?invidiou\.sh/|
- (?:(?:www|fi|de)\.)?invidious\.snopyta\.org/|
- (?:www\.)?invidious\.kabi\.tk/|
- (?:www\.)?invidious\.13ad\.de/|
- (?:www\.)?invidious\.mastodon\.host/|
- (?:www\.)?invidious\.nixnet\.xyz/|
- (?:www\.)?invidious\.drycat\.fr/|
- (?:www\.)?tube\.poal\.co/|
- (?:www\.)?vid\.wxzm\.sx/|
- (?:www\.)?yt\.elukerio\.org/|
- (?:www\.)?yt\.lelux\.fi/|
- (?:www\.)?kgg2m7yk5aybusll\.onion/|
- (?:www\.)?qklhadlycap4cnod\.onion/|
- (?:www\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\.onion/|
- (?:www\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\.onion/|
- (?:www\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\.onion/|
- (?:www\.)?invidious\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\.onion/|
- (?:www\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\.b32\.i2p/|
- youtube\.googleapis\.com/) # the various hostnames, with wildcard subdomains
- (?:.*?\#/)? # handle anchor (#/) redirect urls
- (?: # the various things that can precede the ID:
- (?:(?:v|embed|e)/(?!videoseries)) # v/ or embed/ or e/
- |(?: # or the v= param in all its forms
- (?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)? # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
- (?:\?|\#!?) # the params delimiter ? or # or #!
- (?:.*?[&;])?? # any other preceding param (like /?s=tuff&v=xxxx or ?s=tuff&amp;v=V36LpHqtcDY)
- v=
- )
- ))
- |(?:
- youtu\.be| # just youtu.be/xxxx
- vid\.plus| # or vid.plus/xxxx
- zwearz\.com/watch| # or zwearz.com/watch/xxxx
- )/
- |(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
- )
- )? # all until now is optional -> you can pass the naked ID
- ([0-9A-Za-z_-]{11}) # here is it! the YouTube video ID
- (?(1).+)? # if we found the ID, everything can follow
- $"""
-
- __URL = r"""^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$"""
+ _VALID_URL = r"""^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$"""
def __init__(self):
super().__init__()
@@ -243,7 +193,7 @@ class App(QMainWindow):
}
# download the video in daemon thread
- if re.match(self.__URL, str(self.url_entry())) is None:
+ if re.match(self._VALID_URL, str(self.url_entry())) is None:
self.statusBar().showMessage('Please add a URL...') # update status bar
else:
self.statusBar().showMessage('Downloading Video...') # update status bar
@@ -264,6 +214,7 @@ class App(QMainWindow):
'format': 'best',
'noplaylist': True, # only download single song, not playlist
}
+
with hypervideo.YoutubeDL(self.options) as ydl:
meta = ydl.extract_info(url, download=False)
formats = meta.get('formats', [meta])