nikola Posted April 12, 2015 Share Posted April 12, 2015 This is a new version of Yahoo! Weather module for ProcessWire, old version of the module can be found at this link. The module has been rewritten, new options have been added alongside with caching from the API (Yahoo! API allows 20.000 calls per hour when using free version, so it comes in handy if your site has a lot of page hits). I've also updated icons in the package (you can easily swap them with yours in module icons folder). You can grab the module from the Modules page or directly from Github link. Update 1.0.1 Yahoo changed their forecast API URL (http://xml.weather.yahoo.com/ instead http://weather. yahooapis.com/), tiny update in Github repo. How to use You can call the module in two different ways: This is a basic call that renders the module, use this if you want only one instance of the module shown with WOEID set in the module settings. <?php echo $modules->get('MarkupYahooWeather')->render(); ?> If you want to show multiple instances of the module, call it this way: <?php $weather = $modules->get('MarkupYahooWeather'); $weather->woeid = 12587912; // Decatur, USA echo $weather->render(); $weather->woeid = 44418; // London, United Kingdom echo $weather->render(); ?> Options This module has the following options: Yahoo! Weather WOEID WOEID (Where On Earth ID) is an unique identifier for each city, you can easily find WOEID by using this site: http://woeid.rosselliot.co.nz. Default = Zagreb Set Locale Sets PHP locale, needed for localized date display. Default = en_US.UTF-8 Set Encoding Converts international date names to right format. Default = ISO-8859-1 Date Format Sets desired date output, formatted with PHP strftime function. Default = %A, %d.%m.%Y. Cache Time Cache time in minutes, caches .xml file(s) retrieved from Yahoo! API and pulls the data locally. Default = 5 minutes Display temperature in Fahrenheit instead of Celsius? Show weather conditions in Celsius or Fahrenheit scale (temperature: C/F; wind speed: km/h, mph; sunrise and sunset: 24h, am/pm). Show 5 day forecast below current weather forecast? Shows extended 5 day forecast, if unchecked, only current weather will be shown. Default = Checked Show wind direction and speed? Shows wind direction and speed. Default = Checked Show sunrise and sunset time? Shows sunrise and sunset time. Default = Checked Autoload script and stylesheet? Renders script and stylesheet during page render, if you prefer to include them manually, turn this option off. Default = Checked Load script in the bottom of the page? If "Autoload script and stylesheet" option is checked, you can select where script should be rendered automatically, before the end of head or body tag. Default = Unchecked Delete Weather Cache Deletes locally stored and cached .xml file(s) from Yahoo! API for all instances of the module. 16 Link to comment Share on other sites More sharing options...
nifel87 Posted March 30, 2016 Share Posted March 30, 2016 Hi! Great module, very helpful. Sorry for my english, I'm not very good with it. I tried your module and at start It worked fine, but since 15th March 2016 Yahoo has introduced a new method for the authentication that use an oauth2 key. Because of this the module doesn't show any information anymore. I tried to fix it but I'm not good enough with php and service requests. Thx again for this module 1 Link to comment Share on other sites More sharing options...
mr-fan Posted March 30, 2016 Share Posted March 30, 2016 hi nifel87 found a hint in a forum that the rss still works without oAuth... It seems that nikola has fixed this problem: https://github.com/nvidoni/MarkupYahooWeather/commit/43f1f95e7942f6f7f02aa58c0b5cb255b1cf111e changed the URL should do the trick for the moment... // Get weather data old API http://weather.yahooapis.com/forecastrss?w=.... // Get weather data new API 15.03.2016 http://xml.weather.yahoo.com/forecastrss?w=.... it's a bit hackish not using their oAuth secret and token and it would for shure be a deadline sometimes...it's always the sh** with external services... Best regards mr-fan 2 Link to comment Share on other sites More sharing options...
nifel87 Posted April 2, 2016 Share Posted April 2, 2016 Hi! Thank you very much for the tip, I tried it and it works perfectly In these days I tried to change the function ___render() as follows: public function convertTemperature($temperature, $unit) { if (strtoupper($unit) == "C") { $temperature = round(($temperature - 32) / 1.8); } return $temperature; } public function convertWindSpeed($speed, $unit) { if ($unit == "km/h") { $speed = round($speed * 1.609344); } return $speed; } public function ___render() { if (wire('page')->template == 'admin') return; $scale = $this->scale == 1 ? 'f' : 'c'; $BASE_URL = "http://query.yahooapis.com/v1/public/yql"; $yql_query = 'select * from weather.forecast where woeid = '.$this->woeid; $yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json"; $weather = $this->getWeather(wire('config')->paths->siteModules . 'MarkupYahooWeather/cache/' . $this->woeid . '.json', $yql_query_url, $this->cache); if ($weather) { $json = json_decode($weather); $location = $json->query->results->channel->location; if (!empty($location)) { $current = $json->query->results->channel->item->condition; $wind = $json->query->results->channel->wind; $sun = $json->query->results->channel->astronomy; $unit = $this->scale == 1 ? 'mph' : 'km/h'; setlocale(LC_TIME, $this->locale); $out = "<div id='weather'>"; $out .= "<div class='location'>"; $out .= "<h1>" . $location->city . ", " . $location->country . "</h1>"; $out .= "<span>" . iconv($this->encoding, 'UTF-8', strftime($this->date, strtotime(date("d.m.Y.")))) . "</span>"; $out .= "</div>"; $out .= "<div class='current'>"; $out .= "<img src='" . $this->config->urls->MarkupYahooWeather . "icons/" . $current->code . ".png'/>"; $out .= "<span class='temp'>" . $this->convertTemperature($current->temp, $scale) . "°" . strtoupper($scale) . "</span>"; $out .= "<div class='condition'>" . __("Current:", __FILE__) . " <span>" . $this->getCondition($current->code) . "</span></div>"; if($this->wind == 1) { $out .= "<div class='wind'>" . __("Wind:", __FILE__) . " <span>" . $this->getWindDirection($wind->direction) . ", " . $this->convertWindSpeed($wind->speed, $unit) . " " . $unit . "</span></div>"; } if($this->time == 1) { $out .= "<div class='sun'>" . __("Sunrise:", __FILE__) . " <span>" . $this->getSunrise($sun->sunrise) . "</span> " . __("Sunset:", __FILE__) . " <span>" . $this->getSunset($sun->sunset) . "</span></div>"; } $out .= "</div>"; $forecast = $json->query->results->channel->item->forecast; if ($this->days == 1) { $out .= "<ul class='forecast'>"; for ($i = 0; $i < 5; $i++) { $out .= "<li>"; $out .= "<span class='day'>" . $this->getDay($forecast[$i]->day) . "</span>"; $out .= "<a class='weather-tooltip' data-toggle='tooltip' data-placement='top' title='" . $this->getCondition($forecast[$i]->code) . "'>"; $out .= "<img src='" . $this->config->urls->MarkupYahooWeather . "icons/" . $forecast[$i]->code . ".png'/>"; $out .= "</a>"; $out .= "<span class='high'>" . $this->convertTemperature($forecast[$i]->high, $scale) . "°" . strtoupper($scale) . "</span>"; $out .= "<span class='low'>" . $this->convertTemperature($forecast[$i]->low, $scale) . "°" . strtoupper($scale) . "</span>"; $out .= "</li>"; } $out .= "</ul>"; } $out .= "</div>"; return $out; } else { return __("This service is temporarily unavailable. Please try again later."); } } else { return __("Unable to contact the service. Please try again later."); } } If you want to, you can use it in a future version of this plugin with oauth support. In this code I use Json and the new address provided from YDN page. Sometimes, however, this new address (provided from yahoo) returns null as follow: { "query": { "count": 0, "created": "2016-04-02T18:00:17Z", "lang": "it-IT", "results": null } } ... and I don't understand why I hope this code will be helpfull for someone else, Best regards, nifel87 Link to comment Share on other sites More sharing options...
nifel87 Posted April 22, 2016 Share Posted April 22, 2016 Unfortunately, http://xml.weather.yahoo.com/ doesn't work anymore Link to comment Share on other sites More sharing options...
mr-fan Posted April 23, 2016 Share Posted April 23, 2016 Maybe i will switch to a other service...since the really great people at yahoo even don't rewrite there docs...on their fu**** changes.... This should be a better alternative: http://www.openweathermap.org/api http://www.openweathermap.org/price But i don't know if i've time now since i've some other projects running - hopefully nikola have some time. I use the weather module just in one project for an outdoor kindergarden...so they know the actual weather and it was just a gimmik at their website... regards mr-fan Link to comment Share on other sites More sharing options...
nifel87 Posted April 30, 2016 Share Posted April 30, 2016 Thanks again for the hint, I'll give it a try. When I'll have the code ready I'll post it on this page best regards nifel87 Link to comment Share on other sites More sharing options...
bernhard Posted April 5, 2018 Share Posted April 5, 2018 hi, there is also this module from 2014: does anybody know the differences and can share their experience? thanks. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now