IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> youtube-dl-grabber, Упрощение скачивания видео в live-sysv
Поделиться
speccyfighter
сообщение 5.2.2018, 15:49
Сообщение #1


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Пакет простых скриптов 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

Сообщение отредактировал speccyfighter - 5.2.2018, 16:15
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 5.2.2018, 22:08
Сообщение #2


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Отлично, Юра будешь их пакетить ? Я конечно могу их закостылить в хомяк altlinux-у но это будет наверное не совсем правильно. Насчет help-ов тоже надо подумать они начинают накапливаться good.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 6.2.2018, 3:27
Сообщение #3


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


На заметку:

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.


Также:
[SOLVED] how can i add a help method into a shell script?

Сообщение отредактировал speccyfighter - 6.2.2018, 3:40
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 6.2.2018, 11:22
Сообщение #4


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Набросал заготовку вывода 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
Сообщение #5


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Окончательный вариант.

Скрипт притерпел существенные изменения:
- Два скрипта сведены в один, - 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, 12:44
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 7.2.2018, 13:02
Сообщение #6


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 5.2.2018, 20:08) *
Отлично, Юра будешь их пакетить ? Я конечно могу их закостылить в хомяк altlinux-у но это будет наверное не совсем правильно.


smile.gif Я не пакажер-асс и это займёт неопределённое время.

Цитата(kostyalamer @ 5.2.2018, 20:08) *
Насчет help-ов тоже надо подумать они начинают накапливаться good.gif


Под хэлпы и прочее, надо выделять отдельный каталог. Неплохую идею про /opt предложил Юра.

Ну и ИМХО:
Плохо и халатно написанный хэлп, хуже его полного отсутствия.
Помощь, должна помогать пользователю, а не порождать ещё больше вопросов.
Шэлл может быть простым и для повседневных задач. Нужно просто повернуться к пользователю лицом, а не...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 7.2.2018, 21:17
Сообщение #7


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


1) Я тоже ни разу не асс , если надо - постараюсь тебе с этим делом помочь smile.gif
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
Сообщение #8


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(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) *
г) язык меню русский или английский ?

Сложный вопрос:
С одной стороны русскоязычному пользователю проще читать на русском.
С другой, мои компьютерные амбиции выходят далеко за рамки русскоязычных пользователей.
Но как сделаешь так и будет smile.gif

Цитата(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) Я тоже ни разу не асс , если надо - постараюсь тебе с этим делом помочь smile.gif

Я обычно подглядываю куда ни попадя и сваливаю в свой спэк всё, что там должно быть.
Иногда это долгие поиски. Например дэскрипшн на русском и английском в одном спэке. При сильно ограниченном дисковом.

Сообщение отредактировал speccyfighter - 8.2.2018, 0:05
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 9.2.2018, 21:13
Сообщение #9


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Юра , держи в качестве посильной помощи :
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.....1-alt1.src.rpm
http://altlinuxclub.ru/repo/Repo_P8/i686/R...1-alt1.i686.rpm
Запихал оба скрипта в один пакет ( ибо шибко ленив ) , они устанавливаются в /usr/bin.
В общем - дальше пакет твой, это только первоначальные наброски smile.gif .
Если все нормально попроси Дана пересобрать под 64-бита, да biuldreq вовсю гадит 3-им питоном - поэтому если хочешь собрать под p7 сборочные зависимости надо будет менять.

Сообщение отредактировал kostyalamer - 9.2.2018, 21:14
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
speccyfighter
сообщение 11.2.2018, 18:37
Сообщение #10


Крупный специалист
*****

Группа: Пользователь
Сообщений: 461
Регистрация: 1.5.2013
Вставить ник
Цитата
Пользователь №: 2379
Страна: Беларусь
Город: Не указан
Пол: Муж.



Репутация: 1


Цитата(kostyalamer @ 9.2.2018, 19:13) *
Юра , держи в качестве посильной помощи :
http://altlinuxclub.ru/repo/Repo_P8/SRPMS.....1-alt1.src.rpm
http://altlinuxclub.ru/repo/Repo_P8/i686/R...1-alt1.i686.rpm
Запихал оба скрипта в один пакет ( ибо шибко ленив ) , они устанавливаются в /usr/bin.
В общем - дальше пакет твой, это только первоначальные наброски smile.gif .


К сожалению не помогло, smile.gif а так хотел успеть до сборки лайва...
Твой спек что сделал:
Он положил скрипт 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


noarch.rpm+src.rpm youtube-dl-grabber для скачивания и пересборки
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 11.2.2018, 19:29
Сообщение #11


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Вот блин, накосячил wink.gif . Не переживай следующая пересборка live-а будет наверное в течении 2-х недель, а пакет сейчас перезалью.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
( Гостей: 1 )
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.3.2024, 18:03