Hi all!
I do my daily commute by train and bus between home and office. And since I will spend every minute available in bed my morning routine is VERY efficient with no room for errors or else I will miss my train.
The trains are not that reliable in the Netherlands and its not strange for me to rush towards the train station to come to the conclusion that the train is delayed or is not coming at all.
So my though, lets crack open an IKEA battery powered lamp, replace the LEDs with NeoPixels, add a dot-matrix and create myself a notification light in the hall way telling me if my train is on time or not and if not how many minutes delay.
So I created a webhook which calls the API of the āNederlandse Spoorwegenā (Dutch railways) who in return response with departure times of trains on my station.
But the webhook response is split into multiple chunks of 512 bytes. See;
hook-response/ns-api-avt/0 - till - hook-response/ns-api-avt/7
{"name":"ns-api-avt","data":"{ \"station_name\": \"hmh\" }","ttl":"60","published_at":"2015-10-31T22:35:54.661Z","coreid":"310029001047343339383037"}
{"name":"hook-sent/ns-api-avt","data":"undefined","ttl":"60","published_at":"2015-10-31T22:35:54.664Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/0","data":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n \n\n<ActueleVertrekTijden>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9688</RitNummer>\n\t\t<VertrekTijd>2015-11-01T00:04:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>s-Hertogenbosch</EindBestemming>\
n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Eindhoven, Boxtel</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">1</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9687</RitNummer>\n\
t\t<VertrekTijd>2015-11-01T0","ttl":"60","published_at":"2015-10-31T22:35:55.171Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/1","data":"0:26:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Deurne</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Helmond</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"fa
lse\">2</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9619</RitNummer>\n\t\t<VertrekTijd>2015-11-01T07:26:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Deurne</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Helmo
nd</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Verv","ttl":"60","published_at":"2015-10-31T22:35:55.426Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/2","data":"oerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">2</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9624</RitNummer>\n\t\t<VertrekTijd>2015-11-01T08:04:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<E
indBestemming>Nijmegen</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">1</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n
\t<VertrekkendeTrein>\n\t\t<RitNu","ttl":"60","published_at":"2015-10-31T22:35:55.676Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/3","data":"mmer>9623</RitNummer>\n\t\t<VertrekTijd>2015-11-01T08:26:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Deurne</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Helmond</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS<
/Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">2</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9628</RitNummer>\n\t\t<VertrekTijd>2015-11-01T09:04:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Nijmegen</EindBestemming>\n\t\t<TreinSoor
t>Sprinter</TreinSoort>\n\t\t","ttl":"60","published_at":"2015-10-31T22:35:55.928Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/4","data":"\n\t\t\t<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">1</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9
627</RitNummer>\n\t\t<VertrekTijd>2015-11-01T09:26:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Deurne</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Helmond</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"f
alse\">2</VertrekSpoor>\n\t\t\n\t\t\n\t</","ttl":"60","published_at":"2015-10-31T22:35:56.179Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/5","data":"VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9632</RitNummer>\n\t\t<VertrekTijd>2015-11-01T10:04:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Nijmegen</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTeks
t>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">1</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9631</RitNummer>\n\t\t<VertrekTijd>2015-11-01T10:26:00+0100</Ver
trekTijd>\n\t\t\n\t\t\n\t\t<E","ttl":"60","published_at":"2015-10-31T22:35:56.430Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/6","data":"indBestemming>Deurne</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Helmond</RouteTekst>\n\t\t\n\t\t\n\t\t\t<Vervoerder>NS</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">2</VertrekSpoor>\n\t\t\n\t\t\n\t</Vertre
kkendeTrein>\n\n\t<VertrekkendeTrein>\n\t\t<RitNummer>9636</RitNummer>\n\t\t<VertrekTijd>2015-11-01T11:04:00+0100</VertrekTijd>\n\t\t\n\t\t\n\t\t<EindBestemming>Nijmegen</EindBestemming>\n\t\t<TreinSoort>Sprinter</TreinSoort>\n\t\t\n\t\t\t<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>\n
\t\t\n\t\t\n\t\t\t<Vervoerder>N","ttl":"60","published_at":"2015-10-31T22:35:56.681Z","coreid":"particle-internal"}
{"name":"hook-response/ns-api-avt/7","data":"S</Vervoerder>\n\t\t\n\t\t<VertrekSpoor wijziging=\"false\">1</VertrekSpoor>\n\t\t\n\t\t\n\t</VertrekkendeTrein>\n\n</ActueleVertrekTijden>","ttl":"60","published_at":"2015-10-31T22:35:56.934Z","coreid":"particle-internal"}
Normal text:
<ActueleVertrekTijden>
<VertrekkendeTrein>
<RitNummer>9688</RitNummer>
<VertrekTijd>2015-11-01T00:04:00+0100</VertrekTijd>
<EindBestemming>s-Hertogenbosch</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Eindhoven, Boxtel</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">1</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9687</RitNummer>
<VertrekTijd>2015-11-01T00:26:00+0100</VertrekTijd>
<EindBestemming>Deurne</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Helmond</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">2</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9619</RitNummer>
<VertrekTijd>2015-11-01T07:26:00+0100</VertrekTijd>
<EindBestemming>Deurne</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Helmond</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">2</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9624</RitNummer>
<VertrekTijd>2015-11-01T08:04:00+0100</VertrekTijd>
<EindBestemming>Nijmegen</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">1</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9623</RitNummer>
<VertrekTijd>2015-11-01T08:26:00+0100</VertrekTijd>
<EindBestemming>Deurne</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Helmond</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">2</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9628</RitNummer>
<VertrekTijd>2015-11-01T09:04:00+0100</VertrekTijd>
<EindBestemming>Nijmegen</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">1</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9627</RitNummer>
<VertrekTijd>2015-11-01T09:26:00+0100</VertrekTijd>
<EindBestemming>Deurne</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Helmond</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">2</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9632</RitNummer>
<VertrekTijd>2015-11-01T10:04:00+0100</VertrekTijd>
<EindBestemming>Nijmegen</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">1</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9631</RitNummer>
<VertrekTijd>2015-11-01T10:26:00+0100</VertrekTijd>
<EindBestemming>Deurne</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Helmond</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">2</VertrekSpoor>
</VertrekkendeTrein>
<VertrekkendeTrein>
<RitNummer>9636</RitNummer>
<VertrekTijd>2015-11-01T11:04:00+0100</VertrekTijd>
<EindBestemming>Nijmegen</EindBestemming>
<TreinSoort>Sprinter</TreinSoort>
<RouteTekst>Eindhoven, Boxtel, s-Hertogenbosch</RouteTekst>
<Vervoerder>NS</Vervoerder>
<VertrekSpoor wijziging="false">1</VertrekSpoor>
</VertrekkendeTrein>
</ActueleVertrekTijden>
What is the best way to gather all these chunks to one string? To avoid breaks down if a line happens to be split across response chunks.