Сайт | Скачать | Видео | Wiki

Автор Тема: Обновление yt-dlp с помощью bash скриптами  (Прочитано 2852 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
На днях видел на форуме тему с публикацией об обновлении yt-dlp. Посмотрел а там решение на python. И не то что есть какие либо предубеждения к python, я просто в него не умею. И подумалось, а что если написать обновлялку на bash. И написал. Есть 2 решения одно простое как топор , и заключается в том чтоб обновлять каждые две недели с помощью at  , используя pip. Оно работает , но не по факту, и может попасть на обновление , а может и не попасть. То есть версия yt-dlp в репе обновилась,  а at еще не сработал, и можем поймать не стабильную работу  yt-dlp, а это не есть хорошо,как вариант можно настроить at на обновление каждые 3дня,но мне хотелось более точного и изящного решения.  Потому пошёл по другому пути. В причину того что PyPI перестал поддерживать команду pip search , пришлось парсить страницу с текущей версией yt-dlp в репе pip  https://pypi.org/project/yt-dlp/#files  Чтоб долго не рассусоливать перехожу к самому скрипту а вернее скриптам ибо их 2, плюс десктоп файл для автозагрузки .

Для того чтоб скрипты заработали предварительно скопируем из архива или в каталоге ~/.local/bin создадим  каталог /yt-dlp_upd_advansed  .
  В каталоге/.local/bin/ yt-dlp_upd_advansed/  мы увидим ( или создадим если будем этот код копировать отсюда)  скрипты yt_dlp_adw.sh и yt_dlp_adw_upd_engine.sh ,   а также desktop файл yt_dlp_upd.desktop .
Десктоп файл необходимо скопировать в каталог ~/.config/autostart/  все скрипты  должны быть отмечены как исполняемые. Теперь  при прохождении  5 минут после загрузки системы , если в репе pip появится новая версия yt-dlp , скрипт проиграет соответствующую мелодию, откроет окно с эмулятором терминала xterm в котором можно будет пронаблюдать за обновлением yt-dlp с помощью pip. Если версия yt-dlp в репе будет соответствовать установленной в системе, то проиграется  короткая мелодия, отличающаяся от мелодии при ситуации когда обновление в репе будет, кроме мелодии никаких других окон открываться не будет и мы услышим просто короткий звук,который будет обозначать что обновлений нет.
---------------------------
исправил код с автоматизацией ввода пароля sudo для пользователей у которых он так настроен (в большинстве случаев), код для пользователей у которых sudo не требует пароля так же сохранен в коде но закоментирован .
-------------------------------------------
 скрипт для обновления yt-dlp, который можно брать  помечен в теле этого поста
он более правильный ине использует pip ,
---!!!---остальные скрипты написаны по не знанию того что yt-dlp может обновляться сам,
--!!!--Этот скрипт не берем--!!!--смотрим дальше
--------------------------------------------
 Привожу код скриптов и desktop файла
yt_dlp_adw.sh
Код
#!/bin/bash
sleep 5m
#получаем версию yt-dlp с сайта https://pypi.org/project/yt-dlp/#files
irepo_ver="$(curl https://pypi.org/project/yt-dlp/#files | grep -o 'yt_dlp-[0-9.]*-py2.py3-none-any.whl' | grep -o 'yt_dlp-.*\.whl' | head -n 1)"

#чистим вывод от имени yt-dlp и оставляем только версию
export repo_ver="$(echo "$irepo_ver" | grep -oE 'yt_dlp-([0-9]+\.){2}[0-9]+' | sed 's/yt_dlp-//')"

#закоментированая repo_ver= для теста работы скрипта
#export repo_ver="2023.7.7"
#получаем установленую версию yt-dlp
export sis_ver="$(pip show yt-dlp | grep Version: | awk '{print $2}')"

#сравниваем версии и если версия из pip репы больше системной обновляем yt-dlp
if [[ $repo_ver > $sis_ver ]]; then
echo "repo_ver больше sis_ver"
export DISPLAY=:0 && xterm -e 'sh $HOME/.local/bin/yt-dlp_upd_advansed/yt_dlp_adw_upd_engine.sh'
    else
    paplay /usr/share/sounds/freedesktop/stereo/bell.oga
    echo "версия yt-dlp актуальна"
fi

yt_dlp_adw_upd_engine.sh
Код
#!/bin/bash
paplay /usr/share/sounds/freedesktop/stereo/service-login.oga
#вместо password вводим пароль вашего пользователя
echo "$password" | sudo -S pip3 install -U yt-dlp
#если у вас sudo настроен без ввода пароля строку выше комментируем, а строку ниже раскомментируем
#sudo pip3 install -U yt-dlp
echo "yt-dlp обновлён"
echo "c  версии-->> " ". $sis_ver"
echo "до версии-->> " ". $repo_ver"
sleep 8

yt_dlp_upd.desktop
Код
[Desktop Entry]
Type=Application
Name=yt-dlp_upd
Exec=/home/user/.local/bin/yt-dlp_upd_advansed/yt_dlp_adw.sh
Categories=System;

вместо /home/user в Exec= пишем своего пользователя

архив со скриптами скачать можно тут https://disk.yandex.ru/d/jtAe2d-t6rfAkw

Прошу тестов и критики.
upd: по дороге домой с работы, пришла мысль что если убрать интерактивщину и звуковые уведомления , то скрипт бы в тихую обновлял yt-dlp, и пользователь даже бы не знал об этом, чутка позже выложу и такую версию скрипта, может кто то желает именно такой сценарий.
« Последнее редактирование: 11 Сентябрь 2023, 21:26:06 от totiks2012 »

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #1 : 08 Сентябрь 2023, 19:49:45 »
вот версия скрипта которая тихо обновит yt-dlp, звуковые уведомления оставил, ну чтоб как то ориентироваться в том что происходит
-------------------------------------------
--!!!--Этот скрипт не берем--!!!--смотрим дальше
-------------------------------------------
upd : Установил libnotify-bin, добавил строки для вывода  уведомлений о событиях через notify-send, сообщит если версия актуальна и выведет версию, если обновится уведомит и покажет с какой до какой версии был обновлен
---------------------
исправил код с автоматизацией ввода пароля sudo для пользователей у которых он так настроен (в большинстве случаев), код для пользователей у которых sudo не требует пароля так же сохранен в коде но закоментирован .
--------------------

скачать тут https://disk.yandex.ru/d/HLCjHpQd-kOJmw
--------------------
yt_dlp_adw.sh

Код
#!/bin/bash
sleep 5m
#получаем версию yt-dlp с сайта https://pypi.org/project/yt-dlp/#files
irepo_ver="$(curl https://pypi.org/project/yt-dlp/#files | grep -o 'yt_dlp-[0-9.]*-py2.py3-none-any.whl' | grep -o 'yt_dlp-.*\.whl' | head -n 1)"

#чистим вывод от имени yt-dlp и оставляем только версию
repo_ver="$(echo "$irepo_ver" | grep -oE 'yt_dlp-([0-9]+\.){2}[0-9]+' | sed 's/yt_dlp-//')"

#закоментированая repo_ver= для теста работы скрипта
# repo_ver="2023.7.7"
#получаем установленую версию yt-dlp
sis_ver="$(pip show yt-dlp | grep Version: | awk '{print $2}')"

#сравниваем версии и если версия из pip репы больше системной обновляем yt-dlp
if [[ $repo_ver > $sis_ver ]]; then
echo "repo_ver больше sis_ver"
paplay /usr/share/sounds/freedesktop/stereo/service-login.oga

#вместо password вводим пароль вашего пользователя
echo "$password" | sudo -S pip3 install -U yt-dlp
#если у вас sudo настроен без ввода пароля строку выше коментируем, а строку ниже раскоментируем
#sudo pip3 install -U yt-dlp
notify-send "yt-dlp" "ОБНОВЛЕН--с версии $sis_ver--до--$repo_ver"
   
    else
    paplay /usr/share/sounds/freedesktop/stereo/bell.oga
    notify-send "yt-dlp" "ВЕРСИЯ  АКТУАЛЬНА-- $sis_ver"
fi

десктоп файл тот же , но для удобства повторю его код тут , напоминаю его нужно поместить в ~/.config/autostart/
вместо /home/user в Exec= пишем своего пользователя

yt_dlp_upd.desktop

Код
[Desktop Entry]
Type=Application
Name=yt-dlp_upd
Exec=/home/user/.local/bin/yt-dlp_upd_advansed/yt_dlp_adw.sh
Categories=System;
« Последнее редактирование: 11 Сентябрь 2023, 21:26:31 от totiks2012 »

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #2 : 09 Сентябрь 2023, 08:33:44 »
я совершено упустил из внимания один немаловажный факт. У меня система с настроеным без парольным sudo. То есть если у вас sudo требует пароль то в скрипте  строка sudo pip3 install -U yt-dlp , должна быть echo "$password" | sudo -S pip3 install -U yt-dlp, вместо password пароль вашего пользователя, знаю что не хорошо светить паролем в скриптах, но мне автоматизация дороже. Сейчас займусь заменой этой строки в опубликованых скриптах.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34026
  • Репутация: +231/-0
    • PuppyRus-A
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #3 : 11 Сентябрь 2023, 10:55:39 »
На днях видел на форуме тему с публикацией об обновлении yt-dlp. Посмотрел а там решение на python. И не то что есть какие либо предубеждения к python, я просто в него не умею. И подумалось, а что если написать обновлялку на bash
На питоне сам yt-dlp. Мой обновлятор на bash. небольшая обвязка вокруг yt-dlp --update. Без pip
Т.е. Вы явно изобретаете велосипед и при этом перемудрили  ;)

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1725
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #4 : 11 Сентябрь 2023, 13:13:47 »
Без pip
Вполне солидарен. Лучше без него.
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #5 : 11 Сентябрь 2023, 14:22:45 »
На питоне сам yt-dlp. Мой обновлятор на bash. небольшая обвязка вокруг yt-dlp --update. Без pip
Честно содержимое пакета смотрел, вскользь скрипт не то что не нашел,а скорее не понял что к чему(yt-dlp-p-2023.07.06_64-au02.pfs) , и пошёл по пути того непонимающего который ничего не понял и потому сваял своё.

