a:8:{s:4:"name";s:15:"txp_weather_0.1";s:6:"author";s:13:"Simon Lindley";s:10:"author_uri";s:24:"http://www.simonaut.com/";s:7:"version";s:4:"v0.1";s:11:"description";s:52:"Show the temperature from the weather.com xoap data.";s:4:"help";s:806:"<h1>weather plug-in</h1>

<h2>description</h2>

<p>I created this plug-in for textpattern to help people out since I wanted the weather on my site, I wanted to bring it to others.</p>

<p>The plugin right now is very simple I plan on more features like showing what fields you would like and not being forced into just showing the temperature, city, and 

state.</p>

<h2>Documentation</h2>

<p><strong>Lastest Verison</strong></p>

<ul>
<li>To see the lastest documentation please <a href="http://www.simonaut.com/2005/10/30/txp-weather-plug-in" title="Documentation">Click Here</a>.</li>
</ul>

<h2>History</h2>

<p>2005-10-30 v.0.1</p>

<ul>
<li>initial version</li>
</ul>

<p><b>~Simon</b></p>
<p>My Site: <a href="http://www.simonaut.com/" title="My Site">Click Here</a></p>";s:4:"code";s:1005:"// weather showing plugin
// by Simon Lindley
// http://www.simonaut.com/
// Version 0.1   - 10/30/2005

function weather($atts) {

extract($atts);

class Weather  {
   function Weather($zip) {
      $xoap=join('',file("http://xoap.weather.com/weather/local/".$zip."?cc=*&prod=xoap&par=1003188692&key=7392ac66b4e27671"));
      $this->RAWXML = $xoap;
      $info = $this->ext('<dnam>','</dnam>',$xoap);

          if(eregi('(.*), (.*) ((.*))', $info, $m)) {
              $this->City = $m[1];
              $this->State = $m[2];
          }
      $this->Temperature=$this->ext('<tmp>','</tmp>',$xoap);
   }

   function ext($One,$Two,$Three) {
      $Reg = $One.'(.*)'.$Two;

         if(eregi($Reg,$Three,$m)) {
            return $m[1];
         } else {
            return 'N/A';
         }
   }

}

$output = new Weather($zip);

$Out  = $output->Temperature;
$Out .= '&deg;F in ';
$Out .= $output->City;
$Out .= ', ';
$Out .= $output->State;
return($Out);

}";s:3:"md5";s:32:"f22798ada274afba19b907cbfbb976e0";}