This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| linux:ubuntu:spotifymusictodatabase [2023/01/18 15:17] – lunetikk | linux:ubuntu:spotifymusictodatabase [2023/01/18 16:01] (current) – lunetikk | ||
|---|---|---|---|
| Line 112: | Line 112: | ||
| ADD CONSTRAINT `track_ibfk_2` FOREIGN KEY (`album_id`) REFERENCES `album` (`album_id`); | ADD CONSTRAINT `track_ibfk_2` FOREIGN KEY (`album_id`) REFERENCES `album` (`album_id`); | ||
| + | </ | ||
| + | |||
| + | ===== Script ===== | ||
| + | |||
| + | ==== Bashscript ==== | ||
| + | |||
| + | <code bash copySpotifyinSQL.sh> | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | |||
| + | #Path to logfile | ||
| + | LOGPATH=/ | ||
| + | |||
| + | #Login for MYSQL | ||
| + | LOGIN=" | ||
| + | |||
| + | #Database | ||
| + | DB=spotifymusic | ||
| + | |||
| + | TMPFILE=/ | ||
| + | WEBFILE=/ | ||
| + | WEBFILE2=/ | ||
| + | |||
| + | ACCESSTOKENFILE="/ | ||
| + | ACCESSTOKEN=`jq -r " | ||
| + | BASICAUTH=" | ||
| + | REFRESH_TOKEN=" | ||
| + | |||
| + | # | ||
| + | |||
| + | GET_CURRENT_TRACK_INFO () { | ||
| + | |||
| + | OFFLINE=`cat $TMPFILE | jq -r ' | ||
| + | |||
| + | #define array length | ||
| + | ARTISTNUMBER=`cat $TMPFILE | jq ' | ||
| + | |||
| + | #artists to array | ||
| + | if [ -z " | ||
| + | then | ||
| + | ARTISTNUMBER=" | ||
| + | fi | ||
| + | |||
| + | if [ " | ||
| + | declare -ga ARTISTARRAY=() | ||
| + | for ((i=1; i< | ||
| + | j=$(($i-1)) | ||
| + | ARTISTS=`cat $TMPFILE | jq -r " | ||
| + | ARTISTARRAY+=(" | ||
| + | done | ||
| + | echo ${ARTISTARRAY[0]} | ||
| + | echo ${ARTISTARRAY[1]} | ||
| + | printf -v ARTISTARRAYOUTPUT ' | ||
| + | else | ||
| + | ARTIST=`cat $TMPFILE | jq -r ' | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | export ARTISTSPOTIFYURL=`cat $TMPFILE | jq -r ' | ||
| + | |||
| + | export TITLE=`cat $TMPFILE | jq -r ' | ||
| + | export TITLENUMBER=`cat $TMPFILE | jq -r ' | ||
| + | export TITLEPOPULARITY=`cat $TMPFILE | jq -r ' | ||
| + | export TITLESPOTIFYURL=`cat $TMPFILE | jq -r ' | ||
| + | export TITLESPOTIFYPREVIEWURL=`cat $TMPFILE | jq -r ' | ||
| + | |||
| + | export ALBUM=`cat $TMPFILE | jq -r ' | ||
| + | export ALBUMTYPE=`cat $TMPFILE | jq -r ' | ||
| + | export ALBUMTRACKS=`cat $TMPFILE | jq -r ' | ||
| + | export ALBUMSPOTIFYURL=`cat $TMPFILE | jq -r ' | ||
| + | export ALBUMRELEASEDATE=`cat $TMPFILE | jq -r ' | ||
| + | export ALBUMIMG=`cat $TMPFILE | jq -r ' | ||
| + | |||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | GET_SPOTIFY_TRACK () { | ||
| + | curl -X " | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | CHECK_TOKEN () { | ||
| + | grep -i '" | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | REFRESH_TOKEN () { | ||
| + | curl -H " | ||
| + | ACCESSTOKEN=`jq -r " | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | WRITE_TO_WEBSITE () { | ||
| + | |||
| + | echo "" | ||
| + | |||
| + | #sometimes $ARTISTS was empty, this is the workaround, might be fixed in the meantime | ||
| + | WHYUNOWORKIN=$(cat / | ||
| + | |||
| + | if [ -z " | ||
| + | then | ||
| + | OFFLINE=" | ||
| + | fi | ||
| + | |||
| + | if [ " | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "</ | ||
| + | echo "< | ||
| + | echo "< | ||
| + | if [ -z " | ||
| + | echo "< | ||
| + | else | ||
| + | echo "< | ||
| + | fi | ||
| + | echo "< | ||
| + | echo "</ | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "</ | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "</ | ||
| + | echo "</ | ||
| + | echo "</ | ||
| + | else | ||
| + | echo "< | ||
| + | echo "< | ||
| + | echo "Iam not listening to music right now..." | ||
| + | echo "</ | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | WRITE_TO_MYSQL () { | ||
| + | |||
| + | #wanted to use the comparison below but it didnt work. maybe someone knows how to fix it? | ||
| + | # | ||
| + | #If a FILE is ' | ||
| + | |||
| + | HASHONE=$(md5sum $WEBFILE | cut -d " " -f1) | ||
| + | HASHTWO=$(md5sum $WEBFILE2 | cut -d " " -f1) | ||
| + | |||
| + | if [ " | ||
| + | then # if status is equal to 1, then execute code | ||
| + | |||
| + | DBTRACK=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | DBALBUM=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | |||
| + | if [ " | ||
| + | for ((i = 0; i < ${# | ||
| + | do | ||
| + | DBARTIST=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | if [ -z " | ||
| + | then | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO artist (artist_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | done | ||
| + | else | ||
| + | echo " | ||
| + | echo $ARTIST | ||
| + | DBARTIST=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | if [ -z " | ||
| + | then | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO artist (artist_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | if [ " | ||
| + | DBARTISTNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | else | ||
| + | DBARTISTNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | fi | ||
| + | |||
| + | if [ -z " | ||
| + | then | ||
| + | if [ " | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO album (album_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | else | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO album (album_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | DBALBUMNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | |||
| + | if [ -z " | ||
| + | then | ||
| + | if [ " | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO track (track_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | else | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO track (track_name, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | DBTRACKNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | DBALBUMTRACK=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | |||
| + | # | ||
| + | if [ " | ||
| + | then | ||
| + | for ((i = 0; i < ${# | ||
| + | do | ||
| + | DBARTISTNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | DBARTISTTRACK=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | if [ -z " | ||
| + | then | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO connectartisttrack (artist_id, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | done | ||
| + | else | ||
| + | DBARTISTNEW=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | DBARTISTTRACK=$(mysql --login-path=$LOGIN -D $DB -se " | ||
| + | if [ -z " | ||
| + | then | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO connectartisttrack (artist_id, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | if [ -z " | ||
| + | then | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO connectalbumtrack (album_id, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | |||
| + | #played is not yet fixed for multiple artists and just uses the first one | ||
| + | if [ " | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO played (artist_id, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | else | ||
| + | mysql --login-path=$LOGIN -D $DB << EOFMYSQL | ||
| + | INSERT INTO played (artist_id, | ||
| + | VALUES (' | ||
| + | EOFMYSQL | ||
| + | fi | ||
| + | |||
| + | #copy webfile to webfile2 for comparison in the next run | ||
| + | cp -a $WEBFILE $WEBFILE2 | ||
| + | |||
| + | fi | ||
| + | } | ||
| + | |||
| + | # | ||
| + | |||
| + | GET_SPOTIFY_TRACK | ||
| + | CHECK_TOKEN | ||
| + | |||
| + | LASTSTATUS=`echo $?` | ||
| + | |||
| + | if [ " | ||
| + | REFRESH_TOKEN | ||
| + | GET_SPOTIFY_TRACK | ||
| + | fi | ||
| + | |||
| + | GET_CURRENT_TRACK_INFO | ||
| + | WRITE_TO_WEBSITE | ||
| + | WRITE_TO_MYSQL | ||
| + | </ | ||
| + | |||
| + | ==== Automation ==== | ||
| + | |||
| + | The bashscript can be automated via crontab (example runs every 2 minutes). | ||
| + | |||
| + | < | ||
| + | */2 * * * * / | ||
| </ | </ | ||