Subj : Re: Synchronet Javascript and reading XML
To   : echicken
From : KenDB3
Date : Fri Jul 29 2016 04:49 pm

> There's already some code for dealing with this exact feed, but it's
> embedded in an IRC bot.  You might be able to find something useful in:
> '/exec/ircbots/ham/ham.js', however this should work:

> load('http.js');
> try {
>   var solardata = new XML(
>     (new HTTPRequest()).Get(
>       'http://www.hamqsl.com/solarxml.php'
>     ).replace(
>       /<\?[^?]*\?>/g, ''
>     )
>   ).solardata;
> } catch (err) {
>   log('Shit done borked! ' + err);
> }

> (See https://bbs.electronicchicken.com/temp/solar.txt if that didn't come
> through okay.)

> You should then be able to get at the values from the feed like so:

> print(solardata.sunspots);
> print(solardata.solarwind);

> And so on.

> The IRC bot code mentioned above has examples of how to deal with the nested
> 'calculated(vhf)conditions' values, which gets deeper into E4X than I care
> to do right now.


EC, I have another question (or anyone that feels they can answer).

I notice in the IRC bot code that you can get banned for hitting the web page
too often.

Would there be a way to bring in the XML data without an HTTPRequest from a
local file? Say something I saved from the last successful pull from the live
file and defined as:
var localfile = js.exec_dir + "solar.php";
where solar.php was saved from a previous lookup less than an hour ago?

My awful attempt to do this currently looks like this:

if((time() - last_solar_update) > 60*60) {
       try {
         var solardata = new XML(
               (new HTTPRequest()).Get(
                 'http://bbs.kd3.us/sol/solarxml.php.xml'
               ).replace(
                 /<\?[^?]*\?>/g, ''
               )
         ).solardata;
       } catch (err) {
         log('Shit done borked! ' + err);
       }
} else {
       try {
       var localfile = js.exec_dir + "solar.php";
       var localPHPfile = new File(localfile);
       localPHPfile.open("r");         // open file with read access
       var localXMLfile = localPHPfile.readAll();
       var fixedXMLfile = localXMLfile.replace(
                 /<\?[^?]*\?>/g, ''
                 );
       var solardata = new XML(
               fixedXMLfile.solardata);
       } catch (err) {
         log('Shit done borked! ' + err);
       }
       localPHPfile.close();
}

Also, if this is simply a crazy thing to try and do, feel free to let me know.
localXMLfile keeps coming back as null and I'm not sure where I've gone wrong
anymore.

~KenDB3