[PYTHON] Créez un script pour votre compétence Pepper dans une feuille de calcul et chargez SayText directement à partir du script

Quoi utiliser

La description

J'utilisais Excel, etc. lors de la création du script pour Pepper, mais maintenant j'utilise Google Spread Sheet parce que je veux le faire n'importe où sur le navigateur ou lorsque je développe avec plusieurs personnes. J'entre également la conversation ajustée dans le script et je l'enregistre, il est donc difficile de copier et coller à chaque fois et de mettre à jour le package distribué, j'ai donc rendu possible de le lire tel quel à partir du script ..

Par conséquent, je décrirai chaque élément comme un mémo. Google SpreadSheet

Je fais un scénario comme celui-ci.

スクリーンショット 2016-06-23 22.07.31.png

À partir de la gauche

  1. ID --Le nom de la boîte de dialogue --Le nom de la page à afficher sur l'écran --Conditions --Bouton

Les éléments peuvent changer légèrement en fonction du contenu de la compétence, mais fondamentalement, le script est fait comme ça. Après avoir créé le script, "** XXXXXXXXXXXXXXXX (Book ID) " après " https: //docs.google.com/spreadsheets/d/" dans l'URL de la feuille de calcul et " XXXXXXXXXXXXX (Book ID) " après cela Notez le numéro " 1234567 (Sheet ID) " après " / edit # gid = **". Ceux-ci sont utilisés lors de l'envoi d'une requête de Choregraphe.

Google Apps Script

SayText.gs


//Adresse e-mail à envoyer en cas d'erreur
var managerAddr = "[email protected]";


function doGet(e) {
  //Reçoit un paramètre nommé param1.
  var json = JSON.parse(e.parameter.param1);
  //Ouvrez la feuille de calcul BookID de paramètres
  var ss = SpreadsheetApp.openById(decodeURI(json["sayDb_id"]));
  //Obtenir la feuille dans une feuille de calcul ouverte
  var sheets = ss.getSheets();
  
  for (var i in sheets){
    var sheet = sheets[i];
    //Démarrer le traitement lorsque l'ID de feuille spécifié par le paramètre est trouvé
    if (sheet.getSheetId() == json["db_id"]){
      var say_txt = getSayTxt(sheet);
    }
  }
  //Retour avec json
  return ContentService.createTextOutput(JSON.stringify(say_txt)).setMimeType(ContentService.MimeType.JSON);
}

function getSayTxt(sheet) {
  var sCol = 1;
  var sRow = 2;
  var lRow = sheet.getLastRow();
  
  //La première ligne est"id"Trouvez la colonne avec le nom
  var sayIdCol = getSayTxtCol(sheet, "id");
  //De même"pepaLanguage"Trouvez la colonne avec le nom
  var sayTxtCol = getSayTxtCol(sheet, "pepaLanguage");
  //Si non trouvé, retournez avec une erreur.
  if (sayTxtCol == 0 || sayIdCol == 0){
    GMailApp.sendMail(managerAddr, "Lorsque getSay est exécuté", "Il semble y avoir une feuille où la colonne est introuvable." + sheet.getSheetId());
    Logger.log("Columns is not found");
    return [];
  }
  
  //"id"Quand"pepaLanguage"の位置を確認しておかしなこQuandにならないようにしてる。
  if (sayIdCol > sayTxtCol){
    var data = sheet.getRange(sRow, sayTxtCol, lRow, sayIdCol).getValues();
  }else{
    var data = sheet.getRange(sRow, sayIdCol, lRow, sayTxtCol).getValues();
  }
  var json = new Object();
  var jsonArray = [];
  //je vais ajouter
  for (var i = 0; i < data.length -1; i++){
    var val = data[i][sayIdCol - 1];
    if (val != "" && val != null){
      json[String(data[i][sayIdCol - 1])] = data[i][sayTxtCol - 1];
    }
  }
  jsonArray.push(json);
  return jsonArray;
}
  
function getSayTxtCol(sheet, title){
  var lCol = sheet.getLastColumn();
  for (var i = 1; i <= lCol; i++){
    if (sheet.getRange(1, i).getValue() == title){
      return i;
      break;
    }
  }
  return 0;
}

Choregraphe (Python) Si vous regardez Python, vous pouvez le voir.

LoadSayText.py


class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.memory = ALProxy("ALMemory")

    def onUnload(self):
        self.memory = None

    def onInput_onStart(self):
        import urllib, urllib2, json
        #Créez des paramètres.
        #Dans l'application réelle, il est passé en mémoire.
        p = {
            "sayDb_id":XXXXXXXXXXXXXXXX(Book ID),
            "db_id":1234567(Sheet ID)
            }
        data ={}

        try:
            data['param1'] = json.dumps(p)
            url_values = urllib.urlencode(data)
            full_url = '%s?%s' % url(URL de l'API), url_values)
            request = urllib2.urlopen(full_url)
            self.json = json.loads(request.read(), "utf-8")[0]

            if len(self.json) == 0:
                self.onNotFound()
                return
            #Enregistrez la valeur renvoyée en mémoire.
            #Appelez le texte enregistré avec SayBox et laissez-le parler.
            for key, value in self.json.items():
                self.memory.insertData("SayText/%d" % int(key), value.encode('utf-8'))
            self.onStopped()
        except Exception as e:
            self.logger.warn('==========contenu de l'erreur==========')
            self.logger.warn(e)
            self.logger.warn('============================')
            self.onError()

la fin

J'ai trouvé un endroit où j'écrivais et une petite erreur était susceptible de se produire.

Recommended Posts

Créez un script pour votre compétence Pepper dans une feuille de calcul et chargez SayText directement à partir du script
Remarques sur l'intégration du langage de script dans les scripts bash
Remarque 2 pour intégrer le langage de script dans un script bash
Analysez l'API Researchmap avec Python et créez automatiquement un fichier Word pour la liste des succès
Créez un modèle pour stocker les informations de l'API Google Livres pour une manipulation et des tests intuitifs
Enregistrez le fichier d'authentification Pydrive dans un répertoire différent du script
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
Créez un modèle pour votre planning Django
Créez une commande pour rechercher des composés similaires dans la base de données cible avec RDKit et vérifiez le temps de traitement
Changer la liste dans l'instruction for
Exécuter l'interpréteur Python dans le script
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
J'ai eu la date du riz du pub de Kagawa et j'ai dessiné un graphique
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
[Django] Créez un formulaire qui remplit automatiquement l'adresse à partir du code postal
Créez une base de données propre pour les tests avec FastAPI et effectuez le test Unittest de l'API avec pytest
Créer une nouvelle tâche Todoist à partir d'un script Python
Charger et exécuter la commande depuis yml avec python
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Accédez aux variables définies dans le script depuis REPL
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com