blog


GeekTool & Yahooweather


1


reactie
geektool

Voor wie niet bekend is met GeekTool voor de mac, een korte introductie: GeekTool is een simpele manier om UNIX-commando’s op een mooie en grafische manier weer te geven op ‘t OSX-bureaublad. Op google afbeeldingen stikt het van de coole GeekTool voorbeelden.
  

Het lokale weer weergeven is met GeekTool erg eenvoudig, dat kan via een simpel curl-commando en wat html:

curl --silent "http://xml.weather.yahoo.com/forecastrss?p=CITYCODE&u=c" | grep -E '(Current Conditions:|C<BR)' | sed -e 's/Current Conditions://' -e 's/<br \/>//' -e 's/<b>//' -e 's/<\/b>//' -e 's/<BR \/>//' -e 's/<description>//' -e 's/<\/description>//'

(Waar -CITYCODE- staat dien je de yahoo citycode in te voeren van je huidige stad. Deze kun je achterhalen aan de hand van de url):

 
Nu is dit leuk, maar over het algemeen vind ik een visuele weergave fijner. Je kunt met GeekTool afbeeldingen weergeven, maar dan heb je wel een url nodig. En aangezien Yahoo bij andere weertypes andere afbeeldingen weergeeft, heb je een tussen-script nodig die de afbeelding uit de pagina filtert en alleen de juiste afbeelding weergeeft.
 
Het duurde even (vooral omdat Yahoo de weer-afbeelding als een background-image op een div heeft gemonteerd), maar met wat PHP en de hulp van deze geniale DOM-parse class in PHP van John Schlick, is het gelukt om de background-image van de “forecast-icon”-div te rippen en alleen deze afbeelding weer te geven. Hier de broncode:

include 'simple_html_dom.php';
 
$url="http://weather.yahoo.com/netherlands/north-brabant/os-732462/"; //Yahoo Weather URL
 
//fijn dom script:
$html = file_get_html($url);
 
$pieces = array();
 
// zoek de juiste div en pak daar het style attribuut van:
foreach($html->find('div[class=forecast-icon]') as $element){
	//substring vervolgens alleen de url:
	$start = substr($element-&gt;style, 16);
	$pieces = explode("'); _background-image/*", $start);
}
 
$file = $pieces[0];
 
$image = imagecreatefrompng($file); //image als source in php laden
imagealphablending($image, true); //alphablending moet aan staan voor transparantie
imagesavealpha($image, true); //save als een alpha bestand.
 
header('Content-Type: image/png'); //maak van deze webpagina een png
imagepng($image); //en zet de png d'r in.

Dit script kun je hier downloaden (inclusief de DOM-parser).
 
Andere toffe GeekTool-scripts kunnen jullie kwijt in de reacties!

gepost op 05-08-2011 in "OSX" "PHP"

Reacties



  1. Matthias zei:

    Hoe doe je dit nu precies werken in geektool? Hier werkt het alleszins niet…

Reageer


(Je emailadres wordt niet weergegeven)

Reactie: