• User Attivo

    Php e meteo con Yahoo Weather

    Qualcuno ha usato le api di Yahoo Wheater?

    Ho questo script per mettere le condizioni Meteo, ma mi segnala un errore quando dichiaro l'oggetto di yahoo:

    
    <?php 
    /* Yahoo! Weather API component for Cakephp
     * @author Arash Hemmat www.hemmat.biz
     * @version 1.2  some bugs has been fixed.
     * @license http://www.opensource.org/licenses/mit-license.php
     * Special thanks to "Ed Eliot" (http://www.ejeliot.com/blog/38) ,I used his code for this component.
     */
    
    /*
     * Yahoo weather component class
     */
    class yahooWeatherComponent extends Object
    {
        /*
         * @var bool
         */
        var $controller = true;
    
        /*
         * @var array
         */
        var $errors=array();
    
        /*
         * @var string
         */
        var $content;
    
        /*
         * The url of Yahoo! weather API
         * @var string
         */
        var $WEATHER_API_URL='http://weather.yahooapis.com/forecastrss?p=';
    
        /*
         * THe address for images, you need to change this if you want to use your own images.
         * @var string
         */
        var $WEATHER_IMAGE_BASE='http://l.yimg.com/us.yimg.com/i/us/we/52/';
        
        /*
         * initialization
         * @param bool $controller
         */
        function startup(&$controller)
        {
            $this->controller =& $controller;
        }
    
        /*
         * Get the weather information for given location code
         * @param string $locationCode a code that represent a location in Yahoo weather system
         * @param string $degreeUnit it could be f: Fahrenheit or c: Celsius
         * @param bool $translate this parametr indicates if the result should be translated of not
         * @return array|bool $result
         */
        function get_weather($locationCode,$degreeUnit='c')
        {
            if($this->content = file_get_contents($this->WEATHER_API_URL.$location_code.'&u='.$degreeUnit))
            {
                $result['location']=$this->GetTagAttributes('yweather:location');
                $result['condition']=$this->GetTagAttributes('yweather:condition');
                $result['units']=$this->GetTagAttributes('yweather:units');
                $result['wind']=$this->GetTagAttributes('yweather:wind');
                $result['atmosphere']=$this->GetTagAttributes('yweather:atmosphere');
                $result['astronomy']=$this->GetTagAttributes('yweather:astronomy');
                $result['geo:lat']=$this->GetTagValue('geo:lat');
                $result['geo:long']=$this->GetTagValue('geo:long');
                $result['link']=explode('*',$this->GetTagValue('link'));
                $result['pubDate']=$this->GetTagValue('pubDate');
                $result['description']=$this->GetTagValue('description');
                $result['image_url']=$this->WEATHER_IMAGE_BASE.$result['condition']['code'].'.gif';
                $forecasts=$this->GetTagAttributes('yweather:forecast');
                $result['tonight_forecast']=$forecasts[0];
                $result['tonight_forecast']['image_url']=$this->WEATHER_IMAGE_BASE.$result['tonight_forecast']['code'].'.gif';        
                $result['tomorrow_forecast']=$forecasts[1];
                $result['tomorrow_forecast']['image_url']=$this->WEATHER_IMAGE_BASE.$result['tomorrow_forecast']['code'].'.gif';
                return $result;
            }
            else
            {
                $this->errors[]='Unable to connect to yahoo api.';
                return false;
            }
        }
    
        /*
         * @param string $sTag
         * @return bool
         */
        function GetTagValue($sTag)
        {
            $aMatches = array();
                
            if (preg_match("/<$sTag>([^<]*)<\/$sTag>/i", $this->content, $aMatches))
            {
                $aResult = array();
                $aResult['value'] = $aMatches[1];
                return trim($aMatches[1]);
            }
            return false;
        }
    
        /*
         * @param string $sTag
         * @return string $aResult
         */
        function GetTagAttributes($sTag)
        {
            $aMatches = array();
                
            if (preg_match_all("/<$sTag([^\/]*)\/>/i", $this->content, $aMatches))
            {
                $aResult = array();
    
                for ($i = 0; $i < count($aMatches[1]); $i++)
                {
                    $aSubMatches = array();
    
                    if (preg_match_all("/([^=]+)=\"([^\"]*)\"/i", $aMatches[1]*, $aSubMatches))
                    {
                        for ($j = 0; $j < count($aSubMatches[1]); $j++)
                        {
                            $aResult*[trim($aSubMatches[1][$j])] = trim($aSubMatches[2][$j]);
                        }
                    }
                }
                $iNumResults = count($aResult);
                if ($iNumResults > 1)
                {
                    return $aResult;
                } elseif ($iNumResults == 1)
                {
                    return $aResult[0];
                }
            }
            return false;
        }
    }
    ?>
    

    Qualcuno ha usato questa classe o sa dirmi come fare per farlo funzionare?