Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Audacious - zapis historii odtwarzania radio online do logu
#1
0
Dzień dobry. :)

W trakcie codziennej pracy na Mincie często słucham muzyki ze stacji online. Bardzo często trafiam na ciekawe utwory, do których chciałbym wrócić. Wpadłem na pomysł, że można przecież ściągnąć historię playlisty takiej stacji do pliku txt w formie logu. W jaki sposób mogę to zrobić i czy to w ogóle możliwe?

Zapytałem się AI i dostałem sugestię, aby stworzyć taki skrypt w Bash'u, a następnie nadać mu uprawnienia wykonalności i uruchomić co zrobiłem z poziomu terminala:

Kod:
#!/bin/bash

# Adres URL strumienia radiowego
STREAM_URL="przykładowy link"

# Plik, do którego będą zapisywane metadane
LOG_FILE="playlist_log.txt"

# Funkcja do przechwytywania metadanych
fetch_metadata() {
    curl -s -H "Icy-MetaData: 1" "$STREAM_URL" | \
    while IFS= read -r -n1 char; do
        if [[ "$char" == $'\x0d' ]]; then
            # Znaleziono koniec linii metadanych
            break
        fi
        echo -n "$char"
    done
}

# Główna pętla skryptu
while true; do
    # Przechwyć metadane
    metadata=$(fetch_metadata)

    # Jeśli metadane zawierają tytuł, zapisz je do pliku
    if [[ "$metadata" == *"StreamTitle="* ]]; then
        title=$(echo "$metadata" | grep -oP 'StreamTitle=\K[^;]*')
        if [[ -n "$title" ]]; then
            echo "$(date '+%Y-%m-%d %H:%M:%S'): $title" >> "$LOG_FILE"
            echo "Zapisano: $title"
        fi
    fi

    # Poczekaj chwilę przed kolejnym sprawdzeniem
    sleep 10
done

Oczywiście, nothing happened. :D Niestety, jeszcze nie znam i nie rozumiem skryptów Bash. W "przykładowy link" wkleiłem link do streamu przykładowej stacji (np. http://188.40.109.122:8000/ices2).
Odpowiedz
#2
1
Better response on post RE: Audacious - zapis historii odtwarzania radio online do logu
Kod:
audtool --current-song
Puść sobie w pętli co 10 sekund, sprawdzaj czy tytuł się nie pokrywa z już przechwyconym.

Tak na szybko bez sprawdzenia, to np. tak
Kod:
#!/bin/bash

# Adres URL strumienia radiowego
STREAM_URL="przykładowy link"

# Plik, do którego będą zapisywane metadane
LOG_FILE="playlist_log.txt"

#
metadata = "Playlista"

# Główna pętla skryptu
while true; do
    # Przechwyć metadane
    lastmetadata = $metadata
    metadata=`audtool --current-song`
    if [[ $lastmetadata == $metadat ]]; then
    echo "Tytuł już zapisano wczesniej: $metadata"
    else
    echo "$(date '+%Y-%m-%d %H:%M:%S'): $metadata" >> "$LOG_FILE"
    echo "Nowy tytuł zapisano: $metadata"
    fi

    # Poczekaj chwilę przed kolejnym sprawdzeniem
    sleep 10
done
Odpowiedz
#3
0
Dziękuję za pomoc. Nawet nie zdawałem sobie sprawy z istnienia audtool'a. Znów popracowałem z AI. Zastosowałem się do Twojej rady z pętlą i powstał taki skrypt:


Kod:
#!/bin/bash

# Plik, do którego będą zapisywane zmiany
LOG_FILE="audacious_changes.log"

# Pętla nieskończona
while true; do
    # Pobierz aktualny tytuł utworu
    current_song=$(audtool --current-song-tuple-data title)

    # Sprawdź, czy tytuł się zmienił
    if [[ "$current_song" != "$previous_song" ]]; then
        # Zapisz nowy tytuł do pliku
        echo "$(date '+%Y-%m-%d %H:%M:%S'): $current_song" >> "$LOG_FILE"
        echo "Zapisano: $current_song"
        previous_song="$current_song"
    fi

    # Poczekaj 5 sekund przed kolejnym sprawdzeniem
    sleep 5
done

Zmieniłem tylko tę wartość: "audtool --current-song-tuple-data title" jest IMO kluczowa, bo zgodnie z manualem audtool'a pozwala wyświetlić wybraną metadanę (np. tytuł, artystę itp). W moim przypadku układ metadanych jest taki, że w ID tagach wykonawca i tytuł utworu jest zapisany jako "title", a nazwa stacji to "artist" więc takie formatowanie danych pasuje. Smile
Sprawdzę też Twoją propozycję i... w końcu wezmę się za naukę Bash'a. Smile
Odpowiedz
#4
1
Better response on post RE: Audacious - zapis historii odtwarzania radio online do loguJako osoba która od lat musi zawodowo pisać skrypty do basha zrobiłbym tak:
Kod:
watch -t -n5 "date '+%Y-%m-%d %H:%M:%S: ' | tr '\n' '\t'; audtool --current-song-tuple-data title" 2>&1 | tee audacious_changes.log
tylko to bez sensu wrzuca pokolorowaną składnie.
Więc najprościej:
Kod:
while true; do date '+%Y-%m-%d %H:%M:%S: ' | tr '\n' '\t'; audtool --current-song-tuple-data title; sleep 5; done >> audacious_changes.log
z podglądem live:
Kod:
tail -f audacious_changes.log
Osobiście wrzuciłbym sobie do bazy sqlite.
[Obrazek: userbar.png]
Prowadzę to forum od roku 2007. Przez ten czas projekt minta bardzo negatywnie się zmienił, stąd mogą w moich postach być opinie z którymi można się nie zgadzać.
Odpowiedz
#5
1
Better response on post RE: Audacious - zapis historii odtwarzania radio online do loguOd ogółu do szczegółu, jakby tak jeszcze zrobić z tego wtyczkę do audacious ... taki luźny pomysł.
Odpowiedz


Skocz do:




Użytkownicy przeglądający ten wątek: 1 gości