구글 계정 접속 권한 얻기
먼저 구글 계정의 접속 권한을 얻기 위한 credential생성이 필요하다.
* 원칙적으로 oauth2client는 deprecated되고, 이제 google_auth_oauthlib을 사용해야한다.
https://google-auth.readthedocs.io/en/latest/oauth2client-deprecation.html#replacement
1. 구글 계정 생성
2. https://console.developers.google.com/apis/library? 에서 원하는 API선택
3. 사용자 인증 정보 생성
4. OAuth 동의에서 scope설정
5. json credential 다운로드
6. Flow를 이용해서 authorization_url얻기
7. authorization_url에 접속 후 로그인하여 autorization code 얻기
8. flow.fetch_token에 넣어서 credential dict를가져오기
9. gspread에 credential을 변환해서 넣기
# 인증 관련 레퍼런스
Flow exam: https://github.com/googleapis/google-api-python-client/blob/master/docs/oauth.md
Flow docs: https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html
OAuth2(deprecated): https://developers.google.com/identity/protocols/OAuth2
# 예제
# Gspread: https://gspread.readthedocs.io/en/latest/
$ pip install gspread
Gspread는 아직 구버전 방식의 credential만 지원하기 때문에, flow의 return을 위와같이 class object로 변환해서 사용해야한다.
## service account를 이용한 인증
https://gspread.readthedocs.io/en/latest/oauth2.html
위 링크와 같이 서비스 계정 키를 생성하면 쉽게 사용가능하다.
그다음 서비스 계정키의 email을 google spread sheet의 공유자 권한으로 추가한다.
"The caller does not have permission” 에러 해결
해당 상위 폴더 전체를 Link로 공유하도록 설정하면 해결된다.
# Google Drive API : https://developers.google.com/drive/api/v3/quickstart/python
$ pip install google-api-python-client
* Gspread와 달리, google drive에서는 flow.credentials를 사용해야한다.
from googleapiclient.discovery import build
service = build('drive', 'v3', credentials=flow.credentials)
results = service.files().list(
pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
# Google Drive HTTP 통신 쿼리
https://developers.google.com/drive/api/v3/reference/query-ref
https://developers.google.com/drive/api/v3/ref-search-terms#operators
gspread-formatting을 사용하여, work sheet 스타일 편집하기
developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#Style
pypi.org/project/gspread-formatting/
gformat.set_column_width(ws, 'D', 700)
data_cell_format = gformat.cellFormat( wrapStrategy='WRAP' )
gformat.format_cell_range(ws, 'A1:I1', data_cell_format)
# PyDrive : https://pythonhosted.org/PyDrive/quickstart.html#authentication
PyDrive는 google drive v2의 HTTP통신을 python으로 wrapping한 것이다. 안타깝지만 v2라서 deprecated..
$ pip install PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
drive = GoogleDrive(gauth)
단, 무조건 client_secret.json으로 파일 이름을 변경해야한다.
* 만약 임의의 파일이름을 쓰고 싶거나, credential을 저장해두고 재로그인 없이 바로 쓰고 싶을 경우, settings.yaml을 만들고 다음과 같이 작성한다.
client_config_backend: file
client_config_file: your_name_of_client_secrets.json
save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials_pydrive.json
get_refresh_token: True
oauth_scope:
- https://www.googleapis.com/auth/drive.file
- https://www.googleapis.com/auth/drive.install
- https://www.googleapis.com/auth/drive
# Wget으로 google drive 링크 다운로드 하기
wget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
https://gist.github.com/iamtekeste/3cdfd0366ebfd2c0d805
# 에러 해결
"Quota exceeded for quota group 'ReadGroup' and limit 'Read requests per user per 100 seconds' of service 'sheets.googleapis.com' for consumer 'project_number:894274053007'.",
위와 같은 에러 메시지는 해당 계정으로 너무 많은 request가 100초 이내에 들어와서 발생한 에러이다.
검색해보니 https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas 에 따르면 기본 값이 100초당 100개 request로 설정이 되어있고, 이를 1000개 request까지 올릴 수 있다고한다.
그러나 이를 GCP api console에서 올리려고 보았더니, 계정을 평가판에서 유료 계정으로 업그레이드를 해야한다.
'Development > Free Topic' 카테고리의 다른 글
Librosa, Numba 에러 해결 (0) | 2020.01.23 |
---|---|
Z-shell ( zsh ) 사용하기 (0) | 2020.01.17 |
라즈베리파이 4 Model B 시작하기 (0) | 2019.11.08 |
Javascript (0) | 2018.05.09 |
Windows10 에서 화면 녹화하기 (0) | 2018.03.12 |
댓글