2012-10-21 17 views
5

Mam czujniki temperatury przesyłające temperaturę trzech uli i chciałbym móc przeanalizować strumień XML, aby podać ostatnią wartość czujnika.Parsowanie XML z JavaScript (w Google Scripts)

chciałbym posiadać:

  • Sensor 1: 75 stopni (aktualizacja: 09:04 pm)
  • Sensor 2: 75 stopni (aktualizacja: 21:04)

itp

biegnę następujący skrypt skrypty Google, ale wciąż otrzymuję błąd:

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

Oto prosty skrypt:

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; 

} 

Oto XML:

<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

Być może używasz przestarzałej metody interfejsu API. Sugeruję sprawdzenie dokumentacji interfejsu API – Jay

Odpowiedz

0

Można sprawdzić, które metody są dostępne:

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(", ") + " }"; 
} 

Domyślam się, że UrlFetchApp.fetch() jest albo zwraca kod błędu lub ma specjalną odpowiedź dla dokumentów XML.


Z BŁĘDÓW wiadomości, wydaje się, że UrlFetchApp.fetch() wraca bezpośrednio XML dokumentu. Może nie trzeba zadzwonić Xml.parse():

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

komunikat Błąd jest dość oczywiste: Twoja odpowiedź jest obiekt rzeczywisty tekst (odpowiedź XML), a nie przedmiot, który ma metodę getContentText(). Powinno to zadziałać:

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