Trading-Attitude
Les meilleurs indicateurs techniques
-

Comment lancer un script Python depuis Google Sheets ?

by Michel 0 Comments

Comment lancer un script python depuis une Google Sheets ? Comment mettre à jour Google Sheets avec des données calculées avec python ? Je vous invite à découvrir 3 projets passionnants qui vous permettront de suivre vos actions, vos cryptos facilement et d’automatiser votre trading. On commence tout de suite.

Comment lancer un Script Python depuis Google Sheets

Automatiser votre trading avec Google Sheets et python

Qu’est-ce que Google Sheets ?

Alors, pour ceux qui ne connaissent pas, Google Sheet, c’est une alternative online à Excel. C’est très pratique parce que GoogleSheet c’est gratuit et en ligne. Pas besoin de logiciel et pas besoin de payer.

Comment automatiser son trading avec Google Sheets et Python ?

J’ai été contacté par un trader développeur suite à ma vidéo sur l’installation d’un environnement python pour trader.

JP est vendeur d’options et souhaite suivre les premiums des options dans une feuille Google Sheets. D’autre part, il a un script python qui doit récupérer des données, j’imagine. Il veut pouvoir lancer ce script depuis GoogleSheet.

Je suis certain qu’il y a moyen d’améliorer sa chaîne de traitement entière, mais je vais me concentrer sur ce besoin :

  • comment lancer un script Python depuis une Google Sheets

Voici 3 possibilités.

Elles pourront vous servir à d’autres projets, screener, alertes, etc…

Les trois projets pour lancer un script python depuis Google Sheets

Je vous propose donc 3 projets, trois alternatives. Nous allons beaucoup apprendre et c’est passionnant. Imaginez tout ce que l’on peut faire avec ce que nous allons mettre (rapidement) en place !

Pas envie de lire ? Regardez la vidéo :

Projet 1 : lancer un script python depuis Google Sheets

Premièrement, la solution la plus simple mais la moins puissante est la suivante. Elle consiste à cliquer sur un lien dans une cellule de la feuille GoogleSheet. Ce lien appellera un serveur web sur votre machine.

Car nous allons installer un serveur web sur votre PC (ou Mac).

Voici le schéma de la solution.

lancer un script python depuis Google Sheets - Projet 1
Schéma de la première solution

Remarque : ce schéma peut aussi être généré par python ! Python peut tout faire !

En fait, on va :

  • créer une application python sur votre PC
  • et on va mettre un lien vers cette application dans la feuille GoogleSheet.

Flask est une librairie Python très utile pour créer une web application.

Créer une application web python avec la bibliothèque Flask

Lancez votre VSCode (voir cette vidéo pour installer tout ce qu’il faut).

Créez un nouveau projet, ou simplement un nouveau fichier dans le dossier où se trouve votre script (recommandé), par exemple webapp.py.

Dans ce fichier, collez ce code suivant :

from flask import Flask
import subprocess

app = Flask(__name__)

@app.route('/')
def launch():
    # Specify the path to your .bat or .cmd file
    bat_file_path = r'script.bat'  # Update this with your actual file path

    try:
        # Execute the .bat or .cmd file
        completed_process = subprocess.run(bat_file_path, shell=True, capture_output=True, text=True)

        # Check if the process completed successfully
        if completed_process.returncode == 0:
            return "Execution successful" 
        else:
            msg = f"Execution failed. Error output: {completed_process.stderr}"
            return msg
    
    except Exception as e:
        msg = f"An error occurred: {str(e)}"
        return msg
    
    
if __name__ == '__main__':
    # Run the Flask application
    app.run(debug=True)

Utilisez l’instruction suivante pour installer la librairie Flask:

pip install Flask

Pourquoi créons-nous une web app ? En fait, c’est parce que le navigateur web ne peut interagir de lui-même avec le disque dur (pour éviter des failles de sécurité). Il faut donc passer par un serveur web.

Simuler le script python ou utiliser le vôtre

Ensuite, pour simuler votre script, je vais créer dans le dossier du projet un .bat contenant le code suivant :

