Skip to content

Instantly share code, notes, and snippets.

@MaxMatti
Last active April 24, 2021 13:58
Show Gist options
  • Save MaxMatti/e8e690d1250daabd86a0e9db4e3cbdb9 to your computer and use it in GitHub Desktop.
Save MaxMatti/e8e690d1250daabd86a0e9db4e3cbdb9 to your computer and use it in GitHub Desktop.
Alle Songs, die Dieter gespielt hat, in eine bsaber-Playlist packen

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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment