[Ubuntu] [Bash] [YouTube] Jak sprawdzić czy jest nowy film na kanale

Nie wiem jak sprawdzić czy na poniższym kanale yt jest nowy film dla wybranej playlisty- link poniżej.

Jak to sprawdzę, to chcę pobrać film - z tym sobie poradzę.

Subskrybuj?

1 polubienie

@sensu: chcę aby to sprawdzanie było automatyczne (planuję użyć CRONa), nie chcę się logować ani subskrybować o ile to możliwe.

Skrypt który sprawdzi, że jest nowy filmik ma zwrócić link do niego.

Skoro “normalne” rozwiązania cię nie satysfakcjonują to Youtube udostępnia API - https://developers.google.com/youtube/v3/docs/search/list

Możesz zrobić aplikację, która z niego korzysta i odpalać przez CRONa.

Dzięki @kowgli.

Jest kilka jezyków ale nie widzę BASHa.

Oczywiście musisz użyć jakiegoś innego języka / narzędzia. W czystym Bashu nie połączysz się z web serwisem.

Możesz pokombinować.

https://www.google.pl/search?q=bash+call+json+web+service

Nie znam się na Youtube, ale najprostszym rozwiązaniem, dostępnym z basha, jest użycie cp (lub mv) dla poprzednio ściągniętego pliku (o nowej nazwie), pobranie interesującej strony przez curl do pliku o nowej nazwie, wywołanie cmp, i w zależności od wyniku cmp, wywołanie wall lub czegoś podobnego.

Jak zdobyć informacje, że plik się pojawił oraz zdobyć jego link?

Polecenie wget powinno pobrać plik.

Oj ludzie ludzie. Kombinujecie jak “koń pod górkę”, a rozwiązanie jest na wyciągnięcie ręki.

  1. Upewnij się, że masz paczkę zainstalowaną “notify-send”
  2. Zainstaluj paczkę “youtube-dl”
  3. Zapisz mój skrypt bash jako “notify-yt.sh
#!/bin/bash

#URL playlisty YOUTUBE
URL="https://www.youtube.com/watch?v=99JAI24Zd24&feature=youtu.be&list=PLOYHgt8dIdoymv-Wzvs8M-OsKFD31VTVZ"


if [ -f ~/kanal_YT.tmp ]; then

    ILE_LAST=$(cat ~/kanal_YT.tmp)
    ILE=$(youtube-dl -s --get-filename $URL | wc -l)
    
    if [ "$ILE" -gt "$ILE_LAST" ]; then

        notify-send "Powiadomienie" "Wykryto nowy filmik na kanale Youtube !" -t 10000
        echo $ILE > ~/kanal_YT.tmp
        
        NEW_VIDEO_ID=$(youtube-dl -s --playlist-items $ILE --get-id $URL)
        if zenity --question --text="Otworzyć nowe wideo YT: https://www.youtube.com/watch?v=$NEW_VIDEO_ID"; then xdg-open "https://www.youtube.com/watch?v=$NEW_VIDEO_ID"; fi
        
    else

        exit 0
        
    fi

else

    youtube-dl -s --get-filename $URL | wc -l > ~/kanal_YT.tmp

fi
  1. Nadaj mu prawa uruchamiania: chmod +x notify-yt.sh
  2. Utwórz zadanie crona:
    DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus ~/notify-yt.sh

Oczywiście zakładam, że skrypt jest w katalogu home użytkownika.
Liczbę “1000” zamień na ID swojego użytkownika: id -u $USER
(pewnie też będziesz miał 1000)
Display też sprawdź czy się zgadza: echo $DISPLAY - jeżeli nie to podmień.

Skrypt zlicza ilość filmików na podanym kanale YT i zapisuje do pliku.
Przy następnym wywołaniu sprawdza, czy ilość jest większa, jeżeli tak to pokazuje powiadomienie i zapamiętuje nową ilość w pliku. Jeżeli nie ma nowych plików to nic nie robi.

EDIT: zaktualizowałem - teraz też wyświetlane jest pytanie o to, czy otworzyć nowy filmi, ale wymagana jest paczka “zenity”, a także ewentualne zastąpienie xdg-open alternatywą dla danego środowiska graficznego.

1 polubienie

Dzięki @Domker.

Chcę aby skrypt konwertował do mp3 oraz avi i zapisywał w katalogu ~/yt/.

Powyższy skrypt zgłasza błąd jak poniżej.

*./yt.sh: line 12: notify-send: command not found
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused

Jakbyś czytał od punktu pierwszego to by działało.
Doinstaluj notify-send.

Racja.

Dzięki @Domker.

Mam błąd podczas instalacji.

E: Unable to locate package notify-send

1.Czy notify-send nie wyświetla dymków powiadomień w trybie graficznym? Nie używam tego nie środowiska lecz tylko konsoli. W zasadzie nie potrzebuje powiadomień, wystarczy automatyczne wykonanie zadania poniżej po stwierdzeniu że jest nowe nagranie.

  1. Chcę konwertować pliki do mp3 oraz avi.
https://www.youtube.com/user/MiroslawZelent/videos

lub

https://www.youtube.com/channel/UCzn6vAfspIcagLax1fck_jw/videos

:question:

chodzi o playlistę :wink: zły komentarz napisałem.

@Domker co zuwagami dotyczącymi mojego poprzedniego postu?

https://www.google.pl/search?q=youtube-dl+mp3
https://www.google.pl/search?q=youtube-dl+avi

Tak notify-send pokazuje dymki z powiadomieniami.
Jeżeli nie chcesz to wywal ze skryptu.
Dla mp3 (i mp4 video):
youtube-dl -k --format mp4 --extract-audio --audio-format mp3 "https://www.youtube.com/watch?v=$NEW_VIDEO_ID"

AVI oO?
Nie lepiej MP4 standardowo? Wtedy obyłoby się bez żadnej konwersji. W każdym razie mp4 (mpeg4) jest obsługiwany przez większość urządzeń.

Powyższą linijkę skryptu dodaj przed pytaniem lub po pytaniu zenity.
Możesz oczywiście na wzór pytania od otwarcie nowego wideo zrobić pytanko o pobranie/konwersję.
EDIT: do określenia lokalizacji zapisu możesz użyć parametru, albo po prostu przed poleceniem przejdź do odpowiedniego katalogu: cd ~/yt
Jeżeli chcesz mieć podgląd na postęp pobierania itp. to dodaj na końcu za _ID" znak spacja i &
Wtedy poleceniem jobs wyświetlisz zadnia ja fg NUMER_ZADANIA podglądniesz jaki jest postęp.

1 polubienie

Mam zodyfikowany plik od @Domker jak poniżej.

Poniżej ostrzeżenie i błąd.

Zanim weźmiesz się za modyfikacje skryptów bash najpierw poczytaj sobie kursy w internecie i naucz się porządnie składni i przede wszystkim odczytywania błędów.
:wink: To tylko taka drobna rada, bo to co dopisałeś nie ma w ogóle sensu :x:

#!/bin/bash

#URL playlisty YOUTUBE
URL="https://www.youtube.com/watch?v=99JAI24Zd24&feature=youtu.be&list=PLOYHgt8dIdoymv-Wzvs8M-OsKFD31VTVZ"


if [ -f ~/kanal_YT.tmp ]; then

    ILE_LAST=$(cat ~/kanal_YT.tmp)
    ILE=$(youtube-dl -s --get-filename $URL | wc -l)
    
    if [ "$ILE" -gt "$ILE_LAST" ]; then

        echo $ILE > ~/kanal_YT.tmp
        
        NEW_VIDEO_ID=$(youtube-dl -s --playlist-items $ILE --get-id $URL)
        if zenity --question --text="Otworzyć nowe wideo YT: https://www.youtube.com/watch?v=$NEW_VIDEO_ID"; then xdg-open "https://www.youtube.com/watch?v=$NEW_VIDEO_ID"; fi
        
        [ ! -d ~/yt ] &&  mkdir ~/yt

        if zenity --question --text="Zapisać nowe wideo do plików mp4 (video) i mp3 (audio)?"; then cd ~/yt && youtube-dl -k --format mp4 --extract-audio --audio-format mp3 "https://www.youtube.com/watch?v=$NEW_VIDEO_ID"; fi
        
    else

        exit 0
        
    fi

else

    youtube-dl -s --get-filename $URL | wc -l > ~/kanal_YT.tmp

fi