Версия для печати темы
Россия-2 _ Наши сборки _ youtube-dl-grabber
Автор: speccyfighter 5.2.2018, 15:49
Пакет простых скриптов youtube-dl-grabber предназначен для упрощения скачивания youtube видео в терминале live-sysv без использования подсистемы X.
Запущеный из терминала, скрипт скачивает youtube видео в текущий каталог:
youtube-dl-grab
Код
youtube-dl -f 18 $(grep -E 'youtube.com/watch' ~/.elinks/globhist | tail -n1 | rev | awk '{print $2}' | rev | awk -F '&' '{print $1}')
То же, но для скачивания плейлиста целиком
youtube-dl-grab-playlist
Код
youtube-dl -ciwf 18 -o "%(autonumber)s-%(title)s.%(ext)s" $(grep -E 'youtube.com/watch' ~/.elinks/globhist | grep list | tail -n1 | rev | awk '{print $2}' | rev)
Зависимости.
Depends:
Код
youtube-dl
grep
elinks
coreutils
util-linux
gawk
Код
Использование youtube-dl-grab, youtube-dl-grab-playlist:
- Использование браузера elinks обязательно:
скрипты используют его globhist.
- Через браузер elinks зайдите на страницу youtube
с понравившимся видео.
- Закройте браузер не уходя со страницы.
- Если открывали страницу с видеороликом, запускайте
youtube-dl-grab.
Если открывали страницу с плейлистом, запускайте
youtube-dl-grab-playlist.
- youtube-dl-grab скачивает или одиночное видео или
первый ролик плейлиста в текущий каталог.
youtube-dl-grab-playlist скачивает весь плейлист
в текущий каталог.
Видео скачивается в качестве 360p.
- После скачивания, находясь в этом текущем каталоге,
запустите space2lowline:
скрипт во всех файлах текущего каталога заменит пробелы
на символ lowline (подчёркивание).
- Для просмотра всех видео в этом каталоге, запустите
просмотр командой
mplayer-vc ./*.mp4
Путь к файлу и имя файла не должны содержать пробелов.
Просмотр в полноэкранном режиме.
Масштабирование видео в mplayer-vc автоматическое -
автоподстройка под разрешение монитора.
Громкость - клавиши 9,0
Включить/выключить отображение времени - клавиша o
Клавиши курсора, PgUp, PgDn - перемотка.
Ещё один скрипт утянутый не помню откуда:
Скрипт запущенный в текущем каталоге, не рекурсивно, заменяет в именах файлов текущего каталога, пробел на символ lowline (подчёркивание), что в свою очередь позволяет просматривать эти видеоролики через mplayer-vc, по возможности сводя количество ручных действий до минимума:
Код
#!/bin/sh
OLDIFS=$IFS
IFS=$'\n'
for x in `find . -name "* *"`
do
IFS=$OLDIFS
mv "$x" ${x// /_}
done
(под public domain?)
Работа скриптов проверена в live-sysv-v3
Автор: kostyalamer 5.2.2018, 22:08
Отлично, Юра будешь их пакетить ? Я конечно могу их закостылить в хомяк altlinux-у но это будет наверное не совсем правильно. Насчет help-ов тоже надо подумать они начинают накапливаться
Автор: speccyfighter 6.2.2018, 3:27
На заметку:
https://stackoverflow.com/questions/5474732/how-can-i-add-a-help-method-to-a-shell-script
Цитата
The first argument to a shell script is available as the variable $1, so the simplest implementation would be
if [ "$1" == "-h" ]; then
echo "Usage: `basename $0` [somestuff]"
exit 0
fi
You should make a habit of wrapping the if in [[ ... ]] for conditionals to avoid a bad parsing of a variable, source: github.com/bahamas10/bash-style-guide#bashisms – JREAM Mar 19 '17 at 15:38
Yes, although the OP didn't specify bash, and [ is the POSIX-compliant version. – seb Mar 20 '17 at 16:16
Note - For using inside function: You should replace exit 0 with return if you don't want to terminate your shell after run your function. (I've done it before 😂) – Illuminator Sep 7 '17 at 16:19
man bash
Код
return [n]
Causes a function to exit with the return value specified by n.
Вызывает выход функции с возвращаемым значением,
заданным параметром n.
Также:
https://www.linuxquestions.org/questions/debian-26/how-can-i-add-a-help-method-into-a-shell-script-4175509910/#post5197703
Автор: speccyfighter 6.2.2018, 11:22
Набросал заготовку вывода help.
Теоретически, можно следовать логике:
если root, выводить help на английском;
если не root, на русском
Код
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
if [ $UID = 0 ]; then
echo
echo "Usage: `basename $0` [options]"
echo
echo "Options:"
echo " -h, --help - this help"
echo
else
echo
echo "Использование: `basename $0` [опции]"
echo
echo " Опции:"
echo " -h, --help - этот help"
echo
fi
exit 0
fi
youtube-dl -f 18 $(grep -E 'youtube.com/watch' ~/.elinks/globhist | tail -n1 | rev | awk '{print $2}' | rev | awk -F '&' '{print $1}')
Работать будет так:
Код
# /home/altlinux/youtube-dl-grab.sh -h
Usage: youtube-dl-grab.sh [options]
Options:
-h, --help - this help
Код
$ ./youtube-dl-grab.sh -h
Использование: youtube-dl-grab.sh [опции]
Опции:
-h, --help - этот help
Но основные языки (кроме английского), это русский, украинский, татарский.
Первые два потяну, остальные нет.
Кто его знает какой ещё может понадобится. Да и не хочется мне расписывать один хэлп на десятке локалей.
Останавливаюсь на выводе хэлпа только на английском:
язык международный, общепринятый по-умолчанию на компьютерах, со времён спектрума и микрош, и это сократит и объём работы и объём скрипта, а отдавать предпочтение одному языку, кроме общепринятого дефолта, плохая идея.
Код
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
echo
echo "Usage: `basename $0` [options]"
echo
echo "Options:"
echo " -h, --help - this help"
echo
exit 0
fi
youtube-dl -f 18 $(grep -E 'youtube.com/watch' ~/.elinks/globhist | tail -n1 | rev | awk '{print $2}' | rev | awk -F '&' '{print $1}')
Хэлп дополнится описанием использования скрипта.
Чёрт... Но есть проблема, языковая, на предмет хэлпа:
- Современные пользователи компьютера, нулевые, где-то на уровне плинтуса. Ожидать от них уровня пользователей 90-тых, безнадёжная затея.
А вворачивать в скрипт ещё одну проверку по /etc/sysconfig/i18n у меня желание близкое к нулю.
В глубоком раздумье...
Автор: speccyfighter 7.2.2018, 12:39
Окончательный вариант.
Скрипт притерпел существенные изменения:
- Два скрипта сведены в один, - youtube-dl-grabber.
- Если системная локаль ru_RU.UTF-8 и пользователь не root, help выводится на русском языке.
Иначе, на английском.
- Если браузер elinks закрывался на странице с видеороликом, будет скачан видеоролик.
Если браузер elinks закрывался на странице с плейлистом, будет скачан плейлист.
Листинг скрипта
Код
#!/bin/sh
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
SYSLANG=`grep "^LANG=" /etc/sysconfig/i18n | cut -f2 -d '='`
if [ $UID != 0 ] && [ "$SYSLANG" = "ru_RU.UTF-8" ]; then
echo
echo "Использование: `basename $0` [опции]"
echo
echo "Опции:"
echo " -h, --help этот help"
echo
echo "- Браузером elinks зайдите на страницу youtube с видео."
echo "- Использование браузера elinks обязательно:"
echo " скрипты используют его globhist."
echo "- Закройте браузер не уходя со страницы."
echo "- Если в elinks открывали страницу с видеороликом,"
echo " скачается видеоролик в текущий каталог."
echo " Если открывали страницу с плейлистом, скачается"
echo " плейлист"
echo " Видео скачивается в качестве 360p."
echo
echo "- После скачивания, находясь в этом текущем каталоге,"
echo " запустите space2lowline:"
echo " скрипт в файлах текущего каталога заменит пробелы"
echo " на символ lowline (подчёркивание)."
echo "- Рекомендуемый просмотр:"
echo " mplayer-vc ./*.mp4"
echo " Путь к файлу и имя файла не должны содержать пробелов."
echo " Просмотр в полноэкранном режиме."
echo " Масштабирование видео в mplayer-vc автоматическое -"
echo " автоподстройка под разрешение монитора."
echo " Громкость - клавиши 9,0"
echo " Включить/выключить отображение времени - клавиша 'o'"
echo " Клавиши курсора, PgUp, PgDn - перемотка."
echo
else
echo
echo "Usage: `basename $0` [options]"
echo
echo "Options:"
echo " -h, --help this help"
echo
echo "- Browser elinks, go to the youtube page with the video."
echo "- Use elinks browser necessarily:"
echo " scripts use its globhist."
echo "- Close the browser without leaving the page."
echo "- If the page with the video was opened in elinks, the video"
echo " is downloaded to the current directory."
echo " If you have opened the page with a playlist, the playlist"
echo " will be downloaded."
echo " The video is downloaded as 360p."
echo
echo "- After downloading, being in this current directory,"
echo " start space2lowline:"
echo " the script in the files of the current directory will"
echo " replace spaces on the Lowline character."
echo "- Recommended viewing:"
echo " mplayer-vc./*.mp4"
echo " The file path and file name must not contain spaces."
echo " Viewing in full screen mode."
echo " Video scaling in mplayer-vc automatic -"
echo " this action is under the resolution of the monitor."
echo " The volume keys 9,0"
echo " To turn on/off the time display - key 'o'"
echo " Cursor keys, PgUp, PgDn - rewinding."
echo
fi
exit 0
fi
VLINK=`grep -E 'youtube.com/watch' ~/.elinks/globhist | tail -n1 | rev | awk '{print $2}' | rev`
IFPLS=`grep -E 'youtube.com/watch' ~/.elinks/globhist | tail -n1 | rev | awk '{print $2}' | rev | grep '\&list=' | wc -l`
if [ $IFPLS = 0 ]; then
youtube-dl -f 18 $VLINK
else
youtube-dl -ciwf 18 -o "%(autonumber)s-%(title)s.%(ext)s" $VLINK
fi
Остаётся вопрос:
Стоит ли включать в этот же пакет, скрипт space2lowline или его следует положить отдельно?
Автор: speccyfighter 7.2.2018, 13:02
Цитата(kostyalamer @ 5.2.2018, 20:08)
Отлично, Юра будешь их пакетить ? Я конечно могу их закостылить в хомяк altlinux-у но это будет наверное не совсем правильно.
Я не пакажер-асс и это займёт неопределённое время.
Цитата(kostyalamer @ 5.2.2018, 20:08)
Насчет help-ов тоже надо подумать они начинают накапливаться
Под хэлпы и прочее, надо выделять отдельный каталог. Неплохую идею про /opt предложил Юра.
Ну и ИМХО:
Плохо и халатно написанный хэлп, хуже его полного отсутствия.
Помощь, должна помогать пользователю, а не порождать ещё больше вопросов.
Шэлл может быть простым и для повседневных задач. Нужно просто повернуться к пользователю лицом, а не...
Автор: kostyalamer 7.2.2018, 21:17
1) Я тоже ни разу не асс , если надо - постараюсь тебе с этим делом помочь
2) Давай подумаем над структурой всего этого безобразия:
a) Каталог для help-ов /opt/help ?
б) Формат help -ов текстовой или html ? В html можно вставить картинки и открывать его в том же netsurf-fb ( когда-то мы так и делали с help-ами по wmsmall-у и wmchildren-у). Вопрос в другом - нужны ли здесь картинки ?
в) Каталог меню делаем в /home/altlinux/menu/ или /home/altlinux/.0_menu/ или в /opt/menu ?
г) язык меню русский или английский ?
д) скрипты пихаем в /usr/bin в /opt или еще куда ?
Автор: speccyfighter 7.2.2018, 23:59
Цитата(kostyalamer @ 7.2.2018, 19:17)
2) Давай подумаем над структурой всего этого безобразия:
a) Каталог для help-ов /opt/help ?
Пробежался по FHS:
FHS допускает /opt/doc, /opt/info, /opt/man
Склоняюсь к /opt/info, - на мой взгляд, наши хэлпы не doc и не man.
Цитата(kostyalamer @ 7.2.2018, 19:17)
2)
б) Формат help -ов текстовой или html ? В html можно вставить картинки и открывать его в том же netsurf-fb ( когда-то мы так и делали с help-ами по wmsmall-у и wmchildren-у).
Я не противник html-а, но на мой взгляд ascii предпочтительнее: он читается даже тогда, когда полсистемы вдрыск улетело.
Но я одновременно и против академических заумностей в хэлпах и хауту: help (англ.) помощь (а не геморрой)
В моём понимании, это нечто среднее между технически правильным, но без заворота кишок, и при этом не принимая пользователя за дебила по-умолчанию.
Цитата(kostyalamer @ 7.2.2018, 19:17)
2)
б) Вопрос в другом - нужны ли здесь картинки ?
Моё сугубо личное:
Если документации нужны картинки, то написана она, хреново.
Кстати, любые выбросы можно снять из /dev/vcs в ascii, если в той консоли нет кириллицы.
А потом затолкать это в хэлп.
Это в смысле man vcs на предмет fold (сграббить весь текст из 3-ей виртуальной консоли):
Код
fold -w N /dev/vcs3 >file
Сделает перевод строк через каждые N символов.
Где N, это columns (символов в строке) из
Код
stty -a|head -n1
чтобы это правильно отображалось как не скриншот терминала, а терминал в виде ascii текста.
Цитата(kostyalamer @ 7.2.2018, 19:17)
в) Каталог меню делаем в /home/altlinux/menu/ или /home/altlinux/.0_menu/ или в /opt/menu ?
Я бы предпочёл, чтобы меню с хэлпами лежало в одном месте, как группа файлов относящихся к неофициальной документации.
Но не в $HOME, - пусть это будет общесистемно, для всех.
Цитата(kostyalamer @ 7.2.2018, 19:17)
г) язык меню русский или английский ?
Сложный вопрос:
С одной стороны русскоязычному пользователю проще читать на русском.
С другой, мои компьютерные амбиции выходят далеко за рамки русскоязычных пользователей.
Но как сделаешь так и будет
Цитата(kostyalamer @ 7.2.2018, 19:17)
д) скрипты пихаем в /usr/bin в /opt или еще куда ?
Для скриптов не входящих в пакеты, я бы предпочёл не отходить от FHS и /usr/local счёл бы предпочтительным, но bin и sbin должны быть описаны не только у root
Код
# cat ./root/.bashrc # пакет rootfiles
# .bashrc
# User specific aliases and functions
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
alias d='ls'
alias s='cd ..'
alias p='cd -'
# Read /etc/inputrc if the variable is not defined.
[ -n "$INPUTRC" ] || export INPUTRC=/etc/inputrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
PATH=/root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
ENV=$HOME/.bashrc
USERNAME="root"
export USERNAME ENV PATH
но и /usr/local/bin в переменной PATH пользователя.
Цитата(kostyalamer @ 7.2.2018, 19:17)
1) Я тоже ни разу не асс , если надо - постараюсь тебе с этим делом помочь
Я обычно подглядываю куда ни попадя и сваливаю в свой спэк всё, что там должно быть.
Иногда это долгие поиски. Например дэскрипшн на русском и английском в одном спэке. При сильно ограниченном дисковом.
Автор: kostyalamer 9.2.2018, 21:13
Юра , держи в качестве посильной помощи :
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.hasher/youtube-dl-grabber-0.1-alt1.src.rpm
http://altlinuxclub.ru/repo/Repo_P8/i686/RPMS.hasher/youtube-dl-grabber-0.1-alt1.i686.rpm
Запихал оба скрипта в один пакет ( ибо шибко ленив ) , они устанавливаются в /usr/bin.
В общем - дальше пакет твой, это только первоначальные наброски .
Если все нормально попроси Дана пересобрать под 64-бита, да biuldreq вовсю гадит 3-им питоном - поэтому если хочешь собрать под p7 сборочные зависимости надо будет менять.
Автор: speccyfighter 11.2.2018, 18:37
Цитата(kostyalamer @ 9.2.2018, 19:13)
Юра , держи в качестве посильной помощи :
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.hasher/youtube-dl-grabber-0.1-alt1.src.rpm
http://altlinuxclub.ru/repo/Repo_P8/i686/RPMS.hasher/youtube-dl-grabber-0.1-alt1.i686.rpm
Запихал оба скрипта в один пакет ( ибо шибко ленив ) , они устанавливаются в /usr/bin.
В общем - дальше пакет твой, это только первоначальные наброски
.
К сожалению не помогло,
а так хотел успеть до сборки лайва...
Твой спек что сделал:
Он положил скрипт youtube-dl-grabber, затем взял этот же скрипт и положил его с именем space2lowline.
А настоящий space2lowline даже не попал в пакет.
Смотри, у них одинаковая длинна в байтах:
Код
# rpm -qpvl youtube-dl-grabber-0.1-alt1.i686.rpm
-rwxr-xr-x 1 root root 4271 фев 9 19:00 /usr/bin/space2lowline
-rwxr-xr-x 1 root root 4271 фев 9 19:00 /usr/bin/youtube-dl-grabber
Спек собирал дедовским методом: по кускам из других спеков.
Ушло часов пять на поиск взрыва и сборку по своему спеку. К сборке лайва не успел.
Код
# rpm -qpvl /home/wilder/RPM/SRPMS/youtube-dl-grabber-0.2-alt1.src.rpm
-rw-r--r-- 1 builder builder 1060 фев 11 12:55 space2lowline
-rw-r--r-- 1 builder builder 4271 фев 9 19:00 youtube-dl-grabber
-rw-r--r-- 1 builder builder 1325 фев 11 17:11 youtube-dl-grabber.spec
Код
# rpm -qivl youtube-dl-grabber
Name : youtube-dl-grabber
Version : 0.2
Release : alt1
Architecture: i586
Install Date: Вс 11 фев 2018 16:51:08
Group : Video
Size : 5331
License : public domain
Signature : (none)
Source RPM : youtube-dl-grabber-0.2-alt1.src.rpm
Build Date : Вс 11 фев 2018 16:49:28
Build Host : speccyfighter.hasher.altlinux.org
Relocations : (not relocatable)
Packager : Speccyfighter <ALT Linux Active Users Club>
Vendor : ALT Linux Team
Summary : Скрипт для скачивания видео с youtube.
Description :
Скрипты для скачивания видео с youtube
и замены пробелов на подчёркивание в файлах.
-rwxr-xr-x 1 root root 1060 фев 11 16:49 /usr/bin/space2lowline
-rwxr-xr-x 1 root root 4271 фев 11 16:49 /usr/bin/youtube-dl-grabber
https://yadi.sk/d/C1qcIYXc3SHgcV
Автор: kostyalamer 11.2.2018, 19:29
Вот блин, накосячил . Не переживай следующая пересборка live-а будет наверное в течении 2-х недель, а пакет сейчас перезалью.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)