Created
August 22, 2012 16:09
-
-
Save deanet/3427090 to your computer and use it in GitHub Desktop.
Uploading File into Google Drive (because grive too many dependencies qt, xorg ? )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
## uploading to google | |
## rev: 22 Aug 2012 16:07 | |
det=`date +%F` | |
browser="Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1" | |
username="[email protected]" | |
password="password" | |
accountype="HOSTED" #gooApps = HOSTED , gmail=GOOGLE | |
pewede="/tmp" | |
file="file-$det.tar" | |
tipe="application/x-tar" | |
/usr/bin/curl -v --data-urlencode Email=$username --data-urlencode Passwd=$password -d accountType=$accountype -d service=writely -d source=cURL "https://www.google.com/accounts/ClientLogin" > $pewede/login.txt | |
token=`cat $pewede/login.txt | grep Auth | cut -d \= -f 2` | |
uploadlink=`/usr/bin/curl -Sv -k --request POST -H "Content-Length: 0" -H "Authorization: GoogleLogin auth=${token}" -H "GData-Version: 3.0" -H "Content-Type: $tipe" -H "Slug: $file" "https://docs.google.com/feeds/upload/create-session/default/private/full?convert=false" -D /dev/stdout | grep "Location:" | sed s/"Location: "//` | |
/usr/bin/curl -Sv -k --request POST --data-binary "@$file" -H "Authorization: GoogleLogin auth=${token}" -H "GData-Version: 3.0" -H "Content-Type: $tipe" -H "Slug: $file" "$uploadlink" > $pewede/goolog.upload.txt |
evolution happens:
* automatically gleans MIME type from file * uploads multiple files * removes directory prefix from filename * works with filenames with spaces * uses dotfile for configuration and token * interactively configuring * uploads to target folder if last argument looks like a folder id * quieter output * uses longer command line flags for readability * throttle by adding `curl_args="--limit-rate 500K"` to $HOME/.gdrive.conf
#!/bin/bash # based on https://gist.github.com/deanet/3427090 # # useful $HOME/.gdrive.conf options: # curl_args="--limit-rate 500K --progress-bar" browser="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" destination_folder_id=${@: -1} if expr "$destination_folder_id" : '^[A-Za-z0-9]\{28\}$' > /dev/null then # all but last word set -- "${@:0:$#}" else # upload to root unset destination_folder_id fi if [ -e $HOME/.gdrive.conf ] then . $HOME/.gdrive.conf fi old_umask=`umask` umask 0077 if [ -z "$username" ] then read -p "username: " username unset token echo "username=$username" >> $HOME/.gdrive.conf fi if [ -z "$account_type" ] then if expr "$username" : '^[^@]*$' > /dev/null || expr "$username" : '.*@gmail.com$' > /dev/null then account_type=GOOGLE else account_type=HOSTED fi fi if [ -z "$password$token" ] then read -s -p "password: " password unset token echo fi if [ -z "$token" ] then token=`curl --silent --data-urlencode Email=$username --data-urlencode Passwd="$password" --data accountType=$account_type --data service=writely --data source=cURL "https://www.google.com/accounts/ClientLogin" | sed -ne s/Auth=//p` sed -ie '/^token=/d' $HOME/.gdrive.conf echo "token=$token" >> $HOME/.gdrive.conf fi umask $old_umask for file in "$@" do slug=`basename "$file"` mime_type=`file --brief --mime-type "$file"` upload_link=`curl --silent --show-error --insecure --request POST --header "Content-Length: 0" --header "Authorization: GoogleLogin auth=${token}" --header "GData-Version: 3.0" --header "Content-Type: $mime_type" --header "Slug: $slug" "https://docs.google.com/feeds/upload/create-session/default/private/full${destination_folder_id+/folder:$destination_folder_id/contents}?convert=false" --dump-header - | sed -ne s/"Location: "//p` echo "$file:" curl --request POST --output /dev/null --data-binary "@$file" --header "Authorization: GoogleLogin auth=${token}" --header "GData-Version: 3.0" --header "Content-Type: $mime_type" --header "Slug: $slug" "$upload_link" $curl_args done
Still working, great !
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Google enforcing OAuth this script doesn't work any more;
You will get a 404 on "https://www.google.com/accounts/ClientLogin" when requesting the "${token}"
This one works fine with OAuth 2 : https://github.com/labbots/google-drive-upload
You will need an API client and secret : Go to https://console.developers.google.com/apis/ and create a "Google Drive" credential of type "OAuth client ID", sub type "other"
(Adding that here as this gist still popups first on google search)