@echo off
rem Create an empty file named example.txt
echo. > example.txt

En fait, pour faciliter la chose, placez votre script dans le même dossier que webapp.py. Ou, inversement, créez webapp.py dans le même dossier que votre script.

Lancer la webapp

Ensuite, lancez depuis VSCode votre script webapp.py.

Normalement le web service exposé par la web app est à l’adresse suivante (c’est écrit dans le terminal lorsque l’application se lance) : http://127.0.0.1:5000

127.0.0.1 est l’adresse IP du localhost, votre machine. Le port 5000 est fixé par Flask.

Appeler le web service

Maintenant, copiez-collez ce précédent lien dans une cellule de la feuille GoogleSheet. Puis, cliquez dessus…

Le web service a été appelé et a lancé le script. On le voit au fichier example.txt qui a été créé dans le dossier.

Le problème avec cette solution pour lancer un script python depuis Google Sheets

Finalement, il y a un gros problème avec cette solution. Le lien dans la feuille GoogleSheet ouvre un onglet. On voit le résultat de l’exécution, mais les données ne peuvent pas être ajoutées directement à la feuille Google. De plus, il faut fermer l’onglet.

Nous allons corriger cela dans la solution suivante.

Projet 2 : ou comment lancer un script python depuis Google Sheets et mettre à jour la feuille

Voici l’architecture de cette solution.

lancer un script python depuis Google Sheets - Projet 2
Projet n°2 : serveur web externe

Dans cette alternative nous allons utiliser Google Apps Script (équivalent du code VBA – Visual Basic Application – dans Excel) pour :

  • créer un menu dans la Google Sheets
  • appeler une webAPI et mettre les données récupérées dans une cellule de la feuille

Remarque : il faudra coder l’équivalent de votre script dans ce web service. C’est le web service qui remplace votre script !

Pourquoi héberger la web application sur un serveur tiers

Ainsi, vous l’avez compris, nous allons héberger notre web app sur un serveur tiers. Pourquoi ?

Eh bien, il est possible de recevoir des données depuis le web et d’écrire dans des cellules de GoogleSheets via un appel de webAPI, mais ce n’est pas possible avec le localhost.

Pourquoi ?

Eh bien, parce que le code Google Apps Script s’exécute sur le serveur Google. Et il ne sait pas accéder à votre localhost (le localhost c’est le nom local qu’on toutes nos machines).

Il faut donc un nom de domaine et un serveur sur internet.

J’ai trouvé une solution simple et rapide.

Déployer notre application web sur le cloud

Pour cette solution, le plus simple c’est d’avoir un repository Github. Si ce n’est pas fait, aller dans la vidéo partagée au début de l’article pour voir comment créer voter compte Github.

Je vous y montre aussi comment forker un projet. Et c’est ce que l’on va faire.

Donc, allez sur https://github.com/render-examples/flask-hello-world et faites un fork du projet dans votre compte Github (voir dans la vidéo comment faire). Et voir le bouton ci-dessous.

Utiliser le bouton Fork pour copier le repo dans votre compte GitHub
Utiliser le bouton Fork pour copier le repo dans votre compte GitHub

Dans Github modifier le code de app.py pour qu’il soit égal à (on modifie juste le return) :

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return '{"data": "Hello, World!"}'

Voici ce que cela donne.

Code modifié (la ligne du return)
Code modifié (la ligne du return)

Cliquez sur le bouton commit pour enregistrer vos modifications.

Cliquer sur Commit changes pour sauvegarder la modification.
Cliquer sur Commit changes pour sauvegarder la modification.

Créer le compte cloud

Ensuite, il faut se créer un compte sur Render.com. Render.com est un service d’hébergement cloud gratuit (jusqu’à un certain niveau). Il est très facile (si on a Github) de déployer du python dessus.

Voici la documentation pour le faire.

Vous devez vous inscrire à Render.com en utilisant Github, et vérifier votre compte avec Github. Sinon vous ne pourrez pas déployer une web application.

Important : choisissez la méthode d'inscription via GitHub
Important : choisissez la méthode d’inscription via GitHub
Créer un web service

Ensuite, créez un nouveau web service (aller sur le dashboard Render https://dashboard.render.com).

Créez un Web Service
Créez un Web Service

Puis, choisissez de le déployer en vous connectant à votre repo Github forké.

Choisir de builder le web service depuis GitHub
Choisir de builder le web service depuis GitHub
Connexion au repo Github

Render.com va vous demander (ou plutôt c’est GitHub) d’accepter de donner accès au repo. Sélectionnez juste le repo en question. Cliquez sur le bouton Install tout en bas de la fenêtre :

Demande d'authorisation
Demande d’autorisation
Cliquer sur install
Cliquer sur install

Ensuite, il faut confirmer dans la fenêtre suivante.

Confirmer
Confirmer
Choix de l’instance

Ce n’est pas fini ! Il faut maintenant choisir l’instance. Que ne faut-il pas faire pour pouvoir lancer un script python dans Google Sheets !

Et attention ! Ouvrez bien vos mirettes. Vous devez choisir l’instance FREE. Et là, vous avez tout compris ! Sinon, vous devrez payer.

Choix de l'instance Free
Choix de l’instance Free

Cliquez sur le bouton pour lancer le déploiement. Render.com va aller chercher votre code sur le repo et l’installer dans un web service.

Création du Web Service (c'est un peu long)
Création du Web Service (c’est un peu long)

En fait, la création du web service est un peu longue, mais on peut suivre le déroulement.

Ainsi, à la fin, la fenêtre de log nous dit que le service est live.

Notification que le service est live
Notification que le service est live

Ensuite, copiez l’url du web service :

Copie de l'url du web service
Copie de l’url du web service

Appel direct du web service

Maintenant, testons cet url dans notre cellule, comme dans le projet 1. Collez cette url dans la cellule et cliquez dessus. Un nouvel onglet s’ouvre dans le navigateur web :

Appel direct du web service
Appel direct du web service

Ainsi, vous devriez voir les données renvoyées par le web service. Au moins cela marche !

Cependant on n’est pas plus avancé qu’au projet 1. En effet, on n’a pas pu modifier notre page Google Sheet. Maintenant, appelons l’url d’une autre façon.

Appel du web service depuis Google Apps Script

Tout d’abord, dans la page Google Sheets ouvrez les Apps Scripts. Cela se fait via le menu Extensions / Apps Script.

Menu Extensions / Apps Script de Google Sheets
Menu Extensions / Apps Script de Google Sheets

Dans l’éditeur (ouvert par défaut) de Apps Script, donnez un nom à votre projet et collez le code suivant :

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Run Web Service', 'callWebService')
      .addToUi();
}

function callWebService() {
  var url = 'URL_WEB_SERVICE'; // Replace with the URL of your batch file
  
  //var url = 'http://127.0.0.1:5000'; // pour test "marche pas en local"
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText()); // Log the response for debugging
  // Parse the JSON response
  var data = JSON.parse(response.getContentText());
  
  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Write the data to a specific cell
  sheet.getRange('H7').setValue(data['data']);

}

Attention ! Modifier l’url dans le code en mettant le votre.

Ainsi, la fonction onOpen() ajoute le menu dans votre page GoogleSheet. Lorsque le menu est appelé, il déclenche la fonction callWebService() qui va appeler l’url. Ensuite, elle va mettre les données reçues dans la cellule A7.

Test de l’appel du web service

Pour tester l’appel, recharger la page Google Sheets. Le menu « Custom Menu » apparaît (note : il peut être caché sous les trois points si votre écran est étroit).

Activez Custom Menu / CallWebService.

Ensuite, Google va vous demander plein d’autorisations et vous avertir d’une exception de sécurité.

Cliquez sur 1, puis sur 2 :

Exception de sécurité à valider
Exception de sécurité à valider

Voilà, cela fait le job. Les données sont ensuite écrites par Apps Script dans la cellule H7.

Résumé

Bravo ! Vous avez :

  • déployé un web service sur internet !
  • Créé un Apps Script qui appelle le web service
  • Et met à jour la Google Sheet !

