1

I am trying to output the current time and temperature for a phone in line. It needs to be output as XML. So far I have

<?php
header("content-type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<Response>";
echo "<Say>";
echo('Time is');
echo date('H:i');
echo('Temp is');
echo "</Say>";
echo "</Response>";
?>

The problem i run into is getting the temperature. I have the following sample I have been trying to use. But every time i try to include it I get Warning: Cannot modify header information - headers already sent by

<?php

function getWeatherRSS($weatherLink){

   if ($fp = fopen($weatherLink, 'r')) {
      $content = '';

      while ($line = fread($fp, 1024)) {
         $content .= $line;
      }
   }

   return $content;  
}

function processWeather($wurl){

    $wrss = getWeatherRSS($wurl);
    $temp  = '-';
    $tempu = '';
    $city  = '';
    if (strlen($wrss)>100){
        // Get temperature unit C or F
        $spos = strpos($wrss,'yweather:units temperature="')+strlen('yweather:units temperature="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $tempu = substr($wrss,$spos,$epos-$spos);
        } 

        $spos = strpos($wrss,'yweather:wind chill="')+strlen('yweather:wind chill="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $temp += substr($wrss,$spos,$epos-$spos);
        } else {
            $temp = '-';
        }

        // Get city name
        $spos = strpos($wrss,'yweather:location city="')+strlen('yweather:location city="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $city = substr($wrss,$spos,$epos-$spos);
        } 

    }

    return $city.' &nbsp;'.$temp.' &deg;'.$tempu;

}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
   <title>Micro Weather</title>
   <link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div id="main">
      <div id="caption">CURRENT WEATHER</div>
      <div id="icon2">&nbsp;</div>
      <div id="result"><?php echo processWeather('http://xml.weather.yahoo.com/forecastrss?p=USAR0543&u=f'); ?>
      </div>
      <div id="source">Micro Weather 1.0</div>
    </div>
</body>   

Any tips on how I can pass the temperature into the XML?

2 Answers2

0

You can't send headerd after outputting text. Put all of your prints and echo instances after the last header call.

You may use a redirect if required with form data.

0

I ended up getting it to work with the following

<?php
date_default_timezone_set('America/Chicago');


function getWeatherRSS($weatherLink){

   if ($fp = fopen($weatherLink, 'r')) {
      $content = '';

      while ($line = fread($fp, 1024)) {
         $content .= $line;
      }
   }

   return $content;  
}

function processWeather($wurl){

    $wrss = getWeatherRSS($wurl);
    $temp  = '-';
    $tempu = '';
    $city  = '';
    if (strlen($wrss)>100){
        // Get temperature unit C or F
        $spos = strpos($wrss,'yweather:units temperature="')+strlen('yweather:units temperature="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $tempu = substr($wrss,$spos,$epos-$spos);
        } 

        $spos = strpos($wrss,'yweather:wind chill="')+strlen('yweather:wind chill="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $temp += substr($wrss,$spos,$epos-$spos);
        } else {
            $temp = '-';
        }

        // Get city name
        $spos = strpos($wrss,'yweather:location city="')+strlen('yweather:location city="');
        $epos = strpos($wrss,'"',$spos);
        if ($epos>$spos){
            $city = substr($wrss,$spos,$epos-$spos);
        } 

    }

    return $temp;


}
   $a = processWeather('http://xml.weather.yahoo.com/forecastrss?p=USAR0543&u=f');

header("content-type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<Response>";
echo "<Say>";
echo('TXK Today Time is');
echo "</Say>";
echo "<Say>";
echo date('g:i ');
echo "</Say>";
echo "<Say>";
echo('Current Temperature');
echo "</Say>";
echo "<Say>";
echo $a;
echo "</Say>";
echo "</Response>";
?>