[Admin note: Yeah, I'm pretty sure this doesn't work. The site doesn't handle pasting in code very well, in particular backslashes () are stripped out unless you put two instead. If anyone can figure out the code below and embed it in a geeklet file, let me know and I'll attach it to this post.]
I'm not sure if this will work well outside the US (though I'm sure someone can modify it to work, if needed), but I've been able to write a bash script to update my current conditions and Yahoo weather icon based on an IP Location lookup to get my current Zip code. Since I'm using the US Zip Code for the weather information, I also wrote it to build the weather.png URL from yahoo based on the condition code in the yahoo rss feed and by calculating the correct d/n extension for it (i.e. http://l.yimg.com/a/i/us/nws/weather/gr/.png). I'm still using Geektool 2, so I don't think I can export this as a geeklet, and I'm not great at scripting, so there's probably a better or more efficient way to do this:
#!/bin/bash
current=0
postal1=`curl -s http://ipinfodb.com/my_ip_location.php | awk '/Zip or postal code : /{print $6}';`
postal=`echo "$postal1" | tr -d 'r' | awk '{gsub(//,"")}; 1'`
curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | grep -e "Forecast:" -A2 -B2 |tail -n 4 | grep -v orecast | sed -e 's/
//' -e 's///' | sed -n -E '2n;s/[ ]-[ ](.+)..+:[ ]([0-9]+).+:[ ]([0-9]+)/: 1, 2 | 3/;p'
imagecode=`curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | awk '/yweather:condition/' | sed -e 's/.*code="//' -e 's/".*//';`
sunsethour=`curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | awk '/yweather:astronomy/{print $4}' | sed -e 's/sunset="//' -e 's/:.*//' ;`
sunsetminute=`curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | awk '/yweather:astronomy/{print $4}' | sed -e 's/sunset="//' -e 's/.*://' ;`
:$((sunsethour=$sunsethour+12)); #convert to 24 hour
sunset=$(($sunsethour*60+$sunsetminute));
sunrisehour=`curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | awk '/yweather:astronomy/{print $2}' | sed -e 's/sunrise="//' -e 's/:.*//' ;`
sunriseminute=`curl --silent "http://weather.yahooapis.com/forecastrss?p=$postal&u=f" | awk '/yweather:astronomy/{print $2}' | sed -e 's/sunrise="//' -e 's/.*://' ;`
sunrise=$(($sunrisehour*60+$sunriseminute));
currenthour=$(date +%k);
currentminute=$(date +%M);
current=$(($currenthour*60+$currentminute))
if (("$current" > "$sunrise"))
then
if (("$current" < "$sunset"))
then
dt="d"
else
dt="n"
fi
else
dt="n"
fi
curl --silent "http://l.yimg.com/a/i/us/nws/weather/gr/$imagecode$dt.png" -o /tmp/weather.png
#EOF