ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬으로 구글 시트 생성 후 다른 유저에게 공유하기
    Python 2021. 1. 16. 21:35
    반응형

    이번 글에서는 스크래핑, 업무자동화에 자주 사용되는 구글 시트를 생성하고, 해당 시트에 다른 유저를 오너로 등록하는 방법을 알아보겠습니다.

     

    테스트를 위해서는 구글 계정 2개가 필요하며 아래와 같은 순서로 진행됩니다:

     

    • 구글 디벨로퍼 콘솔 접속 및 계정 등록
    • 구글 디벨로퍼 프로젝트 생성 및 Google Sheets & Drive API Enable
    • 프로젝트 Credentials 생성하기
    • 파이썬으로 구글 시트 생성 및 다른 유저를 오너로 등록 테스트
    • 자주 발생하는 에러 해결법

     

    구글 디벨로퍼 콘솔 접속 및 계정 등록

    먼저, 생성한 계정 2개 중 파이썬을 사용해 Google Sheet를 API로 생성하고 다른 유저를 오너로 등록할 계정을 등록하여야 합니다. 

     

    구글 디벨로퍼 콘솔로 접속하면 아래와 같은 화면이 보입니다:

     

     

    우상단의 Activate 버튼을 누르고 약관동의, 주소 및 카드 등록을 진행하여 무료 체험판을 활성화합니다.

     

     

    구글 디벨로퍼 프로젝트 생성 및 Google Sheets & Drive API Enable

    다음으로는 프로젝트를 생성하고 해당 프로젝트에 Google Sheets 및 Drive API를 Enable해주어야 합니다. 디벨로퍼 콘솔 대쉬보드로 이동하여 아래와 같이 새로운 프로젝트 생성을 클릭하여 프로젝트를 생성해주어야 합니다.

     

     

    디폴트로 두고 Create을 눌러줍니다.

     

    아래와 같이 프로젝트가 생성되고 나면 아래 버튼을 누르고 Google Sheets API를 검색합니다:

     

     

    그림의 Google Sheets API를 클릭하여 들어간 아래와 같은 화면에서 Enable을 클릭해줍니다:

     

    같은 방식으로 Google Drive API도 Enable 해줍니다:

     

    확인을 위해 좌상단의 햄버거 버튼을 누르고, APIs & Services -> Dashboard를 누르면 화면 아래에 Google Sheets와 Google Drive가 있는 것을 볼 수 있습니다:

     

     

     

    프로젝트 Credentials 생성하기

    파이썬 코드 상에서, API 사용을 인증하기 위해 적절한 권한의 Credentials을 생성하고 API 접근 시 사용할 수 있어야 합니다. 해당 예시에서는 Service Account를 생성하여 해당 Account를 증명할 수 있는 Key file을 다운받아 코드에서 사용할 예정입니다.

     

    아래와 같이 서비스 어카운트 생성하기로 이동하여,

     

    아래와 같은 화면에서 서비스 어카운트명을 넣어주고 Create를 눌러줍니다.

     

     

    아래와 같이 Save를 누르고 대쉬보드로 다시 이동합니다.

     

     

    키 파일 생성을 위해 생성한 서비스 어카운트를 클릭하여 이동합니다:

     

     

    그리고 아래와 같이 키 추가 -> 새로운 키생성을 눌러줍니다:

     

    그리고 json 타입 키를 선택하고 키 생성 후 파일을 찾을 수 있는 위치에 다운 받습니다 (test-20201004-34079c5f78c7.json 와 같은 이름을 가집니다):

     

     

    파이썬으로 구글 시트 생성 및 다른 유저를 오너로 등록 테스트

    (파이썬과  gspread가 설치되어 있어야 합니다)

     

    아래 샘플 코드를 실행하여 구글 시트를 생성하고 원하는 유저를 해당 구글 시트 오너로 등록할 수 있습니다:

    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    
    
    KEY_FILE_PATH = '~/perfect-jetty-301912-6741931065bd.json'
    TARGET_USER_EMAIL = "test@gmail.com"
    
    scope = [
        'https://www.googleapis.com/auth/drive',
        'https://spreadsheets.google.com/feeds'
    ]
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        KEY_FILE_PATH, scope)
    
    gs = gspread.authorize(credentials)
    
    doc = gs.create('test_20210116')
    
    ws = doc.get_worksheet(0)
    
    for i in range(5):
        wd.append_row([i, f"this {i}"])
    
    
    doc.share(TARGET_USER_EMAIL, perm_type='user', role='owner')

     

    위 파일을 실행 후 TARGET_USER_EMAIL의 계정의 구글 드라이브에 접속 시 아래와 같이 test_20210116이라는 시트가 공유된 것을 볼 수 있습니다:

     

     

     

     

    자주 발생하는 에러 해결법

    반응형
Kaden Sungbin Cho