#!/bin/rc # thanks to ckstep for resurrecting this & fixing it up # data matches 'https://[^.]+\.bandcamp.com/(track|album)/[^ /]+' # plumb start window -scroll bandcamp $data if(! ~ $1 https://?*.bandcamp.com/^(track album)^/?*){ echo 'usage: bandcamp https://artist.bandcamp.com/(track|album)/name' >[1=2] exit usage } FILE=`{echo $1 | sed 's/\?.*//'} echo $FILE {echo $FILE; hget $FILE} | awk ' BEGIN{ getline sub("^https:/", "/tmp/mp3") if(sub("\.bandcamp\.com/track", "/singles")){ single = $0 system("mkdir -p `{basename -d "single"}") print "single"single; } else{ sub("\.bandcamp\.com/album", "") dir = $0 system("mkdir -p "dir) } RS = "{" } !single && /"@type":"ListItem"/{n++} !single && match($0, /"@id":"[^"]+\/track\/[^\/"]+/) && n{ track[n] = substr($0, RSTART, RLENGTH) sub(".+/", "", track[n]) } /mp3-128/ && match($0, "http.+p=.+ts=.+token=[0-9a-zA-Z_]+"){ src=substr($0,RSTART,RLENGTH) gsub("&","\\&",src) if(single){ print "track: "single".mp3" system("hget ''"src"'' > "single".mp3") } else{ url[++r] = src } } match($0, /"text":"[^"]+/){ lyr = substr($0, RSTART + 8, RLENGTH - 8) gsub(/\\"/, "\"", lyr) gsub(/\\r\\n/, "\n", lyr) if(!single) lyrics[n] = lyr } match($0, //){ src = substr($0, RSTART + 28, RLENGTH - 30) match(src, /\.[^.]+$/) if(single) art = single substr(src, RSTART, RLENGTH) else art = dir"/art"substr(src, RSTART, RLENGTH) print "art: "art system("hget ''"src"'' > "art) } END{ if(single){ out = single".txt" if(info){ print "single info: "out print info > out } if(lyr){ print "lyrics: "lyr print lyr >> out } } else{ if(info){ out = dir"/info.txt" print "album info: "out print info > out } if(n > 99) fmt = "%s/%03d_%s" else if(n > 9) fmt = "%s/%02d_%s" else fmt = "%s/%d_%s" for(i = 1; i <= n; i++){ out = sprintf(fmt".mp3", dir, i, track[i]) print "track: "out print "url: "url[i] system("hget ''"url[i]"'' > "out) if(lyrics[i]){ out = sprintf(fmt".txt", dir, i, track[i]) print "lyrics: "out print lyrics[i] > out } } } } '