ハイパー・マイコン mbedでインターネット 電子工作 5章 リスト5-3 SPXmlWeather

Dependencies:   EthernetInterface HTTPClient TextLCD mbed-rtos mbed spxml

main.cpp

Committer:
sunifu
Date:
2014-07-13
Revision:
0:798ebca9033c

File content as of revision 0:798ebca9033c:

#include "mbed.h"
#include "rtos.h"

#include "TextLCD.h"

#include "EthernetInterface.h"
#include "HTTPClient.h"

#include "spdomparser.hpp"
#include "spxmlnode.hpp"
#include "spxmlhandle.hpp"

TextLCD lcd(p24, p26, p27, p28, p29, p30);
char buf[3000];

int main() {
    EthernetInterface eth;
    int retEth;
    HTTPClient http;  
    int retHttp;
    SP_XmlDomParser parser;
        
    printf("Setting up ...\r\n");
    lcd.cls();
    lcd.locate(0,0);
    lcd.printf("Setting Up...");
    
    eth.init();
    retEth = eth.connect();
    
    lcd.locate(0,0);
    if (!retEth) {
        printf("Network Setup OK\r\n");
        lcd.printf("Network Setup OK");
    } else {
        printf("Network Error %d\r\n", retEth);
        lcd.printf("Network Error %d");
        return -1;
    }
         
    while(true)
    {
        retHttp = http.get("http://weather.yahooapis.com/forecastrss?w=28426187&u=c", buf, sizeof(buf));
    
        lcd.locate(0,1);
        switch(retHttp){
        case HTTP_OK:
            printf("Read completely\r\n");
            lcd.printf("Read completely ");        
            break;
        case HTTP_TIMEOUT:
            printf("Connection Timeout\r\n");
            lcd.printf("Timeout         ");            
            break;
        case HTTP_CONN:
            printf("Connection Error\r\n");
            lcd.printf("Connection Error");
            break;
        default:
            printf("Error\r\n");
            lcd.printf("Error           ");                           
        }        

        parser.append( buf, strlen(buf)); // stream current buffer data to the XML parser
        wait(5.0);    
        printf("\r\n----------%s----------\r\n",buf);
        
        SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() );

        /*        
        SP_XmlCDataNode * title = rootHandle.getChild( "channel" ).getChild("title").getChild(0).toCData();
        printf("\r\n === Title:%s === \r\n",title->getText());
        SP_XmlCDataNode * title1 = rootHandle.getChild( "channel" ).getChild("image").getChild("title").getChild(0).toCData();
        printf("\r\n === Title:%s === \r\n",title1->getText());
        SP_XmlCDataNode * title2 = rootHandle.getChild( "channel" ).getChild("item").getChild("title").getChild(0).toCData();
        printf("\r\n === Title:%s === \r\n",title2->getText());
        */
        
        SP_XmlElementNode * location = rootHandle.getChild( "channel" ).getChild( "yweather:location" ).toElement();
        if (location) {
            printf("\r\n === Location:%s === \r\n",location->getAttrValue("city"));
        }
                     
        SP_XmlElementNode * forecast;
        
        forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",0).toElement();
        if (forecast) {
            printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));
            printf("Condition:%s \n",forecast->getAttrValue("text"));
            printf("Temp:Low%sC High%sC\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
        }        
        
        forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",1).toElement();    
        if (forecast) {
            printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));        
            printf("Condition:%s \n",forecast->getAttrValue("text"));
            printf("Temp:Low%sC High%sC\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
        }        
        
        wait(120.0);
    }  
}