GoogleDriveSDK経由でGoogleDriveにフォルダを作成する

訳あって特定のディレクトリ以下に都度ディレクトリを作ってそこにファイルを保存する必要があったのでメモがてら

ソースコード

今回はGoogle API Consoleでダウンロードするjsonファイルを直接管理したくなかったので、jwt.Config経由でclientを作ってる。

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"strings"

	"golang.org/x/oauth2/google"
	"golang.org/x/oauth2/jwt"
	drive "google.golang.org/api/drive/v3"
)

const (
	FolderMimeType = "application/vnd.google-apps.folder"

	testRootDir = "YourGoogleDriveFileID"
)

func main() {
	key := os.Getenv("PRIVATE_KEY")
	key = strings.Replace(key, `\n`, "\n", -1)
	config := jwt.Config{
		Email:        os.Getenv("SERVICE_EMAIL"),
		PrivateKeyID: os.Getenv("PRIVATE_KEY_ID"),
		PrivateKey:   []byte(key),
		Scopes: []string{
			drive.DriveScope,
		},
		TokenURL: google.JWTTokenURL,
	}
	cli := config.Client(context.Background())
	srv, err := drive.New(cli)
	if err != nil {
		log.Fatalln("error new drive serivce")
	}

	backupDir := &drive.File{
		Name:     fmt.Sprintf("💩💩💩💩"),
		MimeType: FolderMimeType,
		Parents: []string{
			testRootDir,
		},
	}
	f, err := srv.Files.Create(backupDir).Do()
	if err != nil {
		log.Fatalln("error create directory:", err.Error())
	}

	log.Println(f.Id, ":", f.Name)
}

ちゃんとできてる!

気をつける点

気をつける程の事でも無いけれど、

  • 公式ドキュメントにもあるけど、MimeTypeは application/vnd.google-apps.folder にすること

  • サンプルコード - Creating a folder でディレクトリ作るAPIの呼び出しのフィールドにidを指定してるけど指定しなくても今のところ問題ない

  • Parentsを複数指定すると複数箇所で作成される。

以上

みんなのGo言語【現場で使える実践テクニック】
松木雅幸 mattn 藤原俊一郎 中島大一 牧 大輔 鈴木健太
技術評論社
売り上げランキング: 97,177