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


(Otak) #1

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ę.


(sensu) #2

Subskrybuj?


(Otak) #3

@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.


(kowgli) #4

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.


(Otak) #5

Dzięki @kowgli.

Jest kilka jezyków ale nie widzę BASHa.


(kowgli) #6

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


(nintyfan) #7

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.


(Otak) #8

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


(Otak) #9

Polecenie wget powinno pobrać plik.


(Domker) #10

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.


(Otak) #11

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


(Domker) #12

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


(Otak) #13

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.

(krystian3w) #14
https://www.youtube.com/user/MiroslawZelent/videos

lub

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

:question:


(Domker) #15

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


(Otak) #16

@Domker co zuwagami dotyczącymi mojego poprzedniego postu?


(krystian3w) #17

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


(Domker) #18

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.


(Otak) #19

Mam zodyfikowany plik od @Domker jak poniżej.

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


(Domker) #20

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