upd: посмотрел pfs еще раз, скрипт нашел ,но к сожалению не разобрался как это работает.

upd2: вот что значит плохо читать man , оказывается yt-dlp имеет свой встроенный обновлятор. Мдааа пожалуй точно велосипед. ...ну у него хоть колеса крутятся, и то радует иду изучать вопрос по теме yt-dlp --update.

upd3:
Хехе на эти грабли-бомбу наверно наступал не только я, спасибо большое действительно перемудрил, тут в свете полученных сведений о yt-dlp --update, совсем другой скрипт вырисовывается простенький, ... а я два дня ходил весь такой напыженый, стыдоба , ну да ладно буду для себя переделывать , раз уж вляпался в это :)
« Последнее редактирование: 11 Сентябрь 2023, 15:46:52 от totiks2012 »

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #6 : 11 Сентябрь 2023, 15:15:11 »
вот код без pip, спасибо вам еще раз.
-------------------------------------------------------------
--###--а вот этот скрипт можно брать--###--
-------------------------------------------------------------
Код
#!/bin/bash

# Получаем текущую версию yt-dlp
current_version="$(yt-dlp --version)"

# Проверяем наличие новой версии
if sudo yt-dlp --update | grep -q "New version available"; then
    echo "Новая версия доступна, обновляем yt-dlp..."
    sudo yt-dlp --update

    # Получаем новую версию yt-dlp
    new_version="$(yt-dlp --version)"
    notify-send "yt-dlp ОБНОВЛЕН" "С версии $current_version до $new_version"
