Python/2.7 information

파이썬으로 구글 시트 조작.

qkqhxla1 2018. 2. 7. 17:38

https://developers.google.com/sheets/api/quickstart/python 를 가져와서 요약했습니다.


동작 방식이나 이런것들이 잘 이해가 가지 않았는데, (처음에는 구글 시트의 문서 소유자가 api를 쓰게해주는 권한을 열고? 


파이썬에서 그걸 받아와서 사용하는줄 알았다.) 동작을 간단하게 설명하자면


내가 만든 파이썬 프로그램이 '내 구글 계정의 권한'을 가지고 내가 엑세스할수 있는 구글시트를 들어가서 값을 읽거나 


편집하는 방식이다. 설명이 상당히 잘 되어있는데 동작 방식등을 안 적어놔서 잠시 헷갈렸었다.

사용법.

0. pip install --upgrade google-api-python-client 설치해줍니다.

1. 위 링크의 Step 1대로 해줍니다.
2. Step 1에서 다운받은 client_secret.json을 본인이 원하는 곳에 넣어둡니다. path는 아래 예제의 CLIENT_SECRET_FILE을 보고 바꿔줍니다.

3. spreadsheetId 값을 링크에서 가져옵니다. spreadsheetId는 

https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit 

문서를 예로 들면 중간의 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms 값입니다. 아래 소스코드에서 변수 spreadsheetId에 넣어줍니다.

4. 가져올 범위를 지정합니다. 소스코드에서 rangeName이 해당 범위입니다. !앞의 값은 구글시트 아래의 탭 이름입니다. 

바로 위 3번의 문서를 예로 들면 rangeName = 'Class Data!A2:E' 는 Class Data탭의 A2번~E까지 가져온다는 뜻입니다. E열에 데이터가 있는한 끝까지 가져 알아서 가져옵니다.

5. 처음 실행하면 웹브라우저가 열리며 제 구글 계정이 보입니다. 허용할거냐는 메시지에서 허용 하면 됩니다.

6. 출력된 결과를 보고 알아서 가공합니다.

7. 다른곳에서 사용하려면 client_secret.json과 자동으로 프로그램 실행시 만들어지는 sheets.googleapis.com-python-quickstart.json이 제대로 된 경로에 있어야 합니다.



아래는 나중에 참고용으로 또 쓰려고 예제 소스코드를 붙여놓음.

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

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

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'sheets.googleapis.com-python-quickstart.json')

    store = Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Sheets API.

    Creates a Sheets API service object and prints the names and majors of
    students in a sample spreadsheet:
    https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
    rangeName = 'Class Data!A2:E'
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheetId, range=rangeName).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        print('Name, Major:')
        for row in values:
            # Print columns A and E, which correspond to indices 0 and 4.
            print('%s, %s' % (row[0], row[4]))


if __name__ == '__main__':
    main()