#!/bin/bash # Author: drpaneas@gmail.com if [ $# -eq 0 ]; then echo "No arguments supplied. Example: ./script.sh https://vimm.net/vault/GB" exit 1 fi arg="$1" console=$(echo "$arg" | awk -F '/' '{print $(NF)}') 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&action=settings§ion=%23&system=$console&v_us=1" else letterpage="https://vimm.net/vault/?p=list&action=settings§ion=$letter&system=$console&v_us=1" 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 'a href="\/vault' | awk -F 'href="' '{print $2}' | cut -d '"' -f1 | grep -v '?p=' | grep -v "vault/NES\|vault/$console"); do # Construct the gamepage URL gamepage="$baseURL$gamepage" skipit=false retries=0 # 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 ...$retries" ((retries = retries + 1)) if [[ "$retries" -gt 10 ]]; then skipit=true retries=0 break fi else echo "\$id is $id" break fi done if [ "$skipit" = true ]; then echo 'Giving up on this one...' continue fi # Construct URL URL="https://download.vimm.net/download/?mediaId=$id" echo "Visiting $URL" # Check there is 404, so skip it skipit=false retries=0 # 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 ... $retries" ((retries = retries + 1)) if [[ "$retries" -gt 10 ]]; then skipit=true retries=0 break fi else echo "\$filename is $filename" break fi done if [ "$skipit" = true ]; then echo 'Giving up on this one...' continue fi # 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\|7-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