# Alle Songs, die Dieter gespielt hat, in eine bsaber-Playlist packen: 1. YouTube-API-key hier abholen: https://console.cloud.google.com/apis/credentials/key/ 2. YouTube-API-Kontingent ist knapp. Deshalb sollte jeder Request gecached werden. 3. Beatsaver-API-Kontingent hingegen ist endlos vorhanden. Also im Zweifelsfall einfach den letzten Befehl nochmal ausführen, das ist kein Problem. 4. Na gut ganz endlos ist es doch nicht, daher prüfen wir, ob wir gedrosselt wurden und versuchen dann den jeweiligen Download nochmal. 5. Manche Songs wurden auch wieder heruntergenommen. Daher durfte ich lernen, dass es in bash ein `continue 2` gibt. Coole Sache. Könnte sich die ein oder andere Sprache Mal eine Scheibe von abschneiden. ``` KEY="[YouTube-API-Key]" curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&key=$KEY' --header 'Accept: application/json' --compressed > dieter1.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter1.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter2.json && less dieter2.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter2.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter3.json && less dieter3.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter3.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter4.json && less dieter4.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter4.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter5.json && less dieter5.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter5.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter6.json && less dieter6.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter6.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter7.json && less dieter7.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter7.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter8.json && less dieter8.json curl 'https://youtube.googleapis.com/youtube/v3/search?part=id&channelId=UCbXjQecIReDgxsn7FUf4Tbw&maxResults=50&order=date&pageToken=$(jq -r ".nextPageToken" dieter8.json)&key=$KEY' --header 'Accept: application/json' --compressed > dieter9.json && less dieter9.json for i in $(seq 1 9); do for j in $(seq 0 49); do curl "https://youtube.googleapis.com/youtube/v3/videos?part=snippet&id=$(jq -r ".items[$j].id.videoId" dieter$i.json)&key=$KEY" --header 'Accept: application/json' --compressed > dieter-video$i$j.json; done; done for i in $(seq 1 9); do for j in $(seq 0 49); do jq -r ".items[0].snippet.description" dieter-video$i$j.json | grep -o -P "(https:\\/\\/beatsaver.com\\/beatmap\\/\\w*)" >> beatmaps.txt; done; done echo "{\"playlistTitle\": \"Dieter - gesammelte Werke\", \"playlistAuthor\": \"MaxMatti\", \"image\": \"\", \"songs\": [" > dieter.bplist; for i in $(cat beatmaps.txt); do echo "${i#"https://beatsaver.com/beatmap/"}"; while true; do curl "https://beatsaver.com/api/maps/detail/${i#"https://beatsaver.com/beatmap/"}" -A 'Wget/1.20.3 (linux-gnu)' -s > tmp.json; [ "$(jq -r ".hash" tmp.json)" != "null" ] && [ "$(jq -r ".hash" tmp.json)" != "" ] && break; [ "$(cat tmp.json)" = "Not Found" ] && continue 2; sleep 1; done; echo "{\"hash\": \"$(jq -r ".hash" tmp.json)\", \"songName\": \"$(jq -r ".metadata.songName" tmp.json)\"}," >> dieter.bplist; done; echo "]}" >> dieter.bplist; ```