Skip to content

Instantly share code, notes, and snippets.

@shawnli87
Forked from MCOfficer/README.md
Last active April 9, 2024 10:03
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save shawnli87/d416b7c9030293cabfcf4c225cdc5a15 to your computer and use it in GitHub Desktop.
Save shawnli87/d416b7c9030293cabfcf4c225cdc5a15 to your computer and use it in GitHub Desktop.
Bash script to download files from gofile.io
#!/bin/bash
url="$1"
#prompt for url if not provided
until [ ! -z "$url" ] ; do
read -p "url=" url
done
id=$(sed 's|.*gofile.io/d/||g' <<< "$url")
echo "Downloading $id"
#get guest account token for url and cookie
token=$(curl -s 'https://api.gofile.io/createAccount' | jq -r '.data.token' 2>/dev/null)
[ "$?" -ne 0 ] && echo "Creating guest account failed, please try again later"
#get website token for url
websiteToken=$(curl -s 'https://gofile.io/dist/js/alljs.js' | grep 'fetchData.wt' | awk '{ print $3 }' | jq -r)
[ "$?" -ne 0 ] && echo "Getting website token failed, please try again later"
#get content info from api
resp=$(curl 'https://api.gofile.io/getContent?contentId='"$id"'&token='"$token"'&wt='"$websiteToken"'&cache=true' 2>/dev/null)
code="$?"
#prompt for password if required
if [[ $(jq -r '.status' <<< "$resp" 2>/dev/null) == "error-passwordRequired" ]] ; then
until [ ! -z "$password" ] ; do
read -p "password=" password
password=$(printf "$password" | sha256sum | cut -d' ' -f1)
resp=$(curl 'https://api.gofile.io/getContent?contentId='"$id"'&token='"$token"'&wt='"$websiteToken"'&cache=true&password='"$password" 2>/dev/null)
code="$?"
done
fi
#verify content info was retrieved successfully
[ "$code" -ne 0 ] && echo "URL unreachable, check provided link" && exit 1
#create download folder
mkdir "$id" 2>/dev/null
cd "$id"
#load the page once so download links don't get redirected
curl -H 'Cookie: accountToken='"$token" "$url" -o /dev/null 2>/dev/null
[ "$?" -ne 0 ] && echo "Loading page failed, check provided link"
for i in $(jq '.data.contents | keys | .[]' <<< "$resp"); do
name=$(jq -r '.data.contents['"$i"'].name' <<< "$resp")
url=$(jq -r '.data.contents['"$i"'].link' <<< "$resp")
#download file if not already downloaded
if [ ! -f "$name" ] ; then
echo
echo "Downloading $name"
curl -H 'Cookie: accountToken='"$token" "$url" -o "$name"
[ "$?" -ne 0 ] && echo "Downloading ""$filename"" failed, please try again later" && rm "$filename"
fi
done
echo
echo
echo "Note: gofile.io is entirely free with no ads,"
echo "you can support it at https://gofile.io/donate"
@shawnli87
Copy link
Author

is there a way to download a certain file within the folder? using the certain content id?

@tmatzxzone The whole point of using the script is to download multiple files at the same time. Why wouldn't you just use the browser for individual files?

@tmatzxzone
Copy link

is there a way to download a certain file within the folder? using the certain content id?

@tmatzxzone The whole point of using the script is to download multiple files at the same time. Why wouldn't you just use the browser for individual files?

im using headless vps, is there a way tho for a single file?

@shawnli87
Copy link
Author

is there a way to download a certain file within the folder? using the certain content id?

@tmatzxzone The whole point of using the script is to download multiple files at the same time. Why wouldn't you just use the browser for individual files?

im using headless vps, is there a way tho for a single file?

@tmatzxzone No

@tmatzxzone
Copy link

is there a way to download a certain file within the folder? using the certain content id?

@tmatzxzone The whole point of using the script is to download multiple files at the same time. Why wouldn't you just use the browser for individual files?

im using headless vps, is there a way tho for a single file?

@tmatzxzone No

alrite, i just add the file name that i dont need to download so it skip the download LUL, thx for the script tho

@asifajrof
Copy link

is there a way to download a certain file within the folder? using the certain content id?

im using headless vps, is there a way tho for a single file?

alrite, i just add the file name that i dont need to download so it skip the download LUL, thx for the script tho

I used another parameter to explicitly mention the filenames that i wanted to download. its not a full proof solution, but it works. you may check this fork

@kasumabalidps
Copy link

kasumabalidps commented Mar 7, 2024

is there a way to download a certain file within the folder? using the certain content id?

@tmatzxzone The whole point of using the script is to download multiple files at the same time. Why wouldn't you just use the browser for individual files?

im using headless vps, is there a way tho for a single file?

@tmatzxzone No

alrite, i just add the file name that i dont need to download so it skip the download LUL, thx for the script tho

Try this my fork

@tmatzxzone
Copy link

they just updated their API

@Zorg64
Copy link

Zorg64 commented Mar 15, 2024

A fork to work with the API update, but it is also heavily modified. Take and adapt what you need.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment