Google Sheets et Python

February 16, 2017
Rédigé par

Google Sheets et Python

Ce post s'inspire du rappel de Patrick McKenzie selon lequel il n'est parfois pas nécessaire d'avoir une base de données :

Ainsi, si vous construisez une application CRUD rapide pour une utilisation interne par exemple, utiliser Google Docs en tant que back-end (via JSON) se révèle *étonnamment* efficace.

— Patrick McKenzie (@patio11) 5 juillet 2014

Dans ce tutoriel, nous allons utiliser l'excellent gspread package Python d'Anton Burnashev pour lire, écrire et supprimer des données d'une feuille de calcul Google avec seulement quelques lignes de code. 

API Google Drive et comptes de service

Au risque d'enfoncer des portes ouvertes, vous aurez besoin d'une feuille de calcul si vous voulez vous entrainer en suivant ce post. Si vous n'avez pas déjà une feuille de calcul remplie de données, je vous suggère de faire une copie de celle-ci avec les coordonnées de tous les législateurs américains ! (Note : Ian Webster utilise ces données en conjonction avec Twilio pour aider les citoyens à appeler le congrès).

feuille de calcul

Pour accéder par programmation à votre feuille de calcul, vous devez créer un compte de service ainsi que des informations d'identification OAuth2 à partir de la console API Google. Si le développement OAuth2 vous a déjà traumatisé par le passé, ne vous inquiétez pas ; les comptes de service sont beaucoup plus faciles à utiliser.

Suivez les étapes et le GIF ci-dessous. Vous allez entrer et sortir de la console en 60 secondes (tout comme Nicolas Cage dans votre film favori avec cet acteur).

  1. Accédez à la Google APIs Console.
  2. Créez un nouveau projet.
  3. Cliquez sur Enable API (Activer l'API). Recherchez et activez l'API Google Drive.
  4. Créez des informations d'identification pour qu'un serveur Web puisse accéder aux données d'application.
  5. Nommez le compte de service et attribuez-lui un rôle d'éditeur dans le projet.
  6. Téléchargez le fichier JSON.
  7. Copiez le fichier JSON dans votre répertoire de code et renommez-le client_secret.json

création du service account

Bien que facile à oublier, il reste une dernière étape nécessaire pour autoriser votre application !

Recherchez client_email dans client_secret.json. De retour sur votre feuille de calcul, cliquez sur le bouton Partager en haut à droite, puis collez l'adresse e-mail du client dans le champ Personnes pour lui accorder des droits de modification. Cliquez sur Envoyer.

Si vous ignorez cette étape, vous obtiendrez une erreur gspread.exceptions.SpreadsheetNotFound lorsque vous essayerez d'accéder à la feuille de calcul à partir de Python.

partage de la feuille de calcul et localisation de la variable dans le json

Nous avons terminé avec la partie ennuyeuse ! Maintenant, voyons le code.

Lecture de données à partir d'une feuille de calcul avec Python

Ayant déjà les informations d'identification (vous les avez copiées dans votre répertoire de code, n'est-ce pas ?), l'accès à une feuille de calcul Google dans Python ne nécessite que deux packages :

  1. oauth2client : pour autoriser avec l'API Google Drive à l'aide d'OAuth 2.0
  2. gspread : pour interagir avec Google Sheets

Installez ces packages avec :

pip install gspread oauth2client

Collez ensuite ce code dans un nouveau fichier appelé spreadsheet.py :

import gspread
from oauth2client.service_account import ServiceAccountCredentials


# use creds to create a client to interact with the Google Drive API
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)

# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("Copy of Legislators 2017").sheet1

# Extract and print all of the values
list_of_hashes = sheet.get_all_records()
print(list_of_hashes)

Exécutez spreadsheet.py de Python et émerveillez-vous devant les magnifiques données bien formatées.

sortie console

Insertion, mise à jour et suppression à partir d'une feuille de calcul avec Python

Nous n'avons fait qu'effleurer la surface des fonctionnalités complètes et bien documentées des gspreads. 

Par exemple, nous avons extrait les données en une liste de hachages, mais vous pouvez obtenir une liste de listes si vous préférez :

sheet.get_all_values()

Ou simplement extraire les données d'une seule ligne, colonne ou cellule :

sheet.row_values(1)

sheet.col_values(1)

sheet.cell(1, 1).value

Vous pouvez écrire dans la feuille de calcul en modifiant une cellule spécifique :

sheet.update_cell(1, 1, "I just wrote to a spreadsheet using Python!")

Ou encore, insérer une ligne dans la feuille de calcul :

row = ["I'm","inserting","a","row","into","a,","Spreadsheet","with","Python"]
index = 1
sheet.insert_row(row, index)

Vous pouvez également supprimer une ligne de la feuille de calcul :

sheet.delete_row(1)

Et connaître le nombre total de lignes :

sheet.row_count

Consultez la référence API gspread pour obtenir des détails complets sur ces fonctions ainsi que quelques dizaines d'autres. 

L'utilisation de Google Sheets avec Python ouvre des possibilités telles que la création d'une application Flask avec une feuille de calcul comme couche de persistance, ou l'importation de données d'une feuille de calcul Google dans les ordinateurs portables Jupyter et l'analyse dans Pandas. Si vous voulez commencer à jouer avec Python et Twilio, consultez nos guides de démarrages rapides Python.

Si vous construisez quelque chose de sympa, n'hésitez pas à me le dire. Vous pouvez me contacter via gb@twilio.com ou @greggyb. Et si ce blog vous a été utile, n'hésitez pas à le partager avec quelqu'un qui pourrait être intéressé. 

Je remercie chaleureusement Devin et Sam pour les révisions, Google pour Google Sheets, et surtout Anton pour gspread.