Hello there,
I'm using a script for getting yahoo weather forecast on my site. The script includes and html file and a js file that do the job. Everything works great but i need some help on translating description words that comes from rss feed like "Clear", "Humidity", "Storm", etc... I now that in php exist something like preg_replace function, but i have no clue how to do it in js.
This is the js file:
/**
* Plugin: jquery.zWeatherFeed
*
* Version: 1.0.2
* (c) Copyright 2010, Zazar Ltd
*
* Description: jQuery plugin for display of Yahoo! Weather feeds
*
* History:
* 1.0.2 - Correction to options / link
* 1.0.1 - Added hourly caching to YQL to avoid rate limits
* Uses Weather Channel location ID and not Yahoo WOEID
* Displays day or night background images
*
**/
(function($){
var row = 'odd';
$.fn.weatherfeed = function(locations, options) {
// Set pluign defaults
var defaults = {
unit: 'c',
image: true,
highlow: true,
wind: true,
link: true,
showerror: true
};
var options = $.extend(defaults, options);
// Functions
return this.each(function(i, e) {
var $e = $(e);
// Add feed class to user div
if (!$e.hasClass('weatherFeed')) $e.addClass('weatherFeed');
// Check and append locations
if (!$.isArray(locations)) return false;
var count = locations.length;
if (count > 10) count = 10;
var locationid = '';
for (var i=0; i<count; i++) {
if (locationid != '') locationid += ',';
locationid += "'"+ locations[i] + "'";
}
// Cache results for an hour to prevent overuse
now = new Date();
// Create Yahoo Weather feed API address
var query = "select * from weather.forecast where location in ("+ locationid +") and u='"+ options.unit +"'";
var api = 'http://query.yahooapis.com/v1/public/yql?q='+ encodeURIComponent(query) +'&rnd='+ now.getFullYear() + now.getMonth() + now.getDay() + now.getHours() +'&format=json&callback=?';
// Send request
//$.getJSON(api, function(data) {
$.ajax({
type: 'GET',
url: api,
dataType: 'json',
success: function(data) {
if (data.query) {
if (data.query.results.channel.length > 0 ) {
// Multiple locations
var result = data.query.results.channel.length;
for (var i=0; i<result; i++) {
// Create weather feed item
_callback(e, data.query.results.channel[i], options);
}
} else {
// Single location only
_callback(e, data.query.results.channel, options);
}
} else {
if (options.showerror) $e.html('<p>Weather information unavailable</p>');
}
},
error: function(data) {
if (options.showerror) $e.html('<p>Weather request failed</p>');
}
});
});
};
// Function to each feed item
var _callback = function(e, feed, options) {
var $e = $(e);
// Format feed items
var wd = feed.wind.direction;
if (wd>=348.75&&wd<=360){wd="V"};if(wd>=0&&wd<11.25){wd="Veriu"};if(wd>=11.25&&wd<33.75){wd="Veri-VeriLindja"};if(wd>=33.75&&wd<56.25){wd="VeriLindja"};if(wd>=56.25&&wd<78.75){wd="Lindja-VeriLindja"};if(wd>=78.75&&wd<101.25){wd="Lindja"};if(wd>=101.25&&wd<123.75){wd="Lindja-JugLindja"};if(wd>=123.75&&wd<146.25){wd="JugLindja"};if(wd>=146.25&&wd<168.75){wd="Jugu-JugLindja"};if(wd>=168.75&&wd<191.25){wd="Jugu"};if(wd>=191.25 && wd<213.75){wd="Jugu-JugPerendimi"};if(wd>=213.75&&wd<236.25){wd="JugPerendimi"};if(wd>=236.25&&wd<258.75){wd="Perendimi-JugPerendimi"};if(wd>=258.75 && wd<281.25){wd="Perendimi"};if(wd>=281.25&&wd<303.75){wd="Perendimi-VeriPerendimi"};if(wd>=303.75&&wd<326.25){wd="VeriPerendimi"};if(wd>=326.25&&wd<348.75){wd="Veri-VeriPerendimi"};
var wf = feed.item.forecast[0];
// Determine day or night image
wpd = feed.item.pubDate;
n = wpd.indexOf(":");
tpb = _getTimeAsDate(wpd.substr(n-2,8));
tsr = _getTimeAsDate(feed.astronomy.sunrise);
tss = _getTimeAsDate(feed.astronomy.sunset);
if (tpb>tsr && tpb<tss) { daynight = 'd'; } else { daynight = 'n'; }
// Add item container
var html = '<div class="weatherItem '+ row +'"';
if (options.image) html += ' style="background-size:110%;background-image: url(http://l.yimg.com/a/i/us/nws/weather/gr/'+ feed.item.condition.code + daynight +'.png); background-repeat: no-repeat;"';
html += '>';
// Add item data
html += '<div class="weatherCity">'+ feed.location.city +'</div>';
html += '<div class="weatherTemp">'+ feed.item.condition.temp +'°</div>';
html += '<div class="weatherDesc">'+ feed.item.condition.text +'</div>';
if (options.highlow) html += '<div class="weatherRange"><b style="color:red;">Lartë</b>: '+ wf.high +'° <b style="color:green;">Ulët:</b> '+ wf.low +'°</div>';
if (options.wind) html += '<div class="weatherWind"><b>Era fryn nga</b> '+ wd +' '+ feed.wind.speed+' '+ feed.units.speed +'</div>';
html += '</div>';
// Alternate row classes
if (row == 'odd') { row = 'even'; } else { row = 'odd'; }
$e.append(html);
};
// Get time string as date
var _getTimeAsDate = function(t) {
d = new Date();
r = new Date(d.toDateString() +' '+ t);
return r;
};
})(jQuery);
I only need an example since the rest i can do by myself.
Thank you in advance!