API/API__google

google api V3

말하는감자 2019. 7. 18. 15:33

[내가 해야 했던 것들]

1. 파일을 생성한다

2. google api로 업로드한다

3. 특정 폴더나 공유 폴더에 업로드한다

 

 

[도큐먼트]

팀 드라이브 도큐먼트

https://developers.google.com/drive/api/v3/reference/drives

그냥 드라이브 도큐먼트

https://developers.google.com/drive/api/v3/about-files

 

 

되새김질해도 진심 열받는 google api 사용 후기

1. 도큐먼트가 다 영어라 싫었다

2. 개발자 친화적이었다

3. 될것 같이 안된다

 

 

기본적으로 팀 드라이브에 파일을 넣든 개인 드라이브에 넣든 파라미터든 뭐든 딱히 크게 달라지지 않는다

다만 팀 드라이브는 퍼미션 체크가 필요하다 이거슨 궁서체 난 진지하다

난 퍼미션이 없었다

근데 몰랐다 그래서 시간을 꽤 날렸다.. 내가 뭘 잘못한줄... 

 

 

[개발]

1. 권한체크

https://developers.google.com/drive/api/v3/reference/drives/list?apix_params=%7B%22pageSize%22%3A1%2C%22useDomainAdminAccess%22%3Atrue%7D

EXECUTE 버튼을 눌러주세요

만약 200이 떨어지지 않는다면 당신의 계정에는 팀드라이브를 지지고 볶을 권한이 없는것입니다.

200 이 안떨어지면 그냥 포기하던가 관리자에게 권한을 달라고 요구하세요

 

 

 

2. 파일 생성

이것은 각자 알아서... 난 엑셀로 생성했다.

 

 

 

3. 전송

구글 독에서 퍼온 소스를 약간 수정해서 썼습니다.

credentials.json 발급받는 방법은 구글링하면 엄청 많이 나옵니다... 설명도 잘되어있어용..

from httplib2 import Http
from oauth2client import file, client, tools
from googleapiclient.discovery import build

	try:
        import argparse
        flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
    except ImportError:
        flags = None

    SCOPES = 'https://www.googleapis.com/upload/drive'
    store = file.Storage('storage.json')
    creds = store.get()

    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
        creds = tools.run_flow(flow, store, flags) \
            if flags else tools.run(flow, store)

    DRIVE = build('drive', 'v3', http=creds.authorize(Http()))
    team = '잇츠유어팀코드'
    
    #FILES에 업로드할 파일들을 append 해두었습니다
    for 업로드할파일이름 in FILES:
        team_body = {
            'name': 업로드할파일이름,
            'uploadType':'resumable',
            'parents': [team]
        }
        DRIVE.files().create(body=team_body, media_body=업로드할파일이름, supportsAllDrives=True, fields='id').execute().get('id')

여기서 주목해야 할 점은 팀 코드이다

구글 독을 나처럼 대충 적당히 어설픈 영어 실력으로 읽는다면 팀 코드를 알아 낼 수 없다

근데 아무리 찾아봐도 팀코드 어디서 찾는지 잘 안보인다

심지어 stackoverflow에서도 같은 질문 하는 사람들을 발견할 수 있었다

팀 코드는 생각보다 간단한거라서 찾는 방법을 안알려 준 것 같기도 하다 

팀 코드는 바로 당신의 구글 드라이브에 접속하면 알 수 있다

https://drive.google.com/drive/folders/뒤에난수로생성된것이바로팀코드똻

뒤에 난수를 복사해서 스트링으로 박아주면 된다

만약 여러개의 팀 드라이브에 올리고 싶다면 copy api를 이용하면 될것 같다(해보진 않음, 하기 싫음)

 

업로드 파일 타입은 아래와 같다(feat.구글번역기)

단순 업로드 : uploadType = media. 
작은 파일 (5 MB 이하)을 빠르게 전송합니다. 
간단한 업로드를 수행하려면 단순 업로드 수행을 참조하십시오.

멀티 파트 업로드 : uploadType = multipart. 
작은 파일 (5 MB 이하)과 파일을 설명하는 메타 데이터를 한 번에 빠르게 전송할 수 있습니다. 
멀티 파트 업로드를 수행하려면 멀티 파트 업로드 수행을 참조하십시오.

재개 가능한 업로드 : uploadType = resumable
보다 안정적인 전송을 위해, 특히 대용량 파일의 경우 중요합니다. 
다시 시작할 수있는 업로드는 대부분의 응용 프로그램에서 좋은 선택입니다. 
왜냐하면 업로드 당 하나의 HTTP 요청이 추가로 필요하기 때문에 작은 파일에서도 작동하기 때문입니다. 
재개 가능한 업로드를 수행하려면 재개 가능한 업로드 수행을 참조하십시오.

그냥 resumable 했다. 엑셀이라서 가끔 고용량 파일이 생길것 같아서.... 파일 생성은 나의 의지가 아니었다..

 

 

 

 

네 생각보다 간단한데 이틀이나 걸렸어요. 권한때문에 ㅠㅠ.................................

 

 

 

 

 

 

 

 

부록.

[특정 폴더에 넣기]

폴더 만들고 폴더 이름 뒤에 있는 난수를 복사하면 그분이 폴더의 코드가 됩니다. 팀코드를 그걸로 바꾸세요.

구글 드라이브는 트리식 구조가 아닙니다.

1. 팀 드라이브에 접속 했을 때
https://drive.google.com/drive/folders/잇츠유어팀코드

2. 팀 드라이브에 특정 폴더를 만들었을때
https://drive.google.com/drive/folders/잇츠유어팀의폴더

 

[개인 폴더에 넣기]

그냥 팀코드를 개인 폴더 코드로 바꾸세요.

spoortsAllDrives는 일단 True로 해놓고 업로드할 폴더 코드만 바꿔주면 개인/팀 상관없이 올라갑니다.

만약 supportsAllDrives를 안쓰는데 가지고 있는게 거슬리다면 그냥 지우셔도 됩니다.

supportsAllDrives boolean
경고 :이 항목은 사용되지 않습니다.
Deprecated - 요청한 응용 프로그램이 내 드라이브와 공유 드라이브를 모두 지원하는지 여부입니다. 
이 매개 변수는 2020 년 6 월 1 일까지만 적용됩니다. 
이후 모든 응용 프로그램은 공유 드라이브를 지원한다고 가정합니다. (기본값 : false)
supportsTeamDrives boolean
경고 :이 항목은 사용되지 않습니다.
대신 Deprecated supportsAllDrives를 사용하십시오. (기본값 : false)
# 팀드라이브
DRIVE.files().create(body=team_body, media_body=업로드할파일이름, supportsAllDrives=True, fields='id').execute().get('id')

# 내드라이브
DRIVE.files().create(body=team_body, media_body=업로드할파일이름, fields='id').execute().get('id')

 

'API > API__google' 카테고리의 다른 글

접속  (0) 2021.02.01
준비  (0) 2021.02.01
google api V3  (0) 2019.07.18