-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrefresh_all_data
executable file
·111 lines (90 loc) · 4.06 KB
/
refresh_all_data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env bash
set -e
SPOTIFY_CLIENT_ID=$1
SPOTIFY_CLIENT_SECRET=$2
SOURCE_FILE=$3
if [ $# -le 3 ] && [ $# -ge 4 ]; then
echo "Usage: $0 <client_id> <client_secret> <input_file> [output_dir]"
exit 1
fi
# Set the output folder if it is not supplied
if [ -z "$4" ]; then
OUTPUT_DIR="output"
else
OUTPUT_DIR=$4
fi
if [ ! -f "$SOURCE_FILE" ]; then
echo "The file '$SOURCE_FILE' needs to exist. It should contain a JSON array of objects that are valid entry defintions. Please see the readme file for details" >&2
exit 1
fi
filter_by_id() {
local albums="$1"
local ids="$2"
echo "$albums" | jq --argjson excludes "$ids" 'map(select(.id | IN($excludes[] | tostring) | not))'
}
filter_by_name() {
local inputs="$1"
local excludes="$2"
jq --argjson excludes "$excludes" '
map(select(.name as $name | $excludes | any(. as $exclude | $name | contains($exclude)) | not))
' <<< "$inputs"
}
ACCESS_TOKEN=$(source ./login "$SPOTIFY_CLIENT_ID" "$SPOTIFY_CLIENT_SECRET")
echo "Login successful"
rm -rf "$OUTPUT_DIR"
mkdir "$OUTPUT_DIR"
jq -c '.[]' "$SOURCE_FILE" | while IFS= read -r entry; do
ITEM_ID=$(jq -r '.id' <<< "$entry")
TYPE=$(jq -r '.type' <<< "$entry")
IGNORE_IDS=$(jq -r '.ignoreIds' <<< "$entry")
if [[ -z "${IGNORE_IDS}" || "${IGNORE_IDS}" == "null" ]]; then
IGNORE_IDS="[]"
fi
IGNORE_STRINGS=$(jq -r '.ignoreShowWithStrings' <<< "$entry")
if [[ -z "${IGNORE_STRINGS}" || "${IGNORE_STRINGS}" == "null" ]]; then
IGNORE_STRINGS="[]"
fi
mkdir "$OUTPUT_DIR/$ITEM_ID"
if [ "$TYPE" = "playlist" ]; then
PLAYLIST=$(source ./playlist "$ACCESS_TOKEN" "$ITEM_ID")
ARTIST_NAME=$(jq -r '.artistName' <<< "$PLAYLIST")
PLAYLIST_NAME=$(jq -r '.playlistName' <<< "$PLAYLIST")
echo "Playlist is: $PLAYLIST_NAME"
echo "Main artist is: $ARTIST_NAME"
PLAYLIST_IMAGES=$(jq -r '.playlistImages' <<< "$PLAYLIST")
ALBUMS=$(jq -r '.albums' <<< "$PLAYLIST")
FILTERED_ALBUMS=$(filter_by_id "$ALBUMS" "$IGNORE_IDS")
ADDITIONAL_ARTIST_DETAILS=$(jq -n --arg artist_name "$ARTIST_NAME" --argjson playlist_images "$PLAYLIST_IMAGES" '{name: $artist_name, images: $playlist_images}')
ARTIST_DETAILS=$(jq -n -c --argjson objA "$entry" --argjson objB "$ADDITIONAL_ARTIST_DETAILS" '$objA + $objB')
cat <<< "${ARTIST_DETAILS}" > "$OUTPUT_DIR/${ITEM_ID}/artist"
cat <<< "${FILTERED_ALBUMS}" > "$OUTPUT_DIR/${ITEM_ID}/albums"
elif [ "$TYPE" = "artist" ]; then
ADDITIONAL_ARTIST_DETAILS=$(source ./artist "$ACCESS_TOKEN" "$ITEM_ID")
ARTIST_DETAILS=$(jq -n -c --argjson objA "$entry" --argjson objB "$ADDITIONAL_ARTIST_DETAILS" '$objA + $objB')
ARTIST_NAME=$(echo "$ARTIST_DETAILS" | jq -r .name)
echo "Artist is: $ARTIST_NAME"
ALBUMS=$(source ./albums "$ACCESS_TOKEN" "$ITEM_ID")
echo "Filters are: $IGNORE_IDS"
echo "And: $IGNORE_STRINGS"
FILTERED_ALBUMS=$(filter_by_id "$ALBUMS" "$IGNORE_IDS")
FILTERED_ALBUMS=$(filter_by_name "$ALBUMS" "$IGNORE_STRINGS")
cat <<< "${ARTIST_DETAILS}" > "$OUTPUT_DIR/${ITEM_ID}/artist"
cat <<< "${FILTERED_ALBUMS}" > "$OUTPUT_DIR/${ITEM_ID}/albums"
elif [ "$TYPE" = "show" ]; then
SHOW=$(source ./show "$ACCESS_TOKEN" "$ITEM_ID")
ARTIST_NAME=$(jq -r '.artistName' <<< "$SHOW")
SHOW_NAME=$(jq -r '.showName' <<< "$SHOW")
echo "Show is: $SHOW_NAME"
echo "Main artist is: $ARTIST_NAME"
SHOW_IMAGES=$(jq -r '.showImages' <<< "$SHOW")
ALBUMS=$(jq -r '.episodes' <<< "$SHOW")
FILTERED_ALBUMS=$(filter_by_id "$ALBUMS" "$IGNORE_IDS")
ADDITIONAL_ARTIST_DETAILS=$(jq -n --arg artist_name "$SHOW_NAME" --argjson show_images "$SHOW_IMAGES" '{name: $artist_name, images: $show_images}')
ARTIST_DETAILS=$(jq -n -c --argjson objA "$entry" --argjson objB "$ADDITIONAL_ARTIST_DETAILS" '$objA + $objB')
cat <<< "${ARTIST_DETAILS}" > "$OUTPUT_DIR/${ITEM_ID}/artist"
cat <<< "${FILTERED_ALBUMS}" > "$OUTPUT_DIR/${ITEM_ID}/albums"
else
echo "Unknown type: $TYPE, skipping entry"
fi
echo "Getting details for id $ITEM_ID"
done