Created
February 5, 2019 13:05
-
-
Save wolf1986/ce71354915047e966457325aa01c4097 to your computer and use it in GitHub Desktop.
Google API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Dependencies: | |
from logging import Logger | |
from pathlib import Path | |
from typing import List, Union | |
from google.oauth2 import service_account | |
from googleapiclient import discovery | |
from oauth2client import client, tools | |
from oauth2client.file import Storage | |
class GoogleApiCredentialsHelper: | |
def __init__(self): | |
self.logger = Logger(self.__class__.__name__) | |
self.application_name = 'GoogleApiClient' | |
self.scopes = [ | |
'https://www.googleapis.com/auth/spreadsheets', | |
'https://www.googleapis.com/auth/drive' | |
] | |
self.path_credentials_cache = Path('cache') | |
def get_credentials_service_account(self, path_secret: Union[Path, str]): | |
""" | |
More info: https://developers.google.com/api-client-library/python/auth/service-accounts | |
""" | |
credentials = service_account.Credentials.from_service_account_file(str(path_secret), scopes=self.scopes) | |
return credentials | |
def get_credentials_client_secret(self, path_client_secret: Union[Path, str]): | |
store = Storage(str(self.path_credentials_cache)) | |
credentials = store.get() | |
if not credentials or credentials.invalid: | |
flow = client.flow_from_clientsecrets(str(path_client_secret), self.scopes) | |
flow.user_agent = self.application_name | |
credentials = tools.run_flow(flow, store, None) | |
return credentials | |
class GoogleApi: | |
def __init__(self, credentials) -> None: | |
# discovery_url_sheets = 'https://sheets.googleapis.com/$discovery/rest?version=v4' | |
self._service_sheets = discovery.build('sheets', 'v4', credentials=credentials) | |
self._service_drive = discovery.build('drive', 'v3', credentials=credentials) | |
def create_new_spreadsheet(self, spreadsheet_title, parent_ids: List[str] = None): | |
body = { | |
'name': spreadsheet_title, | |
'mimeType': 'application/vnd.google-apps.spreadsheet', | |
} | |
if parent_ids: | |
body['parents'] = parent_ids | |
request = self._service_drive.files().create(body=body) | |
response = request.execute() | |
spreadsheet_id = response['id'] | |
return spreadsheet_id | |
def add_line_to_spreadsheet(self, line_to_add, spreadsheet_id, sheet_name='Sheet1'): | |
cell_range = sheet_name + '!A1:1' | |
value_range_body = {'values': [line_to_add]} | |
request = self._service_sheets.spreadsheets().values().append( | |
spreadsheetId=spreadsheet_id, | |
range=cell_range, | |
valueInputOption='RAW', | |
insertDataOption='INSERT_ROWS', | |
body=value_range_body | |
) | |
response = request.execute() | |
return response | |
def add_new_sheet_to_spreadsheet(self, spreadsheet_id, sheet_name): | |
body = {"requests": [{"addSheet": {'properties': {'title': sheet_name}}}]} | |
request = self._service_sheets.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body) | |
response = request.execute() | |
return response |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment