Jeg har laget mitt eget hack med en cron-jobb, wget og Python både for meteogram og for værradar.
For meteogram, så gjør jeg i praksis et screenshot av yr-nettsida for Bergen. For å få til et 'screenshot' kjørt headless hvert kvarter har jeg tatt i bruk 'xvfb-run wkhtmltoimage'. Selvsagt penere om man klarer embedde HTML og CSS, men jeg endte altså opp med å generere en statisk PNG-fil som vises i mitt HABPanel.
For værradar så har jeg tilsvarende løsning, med statisk bilde, men også innzoomet. Ønsker ikke å se radar for hele vestlandet hele tida, bare rett rundt Bergen.
Bash-kode som kjøres via Cron:
#!/bin/bash
bergenmeteogram=/var/www/html/bergenmeteogram.png
bergenradar=/var/www/html/bergenradar
xvfb-run wkhtmltoimage --quiet http://localhost/yrbergen.html $bergenmeteogram
convert -crop $((846-19))x$((338-67))+19+67 -level 0%,100%,0.4 $bergenmeteogram $bergenmeteogram
wget --quiet "https://www.yr.no/_/proxy/met_images.aspx?radarsite=western_norway;size=large;type=reflectivity;content=image" -O ${bergenradar}.png
python /home/berland/bin/radarcrop.py ${bergenradar}.png ${bergenradar}cropped.png
Python-koden som gjør crop/zoom:
# Klipper ut et område rundt Bergen fra radarbildet
# og legger på klokkeslettet innenfor samme område
#
# Bruk:
# python radarcrop.py origimage.png newimage.png
import sys
import math
import Image, ImageFilter, ImageEnhance
poi_coords = (289, 472) # Point of interest location in pixels
timestamp_ul = (552, 5) # upper left
timestamp_lr = (627, 50) # lower right
timestamp_width = timestamp_lr[0] - timestamp_ul[0]
timestamp_height = timestamp_lr[1] - timestamp_ul[1]
timestamp_aspect = float(timestamp_width) / float(timestamp_height)
newtimestampwidth = 50
orig_width = 320 # width in pixels in original image
new_width = 250
aspect = 1
orig_image = Image.open(sys.argv[1]).convert('RGBA')
new_image = Image.new('RGBA', (new_width, new_width/aspect))
zoomedradar = orig_image.crop(
(poi_coords[0] - orig_width/2,
poi_coords[1] - orig_width/aspect/2,
poi_coords[0] + orig_width/2,
poi_coords[1] + orig_width/aspect/2))\
.resize((new_width, new_width/aspect), Image.ANTIALIAS)\
.filter(ImageFilter.SHARPEN)
timestamp = orig_image.crop(
(timestamp_ul + timestamp_lr))\
.resize((newtimestampwidth, int(newtimestampwidth/timestamp_aspect)))\
.filter(ImageFilter.SHARPEN)
mask = Image.new('L', timestamp.size, color=150)
timestamp.putalpha(mask)
zoomedradar.paste(timestamp, (10,10), mask)
contrast = ImageEnhance.Contrast(zoomedradar)
zoomedradar = contrast.enhance(1.2)
zoomedradar = zoomedradar.point(lambda x: math.pow(x/float(256), 1.8)*256)
zoomedradar.convert('RGB').save(sys.argv[2])
Og så ser jeg at bash-koden refererer til ei lokal html-fil for å lage screenshot, den fila inneholder:
<script src="http://www.yr.no/sted/Norge/Hordaland/Bergen/Bergen/ekstern_boks_time_for_time.js"></script><noscript><a href="http://www.yr.no/sted/Norge/Hordaland/Bergen/Bergen/">yr.no: Værvarsel for Bergen</a></noscript>
Eksempel fra mitt HABpanel finnes her: