gdown-cli-golang

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2023 License: GPL-3.0

README

GDOWN CLI Golang

Google DOWNloader

This utility can be used to download all the files automatically from a google drive folder one at a time (alternative to manually clicking download on each file on google drive web UI).

Installation

Install after project cloning

git clone https://github.com/ArindamPal-0/gdown-cli-golang
cd gdown-cli-golang
go install ./cmd/gdown

OR

go install https://github.com/ArindamPal-0/gdown-cli-golang/cmd/gdown
Configuration

After installation, configuration needs to be done.

Before that you need to download the credentials.json file required.

First create a google cloud project and enable google drive api. After that create a new Service Account under Create Credentials. From the created Service Account, generate a new Key and select Key Type as JSON. After that credentials will be downloaded in a json file. Change it's name to credentials.json and put it in project directory or directory from where gdown will be run.

Now run the following command:

$  gdown configure
Put the Service Account credentials.json file in the following directory C:\Users\<Username>\AppData\Roaming/gdown/service-account

And then copy the Service Account credentials.json file downloaded (and renamed), to specified directory. (The above example is shown for Windows, similar copy needs to be done on other platforms)

Usage

Prerequisite

Before running the gdown built executable, make sure to copy the Google Service Account credentials.json file to same folder as the gdown built executable.

Show help
$  gdown
Download files and folders from Google Drive

Usage:
  gdown [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  configure   Configure gdown, creates gdown config directory and more...
  download    Download the item
  help        Help about any command
  list        List details if the item

Flags:
  -h, --help   help for gdown

Use "gdown [command] --help" for more information about a command.

Help for configure subcommand

$ gdown configure --help
Configure gdown, creates gdown config directory and more...

Usage:
  gdown configure [flags]

Flags:
  -h, --help   help for configure

Help for list subcommand

$  gdown list --help
List details if the item

Usage:
  gdown list <id> [flags]

Flags:
  -h, --help   help for list

Help for download subcommand

$ gdown download --help
Download the item

Usage:
  gdown download <id> [flags]

Flags:
  -h, --help   help for download
  -l, --list   also list details of the item
Configure gdown
$  gdown configure
Put the Service Account credentials.json file in the following directory C:\Users\<Username></Username>\AppData\Roaming/gdown/service-account
List file/folder Details
gdown list <id>

E.g.

$  gdown list 1NuuL9qNo5BJYnfNqN_lxBOUN0P-AociQ
Id: 1NuuL9qNo5BJYnfNqN_lxBOUN0P-AociQ
Name: file1.txt
MimeType: text/plain
Size: 16
Download File/Folder

The files and folders are download in $HOME/Downloads directory. (For now download directory can not be changed/configured)

gdown download <id>

E.g.

$  gdown download 1NuuL9qNo5BJYnfNqN_lxBOUN0P-AociQ
> downloads/file1.txt
downloading 100% |█████████████████████| (16/16 B, 8.5 kB/s)
List and Download File/Folder
gdown download --list <id>

E.g.

$  gdown download --list 1NuuL9qNo5BJYnfNqN_lxBOUN0P-AociQ
Id: 1NuuL9qNo5BJYnfNqN_lxBOUN0P-AociQ
Name: file1.txt
MimeType: text/plain
Size: 16
> downloads/file1.txt
downloading 100% |██████████████████████| (16/16 B, 18 kB/s)

Setup

Libraries Used

This project uses the following libraries

Google Cloud Credentials

Create a google cloud project and enable google drive api. After that create a new Service Account under Create Credentials. From the created Service Account, generate a new Key and select Key Type as JSON. After that credentials will be downloaded in a json file. Change it's name to credentials.json and put it in project directory or directory from where gdown will be run.

Build and Run Instruction
Build

Build (Linux)

go build -o build/gdown ./cmd/gdown

Build (Windows)

go build -o build\gdown.exe .\cmd\gdown
Run

Help message

./build/gdown

List Details of File/Folder

./build/gdown list <id>
Dev Setup

Running the application, show help message

go run ./cmd/gdown

OR

go run cmd/gdown/main.go

List Details of File/Folder

go run ./cmd/gdown list <id>

Download File/Folder

go run ./cmd/gdown download <id>

List Details and Download File/Folder

go run ./cmd/gdown download --list <id>
Scratch setup
go mod init github.com/arindampal-0/gdown-cli-golang
go get google.golang.org/api/drive/v3
go get golang.org/x/oauth3/google
go get github.com/joho/godotenv
go get -u github.com/schollz/progressbar/v3
go get -u github.com/spf13/cobra@latestgo get 

TODO

  • Google client authentication
  • Google service account authentication
  • Fetch file details
  • Fetch folder details and list of files
  • Download a file
  • Download all the files in a folder
  • Make it a cli application taking cli args
  • Download a folder recursively

Common Issues

WSL problem opening URL from terminal (used in google oauth2 login)

No method available for opening url - wsl github issue

Installing xdg-utils and wslu fixes the issue.

sudo apt install xdg-utils
sudo add-apt-repository ppa:wslutilities/wslu
sudo apt update
sudo apt install wslu

Opening of URL from terminal is handled by browser package

Directories

Path Synopsis
cmd
internal
cli

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL