RENDER - Importer donnée
Bonjour à tous,
Je cherches à importer des données dans un google sheet, ces données sont stockés en local "C:\tmp", j'ai créer un script en python :
import os
import pandas as pd
from flask import Flask, jsonify
# Initialiser l'application Flask
app = Flask(__name__)
# Spécifier le chemin du dossier à analyser (à définir en dur)
folder_path = r'C:\tmp'
# Vérifier si le dossier existe
if not os.path.exists(folder_path):
print(f"Erreur : Le dossier '{folder_path}' n'existe pas.")
exit()
# Fonction pour importer uniquement la colonne 'Info' d'un fichier CSV
def import_csv_info_column(file_path, delimiter='='):
try:
# Lire le fichier CSV
df = pd.read_csv(file_path, sep=delimiter, names=[
"Lib", "Info"], encoding='latin-1')
# Suppression des lignes vides et des informations non pertinentes
df.dropna(subset=['Info'], inplace=True)
df = df[~df['Info'].isin(["0", "0.0", "0.00", "0.000"])]
# Conversion de la colonne 'Info' en liste
info_data = df['Info'].tolist()
return info_data
except FileNotFoundError:
print(f"Erreur : le fichier '{file_path}' n'a pas été trouvé.")
except pd.errors.EmptyDataError:
print("Erreur : le fichier est vide.")
except pd.errors.ParserError:
print("Erreur : le fichier ne peut pas être analysé, vérifiez le délimiteur.")
except Exception as e:
print(f"Une erreur est survenue : {e}")
return []
# Fonction pour collecter les données de la colonne 'Info' de tous les fichiers du dossier sélectionné
def collect_info_from_folder(folder_path):
all_info_data = []
for filename in os.listdir(folder_path):
if (filename.endswith(".don") or filename.endswith(".don99")) and "ECO" in filename:
file_path = os.path.join(folder_path, filename)
# Vérifier si le fichier est bien un fichier (pas un sous-dossier)
if os.path.isfile(file_path):
# Importer les données du fichier CSV
info_data = import_csv_info_column(file_path)
if info_data:
all_info_data.append({
"filename": filename,
"info": info_data
})
return all_info_data
# Collecter les données du dossier sélectionné
collected_info = collect_info_from_folder(folder_path)
# Définir une route pour afficher les données sur le localhost
@app.route('/')
def datas():
if not collected_info:
return jsonify({"message": "Aucune donnée trouvée dans le dossier sélectionné."})
return jsonify({"collected_info": collected_info})
# Lancer le serveur Flask
if __name__ == '__main__':
app.run(debug=True)et un script dans un document Google sheet:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Run Web Service', 'callWebService')
.addToUi();
}
function callWebService() {
var dossierNumber = '530302446'; // Ce numéro peut être variable, vous pouvez le récupérer dynamiquement si nécessaire
var url = 'https://flask-hello.onrender.com' //+ dossierNumber; // Ajouter le numéro de dossier comme paramètre
var response = UrlFetchApp.fetch(url);
Logger.log(response.getContentText()); // Log pour le débogage
// 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);
});
}ça ne fonctionne pas, Render me retourne 'Erreur : Le dossier 'C:\tmp' n'existe pas.', on dirait qu'il n'arrive à communiquer en local, j'ai executer le code Python en local, ça fonctionne correctement, mais je n'arrive pas déployer l'APIWEB sur RENDER à cause de ce message.
Il y a t-il une astuce pour contourner ça ?
Merci à vous
P
Salut ! Essaye avec un server Node