Nous allons passer par les étapes suivantes:
- Créer un projet Google Cloud
- Activer l’API Google Sheet pour ce projet
- Créer un compte de service associé à ce projet
- Créer une clef pour ce compte de service
- Créer une feuille Google Sheets pour recevoir les données
- Partager la feuille Google Sheets avec le compte de service
- Ecrire une donnée avec un script python configuré pour cette feuille et ce compte de service
Dans un premier temps, il va falloir créer un projet Google Cloud qui nous permettra de permettre des accès à une feuille de calcul. Il faut se rendre sur console.cloud.google.com et créer un nouveau projet, ici WineMonitor:
Dans le moteur de recherche on tape Google Sheets API qui nous renvoie ici https://console.cloud.google.com/marketplace/product/google/sheets.googleapis.com. On choisit alors d’activer cette API en vérifiant bien que le bon projet est sélectionné:
On cherche ensuite « compte de service » dans le moteur de recherche qui nous renvoie ici: https://console.cloud.google.com/iam-admin/serviceaccounts. On décrit le compte et on passe les options facultatives. On note l’adresse email de ce compte.
En cliquant sur le compte, on peut générer ensuite une clef au format JSON. La clef est aussitôt téléchargée. On la rapatrie dans notre projet Python et on note le nom du fichier.
On crée ensuite une nouvelle feuille Google Sheets ici: https://docs.google.com/spreadsheets/u/0/
On lui donne le nom que l’on souhaite et on note soigneusement le nom de la première feuille (Sheet1 ou Feuille 1 selon votre localisation). On partage la feuille avec le mail du compte de service et les droits « éditeur » sur la feuille. Et on note l’ID de la feuille présent dans l’URL:
On prépare ensuite le script Python suivant (courtesy of https://denisluiz.medium.com/python-with-google-sheets-service-account-step-by-step-8f74c26ed28e)
Le script suivant peut demander l’installation des paquets Python suivants:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
import httplib2
import os
from apiclient import discovery
from google.oauth2 import service_account
try:
scopes = ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/spreadsheets"]
secret_file = os.path.join(os.getcwd(), "nom du fichier de clefs JSON")
spreadsheet_id = 'id de la feuille'
range_name = 'Nom de la feuille!A1:D2'
credentials = service_account.Credentials.from_service_account_file(secret_file, scopes=scopes)
service = discovery.build('sheets', 'v4', credentials=credentials)
values = [
['a1', 'b1', 'c1', 123],
['a2', 'b2', 'c2', 456],
]
data = {'values': values}
service.spreadsheets().values().update(spreadsheetId=spreadsheet_id, body=data, range=range_name,
valueInputOption='USER_ENTERED').execute()
except OSError as e:
print(e)
Et on remplace:
- le nom du fichier de clefs JSON
- l’id de la feuille,
- le nom de la première feuille
On exécute le code et voilà, les valeurs sont écrites dans la feuille Google Sheets par notre script Python !