02.12.2017, 14:31
Anybody any idea why the HomelynK "buienradar" script stopt working at the end of October?
Buienradar script
|
02.12.2017, 14:31
Anybody any idea why the HomelynK "buienradar" script stopt working at the end of October?
02.12.2017, 17:45
Hi,
They probably changed the XML format. Here is a more stable version that ignores the XML changes and with auto object creation: Code: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661 -- Geef station naam op die gebruikt dient te worden
station_naam = "Zwolle" -- Vul hier het weerstation naam in. (Zie tabel hieronder)
--Beschikbare weerstations
-- 1 = Venlo 27 = Goeree
-- 2 = Arnhem 28 = Leeuwarden
-- 3 = Berkhout 29 = Lelystad
-- 4 = Cadzand 30 = West-Utrecht
-- 5 = Utrecht 31 = Maastricht
-- 6 = Den Helder 32 = Noordoostpolder
-- 7 = Eindhoven 33 = Oost-Groningen
-- 8 = Weert 34 = Oosterschelde
-- 10 = Gilzen Rijen 35 = Rotterdam
-- 11 = Goes 36 = Rotterdam Haven
-- 12 = Oost-Overijssel 37 = Schaar
-- 13 = Groningen 38 = Amsterdam
-- 14 = Oost-Zeeland 39 = Midden-Zeeland
-- 15 = Zwolle 40 = West-Friesland
-- 16 = Gorinchem 41 = Texel
-- 17 = Hoek van Holland 42 = Tholen
-- 18 = Zuid-Zeeland 43 = Twente
-- 19 = Hoogeveen 44 = West-Zeeland
-- 20 = Wadden 45 = Vlieland
-- 21 = Enkhuizen-Lelystad 46 = Vlissingen
-- 22 = Schiermonnikoog 47 = Uden
-- 23 = IJmond 48 = Terneuzen
-- 24 = IJmuiden 49 = Hoorn
-- 25 = Katwijk 50 = Wijk aan Zee
-- 26 = Noord-Groningen 51 = Woensdrecht
-- Geef adressen + namen op en activeer de te gebruiken items (actief J/N), objecten worden automatisch aangemaakt indien niet bestaand.
adresmapping = {
['stationnaam'] = {
actief = 'J',
adres = '40/1/0',
naam = 'Station naam',
objecttype = dt.text
},
['datum'] = {
actief = 'J',
adres = '40/1/1',
naam = 'Tijd en datum laatste update van weerstation',
objecttype = dt.text
},
['zin'] = {
actief = 'J',
adres = '40/1/2',
naam = 'Weer tekstueel',
objecttype = dt.text
},
['temperatuurGC'] = {
actief = 'J',
adres = '40/1/3',
naam = 'Temperatuur',
objecttype = dt.text
},
['temperatuur10cm'] = {
actief = 'J',
adres = '40/1/4',
naam = 'Temperatuur op 10 centimeter van maaiveld',
objecttype = dt.text
},
['luchtdruk'] = {
actief = 'J',
adres = '40/1/5',
naam = 'Luchtdruk',
objecttype = dt.text
},
['luchtvochtigheid'] = {
actief = 'J',
adres = '40/1/6',
naam = 'Luchtvochtigheid',
objecttype = dt.text
},
['regenMMPU'] = {
actief = 'J',
adres = '40/1/7',
naam = 'Regen milimeter per uur',
objecttype = dt.text
},
['windrichting'] = {
actief = 'J',
adres = '40/1/8',
naam = 'Windrichting',
objecttype = dt.text
},
['windrichtingGR'] = {
actief = 'J',
adres = '40/1/9',
naam = 'Windrichting in graden',
objecttype = dt.text
},
['windsnelheidMS'] = {
actief = 'J',
adres = '40/1/10',
naam = 'Windsnelheid in meters per seconde',
objecttype = dt.text
},
['windstotenMS'] = {
actief = 'J',
adres = '40/1/11',
naam = 'Windstoten in meter per seconde',
objecttype = dt.text
},
['zichtmeters'] = {
actief = 'J',
adres = '40/1/12',
naam = 'Zicht in meters',
objecttype = dt.text
},
['zonintensiteitWM2'] = {
actief = 'J',
adres = '40/1/13',
naam = 'Zon intensitiet',
objecttype = dt.text
},
['icoonactueel'] = {
actief = 'J',
adres = '40/1/14',
naam = 'URL actueel icoon',
objecttype = dt.text
},
['icoonid'] = {
actief = 'J',
adres = '40/1/15',
naam = 'Icoon id',
objecttype = dt.text
},
['icoon'] = {
actief = 'N',
adres = '40/1/16',
naam = 'Icoon',
objecttype = dt.text
},
['windsnelheidBF'] = {
actief = 'N',
adres = '40/1/17',
naam = 'Windsnelheid in beaufort',
objecttype =
dt.text
},
['regio'] = {
actief = 'N',
adres = '40/1/18',
naam = 'Regio',
objecttype = dt.text
},
['stationcode'] = {
actief = 'N',
adres = '40/1/19',
naam = 'Station code',
objecttype = dt.text
},
['stationid'] = {
actief = 'N',
adres = '40/1/20',
naam = 'Station id',
objecttype = dt.text
},
['lat'] = {
actief = 'N',
adres = '40/1/21',
naam = 'Latitude',
objecttype = dt.text
},
['latGraden'] = {
actief = 'N',
adres = '40/1/22',
naam = 'Latitude in graden',
objecttype = dt.text
},
['lon'] = {
actief = 'N',
adres = '40/1/23',
naam = 'Longitude',
objecttype = dt.text
},
['lonGraden'] = {
actief = 'N',
adres = '40/1/24',
naam = 'Longitude in graden',
objecttype = dt.text
},
['url'] = {
actief = 'N',
adres = '40/1/25',
naam = 'URL',
objecttype = dt.text
},
}
-- Load libs
require('socket.http')
-- Function to create objects
function createobject(item)
grp.create({
name = item.naam,
address = item.adres,
datatype = item.objecttype,
--visparams = item.visparams,
--enums = item.enums,
--units = item.units,
tags = {'Buienradar'},
comment = 'Automatisch aangemaakt door buienradar script',
})
end
-- Set timeout
socket.http.TIMEOUT = 15
-- Get data from API
local data = socket.http.request('http://xml.buienradar.nl/')
--log(data)
if not data then
alert('Weerbericht kan niet worden opgehaald..')
return
end
-- Create result table
weerstationtag = false
result = {}
-- callback for tag start
function starttag(parser, tag, attributes)
-- create new storage in result table for each <item> tag
if tag == 'weerstation' then
weerstationtag = true
table.insert(result, {})
end
currtag = tag
-- Add attribute "id"
if attributes.id ~= nil then
if currtag then
result[ #result ].stationid = attributes.id
end
end
-- Add attribute "regio"
if attributes.regio ~= nil then
if weerstationtag and currtag then
result[ #result ].regio = attributes.regio
end
end
-- Add attribute "zin"
if attributes.zin ~= nil then
if weerstationtag and currtag then
result[ #result ].zin = attributes.zin
end
end
-- Add attribute "ID"
if attributes.ID ~= nil then
if weerstationtag and currtag then
result[ #result ].icoonid = attributes.ID
end
end
end
-- callback for tag end
function endtag(p, tag)
if tag == 'weerstation' then
weerstationtag = false
end
currtag = nil
end
-- callback for character data
function cdata(parser, text, attributes)
-- check if parser is inside of <item> and either in <title> or <description>
if weerstationtag and currtag then
if currtag == 'stationcode' then
result[ #result ].stationcode = text
elseif currtag == 'stationnaam' then
result[ #result ].stationnaam = text
elseif currtag == 'lat' then
result[ #result ].lat = text
elseif currtag == 'lon' then
result[ #result ].lon = text
elseif currtag == 'datum' then
result[ #result ].datum = text
elseif currtag == 'luchtvochtigheid' then
result[ #result ].luchtvochtigheid = text
elseif currtag == 'temperatuurGC' then
result[ #result ].temperatuurGC = text
elseif currtag == 'windsnelheidMS' then
result[ #result ].windsnelheidMS = text
elseif currtag == 'windsnelheidBF' then
result[ #result ].windsnelheidBF = text
elseif currtag == 'windrichtingGR' then
result[ #result ].windrichtingGR = text
elseif currtag == 'windrichting' then
result[ #result ].windrichting = text
elseif currtag == 'luchtdruk' then
result[ #result ].luchtdruk = text
elseif currtag == 'zichtmeters' then
result[ #result ].zichtmeters = text
elseif currtag == 'windstotenMS' then
result[ #result ].windstotenMS = text
elseif currtag == 'regenMMPU' then
result[ #result ].regenMMPU = text
elseif currtag == 'zonintensiteitWM2' then
result[ #result ].zonintensiteitWM2 = text
elseif currtag == 'icoonactueel' then
result[ #result ].icoonactueel= text
elseif currtag == 'temperatuur10cm' then
result[ #result ].temperatuur10cm = text
elseif currtag == 'url' then
result[ #result ].url = text
elseif currtag == 'latGraden' then
result[ #result ].latGraden = text
elseif currtag == 'lonGraden' then
result[ #result ].lonGraden = text
end
end
end
-- create parser
lxp = require('lxp')
parser = lxp.new({
StartElement = starttag,
EndElement = endtag,
CharacterData = cdata,
})
-- parse data
if parser:parse(data) then
parseddata = result
else
log('parse failed')
end
--log(parseddata)
-- loop through LUA result table
if #parseddata > 0 then
for _, item in ipairs(parseddata) do
-- Get item with selected station_naam
if item.regio == station_naam then
if adresmapping.zin.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.zin.adres)
if currentvalue == nil then
createobject(adresmapping.zin)
end
if item.zin ~= currentvalue then
grp.update(adresmapping.zin.adres, item.zin)
end
end
if adresmapping.temperatuurGC.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.temperatuurGC.adres)
if currentvalue == nil then
createobject(adresmapping.temperatuurGC)
end
if item.temperatuurGC ~= currentvalue then
grp.update(adresmapping.temperatuurGC.adres, item.temperatuurGC)
end
end
if adresmapping.windstotenMS.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.windstotenMS.adres)
if currentvalue == nil then
createobject(adresmapping.windstotenMS)
end
if item.windstotenMS ~= currentvalue then
grp.update(adresmapping.windstotenMS.adres, item.windstotenMS)
end
end
if adresmapping.luchtdruk.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.luchtdruk.adres)
if currentvalue == nil then
createobject(adresmapping.luchtdruk)
end
if item.luchtdruk ~= currentvalue then
grp.update(adresmapping.luchtdruk.adres, item.luchtdruk)
end
end
if adresmapping.stationcode.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.stationcode.adres)
if currentvalue == nil then
createobject(adresmapping.stationcode)
end
if item.stationcode ~= currentvalue then
grp.update(adresmapping.stationcode.adres, item.stationcode)
end
end
if adresmapping.url.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.url.adres)
if currentvalue == nil then
createobject(adresmapping.url)
end
if item.url ~= currentvalue then
grp.update(adresmapping.url.adres, item.url)
end
end
if adresmapping.lonGraden.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.lonGraden.adres)
if currentvalue == nil then
createobject(adresmapping.lonGraden)
end
if item.lonGraden ~= currentvalue then
grp.update(adresmapping.lonGraden.adres, item.lonGraden)
end
end
if adresmapping.datum.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.datum.adres)
if currentvalue == nil then
createobject(adresmapping.datum)
end
if item.datum ~= currentvalue then
grp.update(adresmapping.datum.adres, item.datum)
end
end
if adresmapping.stationnaam.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.stationnaam.adres)
if currentvalue == nil then
createobject(adresmapping.stationnaam)
end
if item.stationnaam ~= currentvalue then
grp.update(adresmapping.stationnaam.adres, item.stationnaam)
end
end
if adresmapping.temperatuur10cm.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.temperatuur10cm.adres)
if currentvalue == nil then
createobject(adresmapping.temperatuur10cm)
end
if item.temperatuur10cm ~= currentvalue then
grp.update(adresmapping.temperatuur10cm.adres, item.temperatuur10cm)
end
end
if adresmapping.icoonactueel.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.icoonactueel.adres)
if currentvalue == nil then
createobject(adresmapping.icoonactueel)
end
if item.icoonactueel ~= currentvalue then
grp.update(adresmapping.icoonactueel.adres, item.icoonactueel)
end
end
if adresmapping.lat.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.lat.adres)
if currentvalue == nil then
createobject(adresmapping.lat)
end
if item.lat ~= currentvalue then
grp.update(adresmapping.lat.adres, item.lat)
end
end
if adresmapping.windrichtingGR.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.windrichtingGR.adres)
if currentvalue == nil then
createobject(adresmapping.windrichtingGR)
end
if item.windrichtingGR ~= currentvalue then
grp.update(adresmapping.windrichtingGR.adres, item.windrichtingGR)
end
end
if adresmapping.regio.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.regio.adres)
if currentvalue == nil then
createobject(adresmapping.regio)
end
if item.regio ~= currentvalue then
grp.update(adresmapping.regio.adres, item.regio)
end
end
if adresmapping.luchtvochtigheid.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.luchtvochtigheid.adres)
if currentvalue == nil then
createobject(adresmapping.luchtvochtigheid)
end
if item.luchtvochtigheid ~= currentvalue then
grp.update(adresmapping.luchtvochtigheid.adres, item.luchtvochtigheid)
end
end
if adresmapping.windrichting.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.windrichting.adres)
if currentvalue == nil then
createobject(adresmapping.windrichting)
end
if item.windrichting ~= currentvalue then
grp.update(adresmapping.windrichting.adres, item.windrichting)
end
end
if adresmapping.lon.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.lon.adres)
if currentvalue == nil then
createobject(adresmapping.lon)
end
if item.lon ~= currentvalue then
grp.update(adresmapping.lon.adres, item.lon)
end
end
if adresmapping.zichtmeters.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.zichtmeters.adres)
if currentvalue == nil then
createobject(adresmapping.zichtmeters)
end
if item.zichtmeters ~= currentvalue then
grp.update(adresmapping.zichtmeters.adres, item.zichtmeters)
end
end
if adresmapping.latGraden.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.latGraden.adres)
if currentvalue == nil then
createobject(adresmapping.latGraden)
end
if item.latGraden ~= currentvalue then
grp.update(adresmapping.latGraden.adres, item.latGraden)
end
end
if adresmapping.windsnelheidBF.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.windsnelheidBF.adres)
if currentvalue == nil then
createobject(adresmapping.windsnelheidBF)
end
if item.windsnelheidBF ~= currentvalue then
grp.update(adresmapping.windsnelheidBF.adres, item.windsnelheidBF)
end
end
if adresmapping.windsnelheidMS.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.windsnelheidMS.adres)
if currentvalue == nil then
createobject(adresmapping.windsnelheidMS)
end
if item.windsnelheidMS ~= currentvalue then
grp.update(adresmapping.windsnelheidMS.adres, item.windsnelheidMS)
end
end
if adresmapping.zonintensiteitWM2.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.zonintensiteitWM2.adres)
if currentvalue == nil then
createobject(adresmapping.zonintensiteitWM2)
end
if item.zonintensiteitWM2 ~= currentvalue then
grp.update(adresmapping.zonintensiteitWM2.adres, item.zonintensiteitWM2)
end
end
if adresmapping.regenMMPU.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.regenMMPU.adres)
if currentvalue == nil then
createobject(adresmapping.regenMMPU)
end
if item.regenMMPU ~= currentvalue then
grp.update(adresmapping.regenMMPU.adres, item.regenMMPU)
end
end
if adresmapping.stationid.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.stationid.adres)
if currentvalue == nil then
createobject(adresmapping.stationid)
end
if item.stationid ~= currentvalue then
grp.update(adresmapping.stationid.adres, item.stationid)
end
end
if adresmapping.icoonid.actief == 'J' then
currentvalue = grp.getvalue(adresmapping.icoonid.adres)
if currentvalue == nil then
createobject(adresmapping.icoonid)
end
if item.icoonid ~= currentvalue then
grp.update(adresmapping.icoonid.adres, item.icoonid)
if adresmapping.icoon.actief == 'J' then
if currentvalue == nil then
createobject(adresmapping.icoon)
end
if item.icoonid == 'a' then
grp.update(adresmapping.icoon.adres, 17)
elseif item.icoonid == 'aa' then
grp.update(adresmapping.icoon.adres, 6)
elseif item.icoonid == 'b'then
grp.update(adresmapping.icoon.adres, 12)
elseif item.icoonid == 'bb'then
grp.update(adresmapping.icoon.adres, 13)
elseif item.icoonid == 'c' or item.icoonid == 'cc' then
grp.update(adresmapping.icoon.adres, 7)
elseif item.icoonid == 'd' or item.icoonid == 'dd' then
grp.update(adresmapping.icoon.adres, 10)
elseif item.icoonid == 'e' or item.icoonid == 'ee' then
grp.update(adresmapping.icoon.adres, 9)
elseif item.icoonid == 'f' or item.icoonid == 'ff' then
grp.update(adresmapping.icoon.adres, 2)
elseif item.icoonid == 'g' or item.icoonid == 'gg' then
grp.update(adresmapping.icoon.adres, 5)
elseif item.icoonid == 'h' or item.icoonid == 'hh' then
grp.update(adresmapping.icoon.adres, 3)
elseif item.icoonid == 'i' or item.icoonid == 'ii' then
grp.update(adresmapping.icoon.adres, 3)
elseif item.icoonid == 'j' or item.icoonid == 'jj' then
grp.update(adresmapping.icoon.adres, 19)
elseif item.icoonid == 'k' or item.icoonid == 'kk' then
grp.update(adresmapping.icoon.adres, 16)
elseif item.icoonid == 'l' or item.icoonid == 'll' then
grp.update(adresmapping.icoon.adres, 16)
elseif item.icoonid == 'm' or item.icoonid == 'mm' then
grp.update(adresmapping.icoon.adres, 2)
elseif item.icoonid == 'n' or item.icoonid == 'nn' then
grp.update(adresmapping.icoon.adres, 1)
elseif item.icoonid == 'o' or item.icoonid == 'oo' then
grp.update(adresmapping.icoon.adres, 11)
elseif item.icoonid == 'p' or item.icoonid == 'pp' then
grp.update(adresmapping.icoon.adres, 11)
elseif item.icoonid == 'q' or item.icoonid == 'qq' then
grp.update(adresmapping.icoon.adres, 16)
elseif item.icoonid == 'r' or item.icoonid == 'rr' then
grp.update(adresmapping.icoon.adres, 19)
elseif item.icoonid == 's' or item.icoonid == 'ss' then
grp.update(adresmapping.icoon.adres, 5)
elseif item.icoonid == 't' or item.icoonid == 'tt' then
grp.update(adresmapping.icoon.adres, 8)
elseif item.icoonid == 'u' or item.icoonid == 'uu' then
grp.update(adresmapping.icoon.adres, 4)
elseif item.icoonid == 'v' or item.icoonid == 'vv' then
grp.update(adresmapping.icoon.adres, 1)
elseif item.icoonid == 'w' or item.icoonid == 'ww' then
grp.update(adresmapping.icoon.adres, 15)
elseif item.icoonid == 'x' or item.icoonid == 'xx' then
grp.update(adresmapping.icoon.adres, 9)
elseif item.icoonid == 'y' or item.icoonid == 'yy' then
grp.update(adresmapping.icoon.adres, 20)
elseif item.icoonid == 'z' or item.icoonid == 'zz' then
grp.update(adresmapping.icoon.adres, 20)
elseif item.icoonid == '0' or item.icoonid == '00' then
grp.update(adresmapping.icoon.adres, 19)
elseif item.icoonid == '1' or item.icoonid == '11' then
grp.update(adresmapping.icoon.adres, 20)
else
grp.update(adresmapping.icoon.adres, 19)
end
end
end
end
end
end
endBR, Erwin
02.12.2017, 18:41
Thanks Erwin,
Just tried the script. Still same problem, it says 'Weerbericht kan niet worden opgehaald..' Also the objects are not created automatically. I made a few objects manually but with the same result.
02.12.2017, 22:57
(This post was last modified: 02.12.2017, 23:03 by Erwin van der Zwart.)
Hi,
I tried the script just before i posted it and it worked perfect, objects are only created when values are received and the object is not there yet. So i think there is something wrong with your DNS settings or default gateway address. Can you try to goto system -> status -> network utils and try to ping xml.buienradar.nl? BR, Erwin
03.12.2017, 00:47
(02.12.2017, 22:57)Erwin van der Zwart Wrote: Hi,PING xml.buienradar.nl (217.118.167.65): 56 data bytes --- xml.buienradar.nl ping statistics --- 4 packets transmitted, 0 packets received, 100% packet loss PING www.domodynamic.nl (46.182.216.26): 56 data bytes 64 bytes from 46.182.216.26: seq=0 ttl=58 time=4.698 ms 64 bytes from 46.182.216.26: seq=1 ttl=58 time=4.663 ms 64 bytes from 46.182.216.26: seq=2 ttl=58 time=4.567 ms 64 bytes from 46.182.216.26: seq=3 ttl=58 time=4.672 ms --- www.domodynamic.nl ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 4.567/4.650/4.698 ms Checked DNS and gateway, they are correct. My own website works fine, just not xml.buienradar.nl What am I overlooking here? BR Hajo
03.12.2017, 15:43
All of a sudden the script started working. Thanks Erwin, you'r a miracle worker.
20.12.2017, 17:29
Unfortunately script stopt working again, any suggestions ?
20.12.2017, 19:15
(This post was last modified: 20.12.2017, 19:15 by Erwin van der Zwart.)
Hi,
You are nr 7 today (: They upgraded something on the Buienradar server, call me tomorrow and i can run a fix for you. BR, Erwin |
« Next Oldest | Next Newest »
|