#!/bin/bash ######################################################## # Get data from spotify api # ######################################################## sudo rm -rf _temp && mkdir _temp && cd _temp; pwd && ls FILE=../playlist.json if [ -f "$FILE" ]; then echo "$FILE exists." cp ../playlist.json ./ else echo "$FILE does not exist" ID=APPLICATION_ID TOKEN=TOKEN_HERE curl -X "GET" "https://api.spotify.com/v1/playlists/$ID/tracks" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" > playlist.json fi ######################################################## # Create temporary text files # ######################################################## pwd && ls # Release dates cat playlist.json | jq -r ".items[].track.album.release_date" > release_dates.txt # Artists cat playlist.json | jq -r ".items[].track.album.artists[0].name" > artists.txt # Images cat playlist.json | jq -r ".items[].track.album.images[0].url" > images.txt # Album artists cat playlist.json | jq -r ".items[].track.album.artists[0].name" > album_artists.txt # Track names cat playlist.json | jq -r ".items[].track.name" > names.txt # Track numbers cat playlist.json | jq -r ".items[].track.track_number" > track_numbers.txt # Albums cat playlist.json | jq -r ".items[].track.album.name" > albums.txt ############################################################ SONG_COUNT=$(wc -l names.txt | awk '{ print $1 }'); ############################################################ # Define line function # ############################################################ function line(){ sed "$1q;d" "$2"; } function silent(){ `$@ >/dev/null 2>&1` } ############################################################ # Iterate over lines of files # ############################################################ # TODO: add song count again for ((i=1;i<=$SONG_COUNT;i++)); do sudo rm -rf *.mp3 NAME=$(line "$i" names.txt) TRACK_NUM=$(line "$i" track_numbers.txt) ARTIST=$(line "$i" artists.txt) IMAGE=$(line "$i" images.txt) ALBUM_ARTIST=$(line "$i" album_artists.txt) ALBUM=$(line "$i" albums.txt) # Get release year RELEASE_DATE=$(line "$i" release_dates.txt | cut -d "-" -f1) echo "Downloading song $i/$SONG_COUNT: $NAME ($RELEASE_DATE)" sudo youtube-dl \ --quiet \ -f bestaudio \ -x \ --audio-format mp3 \ -o "_$NAME.mp3" \ "ytsearch1:$NAME $ARTIST $ALBUM $RELEASE_DATE" pwd && ls echo "Adding metadata to $NAME" sudo ffmpeg -i "_$NAME.mp3" \ -hide_banner -loglevel error \ -nostdin -y \ -c:a libmp3lame \ -metadata "title=$NAME" \ -metadata "artist=$ARTIST" \ -metadata "album_artist=$ALBUM_ARTIST" \ -metadata "album=$ALBUM" \ -metadata "year=$RELEASE_DATE" \ -metadata "date=$RELEASE_DATE" \ -metadata "track=$TRACK_NUM" \ "__$NAME.mp3" echo "Adding cover image to $NAME" sudo ffmpeg -i "__$NAME.mp3" \ -hide_banner -loglevel error \ -nostdin \ -y \ -i $IMAGE \ -c:a copy \ -c:v copy -map 0:0 -map 1:0 -id3v2_version 3 \ -metadata:s:v title="Album cover" \ -metadata:s:v comment="Cover (front)" "$NAME.mp3" sudo rm "__$NAME.mp3" sudo rm "_$NAME.mp3" sudo mv "$NAME.mp3" ../ done sudo rm *.txt; mv playlist.json ../ cd ../