else
    notify-send "yt-dlp" "АКТУАЛЕН--($current_version)"
fi
 

пойду домой сегодня не на пафосе, а стыдливо улыбаясь... но это много лучше, ибо истина дороже.
« Последнее редактирование: 11 Сентябрь 2023, 20:07:55 от totiks2012 »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1725
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #7 : 11 Сентябрь 2023, 15:38:22 »
пойду домой сегодня не на пафосе, а стыдливо улыбаясь...
Зачем? Получилось же
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5356
  • Репутация: +140/-1
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #8 : 11 Сентябрь 2023, 15:45:09 »
Цитата
На днях видел на форуме тему с публикацией об обновлении yt-dlp. Посмотрел а там решение на python.

Вот код от sfs, yt-dlp-p-2023.07.06_64-au02/usr/local/bin/yt-dlp_linux-update. Сразу видно, что это чистый bash и ничего кроме баша. Правда там черт ногу сломит, но это уже другой вопрос:

Код
#!/bin/ash
#230905 sfs
#[ "`mount |grep "`realpath /mnt/home` " |grep " type iso9660 "`" ] && echo "Run from iso - exit" && exit 1
yy=yt-dlp-p
#[ "`mount |grep $yy |grep -Ee '^/mnt/sr0/''`" ] && echo "sr0 ro" && exit 1
#sudo wget --no-check-certificate  https://yt-dl.org/downloads/latest/youtube-dl -O youtube-dl
#sudo chmod 755 youtube-dl
inet-test 5 || exit 1
#y=/usr/bin/yt-dlp_linux
y="`which yt-dlp`"
[ -e $y  ] || exit 1
v0="`$y --version`"
#sudo $y -U |grep "yt-dlp is up-to-date" && exit || v="`$y --version`"
sudo $y -U && v="`$y --version`" || exit 1
echo "$v0 -> $v"
[ "$v0" = "$v" ]] && echo "No update" && exit 1
p="`losetup  |awk '/'$yy'/ {print $6}'`"
sudo chmod 755 "$y"

