summaryrefslogtreecommitdiff
path: root/.config/qutebrowser/userscripts/youtube-dl
diff options
context:
space:
mode:
Diffstat (limited to '.config/qutebrowser/userscripts/youtube-dl')
-rw-r--r--.config/qutebrowser/userscripts/youtube-dl53
1 files changed, 53 insertions, 0 deletions
diff --git a/.config/qutebrowser/userscripts/youtube-dl b/.config/qutebrowser/userscripts/youtube-dl
new file mode 100644
index 0000000..5cd71e6
--- /dev/null
+++ b/.config/qutebrowser/userscripts/youtube-dl
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""
+Description: Qutebrowser userscript. Allows you to download and watch a youtube video
+Keyboard binding: config.bind("\\", 'hint all userscript watchyt.py')
+Config file location: ~/.config/qutebrowser/config.py
+Script file location: ~/.local/share/qutebrowser/userscripts/watchyt.py
+Manually set keybinding: :bind \ hint all userscript watchyt.py
+Usage: Press \ then the hint keys for the video you wish to watch.
+ You must select the video title not the image
+
+This is my first Qutebrowser plugin so it is pretty basic right now.
+Why download and watch when you can stream to mpv?
+mpv has a thumbnails plugin that doesn't work when streaming.
+You don't have to deal with buffering when it is already downloaded.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+import youtube_dl
+from executor import execute
+from lxml import html
+from qutescript import userscript
+
+
+@userscript
+def watch_youtube(request):
+ # TODO: Add title, url, img, filepath to a database
+ # TODO: Make webpage to watch the downloaded videos
+ # dom = html.parse(request.html)
+ # out = dom.find(".//title").text
+ # out = "<br>\n".join([f"{j}: {k}" for j, k in os.environ.items()])
+ # title = os.environ["QUTE_SELECTED_TEXT"].strip()
+ # TODO: Verify it is a video link. Not an image. If image then search for correct URL in dom
+ url = os.environ["QUTE_URL"].strip()
+ # href = url.split("/")[-1]
+ # img = dom.xpath(f".//a[@id='thumbnail' and @href='/{href}']/yt-img-shadow/img")[0].get("src")
+ # out += f"<p>\n\n{title} - {url} - /{href} - {img}"
+ # TODO: Use fallback formats incase 18 is not available.
+ with youtube_dl.YoutubeDL({
+ "restrictfilenames": True,
+ "format": "18",
+ "outtmpl": "/yt/%(upload_date)s_%(title)s-%(id)s.%(ext)s",
+ }) as ydl:
+ info_dict = ydl.extract_info(url)
+ filepath = ydl.prepare_filename(info_dict)
+ execute(f"mpv {filepath}")
+# request.send_html(out)
+
+if __name__ == "__main__":
+ watch_youtube()