#!/bin/bash for letter in \# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do # Construct letterpage if [ "$letter" = "#" ]; then letterpage="https://vimm.net/vault/?p=list&system=SNES§ion=number" else letterpage="https://vimm.net/vault/SNES/$letter" fi echo "$letterpage"; echo "=======================" # Base URL (should be without trailing slash) baseURL="https://vimm.net" # find all gamepages in a letterpage for gamepage in $(curl -s "$letterpage" | grep 'onmouseover="buildTooltip' | awk -F 'href="' '{print $2}' | cut -d '"' -f1); do # Construct the gamepage URL gamepage="$baseURL$gamepage" # Find the mediaID while true; do id=$(curl -s "$gamepage" | grep 'fileSize\[' | head -n 1 | cut -d \[ -f2 | cut -d \] -f1) if [ -z "$id" ]; then echo "\$id is empty. Retrying ..." else echo "\$id is $id" break fi done # Construct URL URL="https://download.vimm.net/download/?mediaId=$id" echo "Visiting $URL" # Find the filename while true; do filename=$(curl -s -D - \ -H "Referer: https://vimm.net/" \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" \ "$URL" | grep "Content-Disposition" | awk -F '=' '{print substr($2,2,length($2)-3)}') if [ -z "$filename" ]; then echo "\$filename is empty. Retrying ..." else echo "\$filename is $filename" break fi done # Download it while true; do curl -s \ -H "Referer: https://vimm.net/" \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" \ "$URL" --output "$filename" # Test the file if test -f "$filename"; then echo "$filename has been downloaded" # Check if thefile is zip if file "$filename" | grep 'Zip archive data' &>/dev/null; then echo "$filename is a valid Zip archive" break else echo "$filename is not a zip archive. Retrying ..." fi else echo "$filename has not been downloaded. Retrying ..." fi done echo "---" done done