2012-10-21 9 views
5

Ich habe Temperatursensoren, die die Temperatur von drei Bienenstöcken streamen, und möchte den XML-Strom parsen, um den letzten Wert des Sensors zu liefern.XML mit Javascript (in Google Scripts) analysieren

würde ich gerne haben:

  • Sensor 1: 75 Grad (Stand: 09.04)
  • Sensor 2: 75 Grad (Stand: 09.04)

usw.

ich folgende Skript in Google Scripts ausgeführt wird, aber halten Sie einen Fehler bekommen:

Cannot find function getContentText in object <?xml version="1.0" encoding="UTF-8"?>

Hier

ist die einfache Skript:

function XMLing() { 

    var response = UrlFetchApp.fetch("https://api.cosm.com/v2/feeds/79697.xml?key=[private key here]"); 

    var doc = Xml.parse(response.getContentText(), true); 
    var records = doc.getElements("current_value"); 
    var details = records[0].getText(); 

    return details; 

} 

Hier ist der XML ist:

<eeml xmlns="http://www.eeml.org/xsd/0.5.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="0.5.1" xsi:schemaLocation="http://www.eeml.org/xsd/0.5.1 http://www.eeml.org/xsd/0.5.1/0.5.1.xsd"> 
    <environment updated="2012-10-21T00:44:32.162393Z" created="2012-10-10T21:19:43.373591Z" id="79697" creator="https://cosm.com/users/greennomad"> 
    <private>false</private> 
    <data id="sensor1tem"> 
     <current_value at="2012-10-21T00:44:32.019058Z">67.00</current_value> 
     <max_value>618.0</max_value> 
     <min_value>611.0</min_value> 
    </data> 
    <data id="sensor2tem"> 
     <current_value at="2012-10-21T00:44:32.019058Z">60.57</current_value> 
     <max_value>61.5</max_value> 
     <min_value>60.41</min_value> 
    </data> 
... 
+0

Vielleicht verwenden Sie eine veraltete Methode der API. Ich würde vorschlagen, die API-Dokumentation zu überprüfen – Jay

Antwort

0

Sie könnten prüfen, welche Methoden zur Verfügung:

if (!response.getContentText) { 
    var props = []; 
    for (var p in response) { 
     props.push(p); 
    } 

    var name = typeof response; 
    if (response.contructor) name = response.contructor.name; 

    return name + " { " + props.join(", ") + " }"; 
} 

Meine Vermutung ist, dass UrlFetchApp.fetch() entweder Rückgabe eines Fehlercodes oder spezielle Antwort für XML-Dokumente.


Von der Fehlermeldung, so scheint es, dass UrlFetchApp.fetch() ein XML-Dokument direkt zurückkehrt.

function XMLing() { 

    var response = UrlFetchApp.fetch("https://api.cosm.com/v2/feeds/79697.xml?key=[private key here]"); 

    var doc = null; 
    if (response.getContentText) { 
    doc = Xml.parse(response.getContentText(), true); 
    } 
    else if (response.getElements) { 
    doc = response; 
    } 
    else { 
    var name = typeof response; 
    if (response.constructor) name = response.constructor.name; 
    throw new Exception("Incompatible type: " + name); 
    } 

    var records = doc.getElements("current_value"); 
    var details = records[0].getText(); 

    return details; 

} 
1

Die Fehlermeldung ist ziemlich offensichtlich: Sie werden vielleicht nicht Xml.parse() anrufen müssen Ihre Antwort Objekt eigentlichen Text (die XML-Antwort) und nicht ein Objekt, das eine getContentText() -Methode hat. So sollte das funktionieren:

var doc = Xml.parse(response, true);