2012-10-21 17 views
5

I sensori di temperatura eseguono lo streaming della temperatura di tre alveari e vorrei essere in grado di analizzare il flusso XML per fornire l'ultimo valore del sensore.Analisi dell'XML con Javascript (in Google Script)

Mi piacerebbe avere:

  • Sensore 1: 75 gradi (aggiornato: 09:04 pm)
  • Sensore 2: 75 gradi (aggiornato: 21:04)

ecc

io corro seguente script in Google script, ma continuo a ricevere un errore:

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

Ecco la semplice script:

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; 

} 

Ecco l'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

Forse, stai utilizzando un metodo obsoleto dell'API. Suggerirei di controllare la documentazione dell'API – Jay

risposta

0

potreste controllare quali sono i metodi disponibili:

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

La mia ipotesi è che UrlFetchApp.fetch() è o restituire qualche codice di errore o ha una risposta speciale per i documenti XML.


Da l'errore-messaggio, sembrerebbe che UrlFetchApp.fetch() sta tornando direttamente un documento XML. Potrebbe non essere necessario chiamare 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

messaggio L'errore è abbastanza ovvia: l'oggetto risposta è un testo vero e proprio (la risposta XML) e non un oggetto che ha un metodo getContentText(). Quindi dovrebbe funzionare:

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