sudo mv "$p" "$p.old" || exit 1
p2="`dirname "$p"`/$yy-"$v"_64-au01.pfs"
cd /tmp
sudo pfsrebuild "$p" -o "$p2"
[ -f "$p2" ] && ntf -i "`basename "$p"`" "обновлен до v.$v" || ntf -a "Проблемы с обновлением yt-dlp" "$p "
По сути, все обновление в скрипте основано на документированной функции самого приложения yt-dlp -U, остальное это проверки, пересборка модуля...



Вот это и имел ввиду sfs, когда писал:
Цитата
Вы явно изобретаете велосипед и при этом перемудрили 

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #9 : 11 Сентябрь 2023, 15:55:19 »
 :D вот за что я люблю этот форум, много много раз вам спасибо! Мне сегодня наука, я сделал вывод прежде чем пытаться писать что-то, нужно хорошенько по исследователь предмет и его округу, ...приду домой заменю  скрипт обновления yt-dlp, на новый.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5356
  • Репутация: +140/-1
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #10 : 11 Сентябрь 2023, 16:02:55 »
Кстати для sfs, строка 16 - или не хватает одной скобки, или одна лишняя. Учитывая же что это ash, явно второй случай :
Код
[ "$v0" = "$v" ]] && echo "No update" && exit 1

upd. Не знаю, как обходятся профи скриптописания, которые получают за это очень большие деньги. Возможно у них в наличии армия 'бесплатных рабов-тестировщиков'.  :) Но какие-то защиты должны быть от таких ошибок, или прогонять скрипт перед публикацией через shellcheck.
« Последнее редактирование: 11 Сентябрь 2023, 16:32:05 от krasnyh »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5356
  • Репутация: +140/-1
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #11 : 11 Сентябрь 2023, 16:14:57 »
И еще. В вирте (prar2210-23.05-x86_64) результат выглядит так (скрин), приходится жать Ctrl-c. А вот если добавить sleep 5, другой коленкор. )

Скрин.

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2579
  • Репутация: +33/-0
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #12 : 11 Сентябрь 2023, 17:49:25 »
:) когда-то мимоходом бегло глянул развитие Темы, а у меня как раз какой-то ytdl-скипт для какого-то просмотра не отрабатывал - уже думал ytdl-репа куда-то переехала.
Проверил обновление - вроде нормально. С той неполадкой не разбирался (не до того было)
-----------
зы
раньше собирал себе скрипт для установки и обновления ytdl, сейчас ставлю 'строкой  в терминале', а обновляю :
Код
# youtube-dl -U # выхлоп небольшой и читабельный даже на аглицком
( у меня на разных сборках 'youtube-dl'=симлинк на 'yt-dlp' , чтоб старые youtube-dl-скрипты не переписывать. # скорее есть и какие различия в параметрах/синтаксисах [ youtube-dl vs yt-dlp], но пока меня "не задевает")
-------
зызы
я про то, что иногда можно и в терме просто:
Код
# yt-dlp -U
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2579
  • Репутация: +33/-0
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #13 : 11 Сентябрь 2023, 17:58:26 »
зы
вспомнил, что когда-то перед обновлением ytdl, рядом бекапил существующий, но не помню причину сего деяния )
« Последнее редактирование: 11 Сентябрь 2023, 18:00:16 от knn »
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Онлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 898
  • Репутация: +24/-0
  • Автор темы
Re: Обновление yt-dlp с помощью bash скриптами
« Ответ #14 : 11 Сентябрь 2023, 18:01:16 »
я про то, что иногда можно и в терме просто:
Код

# yt-dlp -U
я так и делал, правда через pip, я просто не знал про yt-dlp -U я знал про pip install -U yt-dlp
« Последнее редактирование: 11 Сентябрь 2023, 18:17:23 от totiks2012 »