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言語【現場で使える実践テクニック】
posted with amazlet at 18.06.26
松木雅幸 mattn 藤原俊一郎 中島大一 牧 大輔 鈴木健太
技術評論社
売り上げランキング: 97,177
技術評論社
売り上げランキング: 97,177