Ne nous le cachons pas : cette solution est un peu complexe. Et, surtout, votre script doit être sur le serveur. Ce qui n’est pas super top pour une routine perso à automatiser.

Mais passons à une autre solution plus élégante.

Projet 3 : autre façon de lancer un script python depuis GoogleSheet

Voici l’architecture de ce troisième projet :

lancer un script python depuis Google Sheets - Projet 3
La troisième solution utilisant Firebase

Ainsi, dans cette solution, nous allons utiliser une base de données Firebase (un produit Google) en ligne accessible via des web API. Et cela tombe bien ! C’est ce qu’on veut : utiliser des web API car Apps Script sait bien les appeler.

Côté Google Sheets, cela ne va pas beaucoup changer. On continue d’appeler une web API.

Par contre, votre script python doit appeler Firebase pour stocker les données. Mais vous allez voir, ce n’est vraiment pas compliqué.

Pour voir comment mettre en place cette solution, afin de ne pas surcharger cet article, veuillez regarder la vidéo que j’ai faite sur ces 3 projets.

Voici le code Apps Script :

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Run Web Service', 'callWebService')
      .addToUi();
}

function callWebService() {
  var url = 'VOTRE_URL.firebasedatabase.app/cours.json';  // Replace with the URL of your FireBase Realtime DB

  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText()); // Log the response for debugging
  // Parse the JSON response
  var data = JSON.parse(response.getContentText());
  
  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Write the data to a specific cell
  //sheet.getRange('H7').setValue(data['data']);
  writeToSheet(data);

}

function writeToSheet(jsonData) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Flatten the JSON object into an array of objects
  var data = [];
  for (var key in jsonData) {
    jsonData[key].forEach(function(item) {
      data.push(item);
    });
  }
  
  // Write data to the sheet
  var headerWritten = false;
  data.forEach(function(obj) {
    var row = [];
    for (var key in obj) {
      if (!headerWritten) {
        sheet.appendRow(Object.keys(obj)); // Write header row
        headerWritten = true;
      }
      row.push(obj[key]);
    }
    sheet.appendRow(row);
  });
}

Mais, ce n’est pas fini ! J’ai d’autres solutions à vous proposer (mais que je n’implémenterai pas).

Autres solutions pour lancer un script python dans Google Sheets

Ainsi, je vous propose d’autres pistes.

Générer ou modifier la page Google Sheet

En python on peut créer et modifier une page Google Sheet avec la Google Sheets API et la librairie python gspread.

Cela peut donc ouvrir plein de perspectives.

Voici un exemple :

import gspread
from oauth2client.service_account import ServiceAccountCredentials

# Define the scope and credentials
scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('path/to/your/credentials.json', scope)

# Authorize the client
client = gspread.authorize(creds)

# Open the desired spreadsheet and worksheet
spreadsheet = client.open_by_key('your_spreadsheet_key')
worksheet = spreadsheet.worksheet('Sheet1')

# Example: Update a cell in the worksheet
worksheet.update('A1', 'Hello, Google Sheets!')

print('Data imported successfully.')

Créer une feuille Excel

De même, python peut créer une feuille Excel. Vous n’avez pas besoin de Excel. Le fichier est en fait un fichier ODS (Open Office). Ce fichier peut être importé dans Google Sheets, manuellement ou via un outil d’automatisation (voire une librairie python).

Enfin, créer un notebook python sur Google Colab

Finalement, peut-on remplacer Google Sheets ? Pourquoi je dis cela ? Avec les Dataframes de la librairie pandas en python, on manipule quelque chose qui ressemble à une feuille Excel.

De plus, Google Colaboratory permet d’afficher les données un peu comme Google Sheets (mais pas en écriture). Donc, pourquoi ne pas tout faire dans Google Colaboratory ?

Conclusion

Nous avons exploré différentes solutions pour lancer un script python depuis Google Sheets. Les possibilités sont immenses.

Restez à l’écoute car nous verrons encore d’autres choses très intéressantes avec Python.


Illustrations : canva

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CommentLuv badge