I eftermiddags lanserade Trafikverket en ny del av sin webbplats, Läget i trafiken. Via fliken Tågtrafiken kan du, precis som i tidigare vyer, söka tidtabeller för stationer och tåg. Denna information skickades tidigare i sin helhet från servern som HTML, nu hämtas den istället via en så kallad web service (API) med JavaScript på klienten (webbläsaren). Jag har tittat närmare på vilken information som är tillgänglig via detta API.

Genom att skriva en egen klient som efterliknar anropen som görs på Trafikverkets webbplats har jag funnit att följande data exponeras.

Stationer

Alla tågstationer (och trafikplatser?).

Exempelfrågan:

<ORIONML version='1.0'>
    <REQUEST plugin='KartDB'>
        <PLUGINML table='Stations'></PLUGINML>
    </REQUEST>
</ORIONML>

ger svaret:

{
    "Stations":
    {
        "Station":
        [
            {
                "CountyNo": "23",
                "EPSG": "3006",
                "EW": "472351",
                "Id": "002ce1da-199e-437c-b9ed-b5a2180869cf",
                "IkonNiva": "trafikplats_hpl",
                "Namn": "Krokom",
                "NS": "7022027",
                "Prognostisering": "true",
                "Signatur": "Krm",
                "Timestamp": "2011-06-14T10:35:49+02:00"
            },
            …
            {
                "CountyNo": "19",
                "EPSG": "3006",
                "EW": "587627",
                "Id": "ffd446fc-94b8-4537-8a9c-9c4aa807c087",
                "IkonNiva": "trafikplats_dp",
                "Namn": "Västerås C",
                "NS": "6608750",
                "Prognostisering": "true",
                "Signatur": "Vå",
                "Timestamp": "2011-06-14T10:35:49+02:00"
            }
        ]
    }
}

Meddelanden

Alla meddelanden som berör tågtrafiken vid olika stationer.

Exempelfrågan:

<ORIONML version="1.0">
    <REQUEST plugin="KartDB" locale="SE_sv">
        <PLUGINML table="Messages" />
    </REQUEST>
</ORIONML>

ger svaret:

{
    "Messages":
    {
        "Message":
        [
            {
                "CountyNo": "23",
                "EPSG": "3006",
                "EW": "418246.5",
                "Header": "banarbete",
                "IconId": "1005",
                "Id": "740326",
                "Message": "5\/10-6\/10 är tåg 10087 tidigarelagd pga av banarbete. Storlien 19.00, Enafors 19.10, Ånn 19.19, Duved 19.37, Åre 19.46, Undersåker 20.00, Järpen 20.11, Krokom 20.45, Östersund 21.00, Bräcke, 21.45 samt Ånge 22.05. En buss kommer att avgå i den gamla tidtabellen och ansluta med tåg 91 i Ånge. För mer information www.sj.se eller 0771-75 75 75.",
                "NS": "7014354",
                "PaverkadePlatser": "Ånn,Du,Åre,Ens,Jpn,Krm,Un,Ös,Gö,Bä,Bf,Stv,Pl,Åg",
                "StartTidpunkt": "2011-10-05T12:39:00+02:00",
                "UppdateradTidpunkt": "2011-09-20T12:42:39+02:00"
            },
            …
            {
                "CountyNo": "2",
                "EPSG": "3006",
                "EW": "670572",
                "Header": "banarbete",
                "IconId": "1005",
                "Id": "687756",
                "Message": "SL Pendeltåg Västerhaninge-Bålsta samt fjärrtåg Stockholm C-Västerås:\u000d\u000a\u000d\u000aEtt banarbete mellan Karlberg och Sundbyberg medför att endast ett av två spår kan trafikeras en kortare sträcka. Då tågen går enligt tidtabell ska inga förseningar uppstå på grund av detta men vid avvikelser så drabbas tåg i båda riktningar.",
                "NS": "6582927.5",
                "PaverkadePlatser": "Sub",
                "StartTidpunkt": "2011-07-18T07:00:00+02:00",
                "UppdateradTidpunkt": "2011-07-15T11:44:19+02:00"
            }
        ]
    }
}

Tidtabeller

Aktuella tidtabeller vid alla stationer. Det är den här datan som enligt mig är den mest intressanta. Genom att filtrera och sortera går det enkelt att få ut precis den informationen man som resenär söker.

Exempelfrågan:

<ORIONML version="1.0">
    <REQUEST plugin="WOW" locale="SE_sv">
        <PLUGINML table="LpvTrafiklagen" />
    </REQUEST>
</ORIONML>

ger svaret:

{
    "LpvTrafiklagen":
    {
        "Trafiklage":
        [
            {
                "AnnonseradAnkomstTid": "07:27",
                "AnnonseradAvgangTid": "07:27",
                "AnnonseradTidpunktAnkomst": "2011-09-28T07:27:00+02:00",
                "AnnonseradTidpunktAvgang": "2011-09-28T07:27:00+02:00",
                "ArAnkomstTag": "true",
                "ArAvgangTag": "true",
                "InstalldAnkomst": "false",
                "InstalldAvgang": "false",
                "SenasteTidrapportAktivitet": "Ankomst",
                "StatiskInformationTagVisning": "För den här stationen är det inte säkert att information om beräknade förseningar eller inställda tåg visas",
                "StatiskInformationTrafikplatsVisning": "För den här stationen är det inte säkert att information om beräknade förseningar eller inställda tåg visas",
                "TagGrupp": "c8b11e29-86e5-419b-a7d9-00250f9df6cc",
                "TagGruppOrdning": "9",
                "TeknisktTagId": "2710",
                "TrafikInfoAgareMobilUrl": "http:\/\/www.sl.se",
                "TrafikInfoAgareNamn": "Stockholmståg\/SL",
                "TrafikInfoAgareUrl": "http:\/\/www.sl.se",
                "TrafikplatsNamn": "Solna",
                "TrafikplatsPrognos": "false",
                "TrafikplatsSignatur": "So",
                "Utgangsdatum": "2011-09-28T00:00:00+02:00",
                "VisaAnkomst": "true",
                "VisaAvgang": "true"
            },
            …
            {
                "AnmarkningarAnkomst": "SJ Regional",
                "AnmarkningarAvgang": "SJ Regional",
                "AnnonseradAnkomstTid": "07:09",
                "AnnonseradAvgangTid": "07:16",
                "AnnonseradTidpunktAnkomst": "2011-09-28T07:09:00+02:00",
                "AnnonseradTidpunktAvgang": "2011-09-28T07:16:00+02:00",
                "AnnonseratTagId": "218",
                "ArAnkomstTag": "true",
                "ArAvgangTag": "true",
                "Fran": "Linköping,Norrköping,Nyköping",
                "InstalldAnkomst": "false",
                "InstalldAvgang": "false",
                "SenasteTidrapportAktivitet": "Ankomst",
                "SparangivelseAnkomst": "18b",
                "SparangivelseAvgang": "18b",
                "StatiskInformationTrafikplatsVisning": "SL-tåg och Arlanda Express omfattas ej. 

Spåruppgifterna är preliminära och kan snabbt ändras. När du kommer till stationen måste du alltid kontrollera igen vilket spår tåget avgår från, eller ankommer till.", "TagGrupp": "c048bf5b-6c99-4a01-ac46-931c2b822023", "TagGruppOrdning": "7", "TeknisktTagId": "218", "Till": "Uppsala,Gävle", "TrafikInfoAgareMobilUrl": "http:\/\/www.sj.se\/sj\/jsp\/polopoly.jsp?d=288", "TrafikInfoAgareNamn": "SJ", "TrafikInfoAgareUrl": "http:\/\/www.sj.se\/sj\/jsp\/polopoly.jsp?d=288", "TrafikplatsNamn": "Stockholm C", "TrafikplatsPrognos": "true", "TrafikplatsSignatur": "Cst", "Utgangsdatum": "2011-09-28T00:00:00+02:00", "VisaAnkomst": "true", "VisaAvgang": "true" } ] } }

Avvikelser

Information om planerade och pågående vägarbeten samt avvikelser i färjetrafiken.

Exempelfrågan:

<ORIONML version="1.0">
    <REQUEST plugin="TrissData2">
        <PLUGINML table="Deviations" />
    </REQUEST>
</ORIONML>

ger svaret:

{
    "Deviations":
    {
        "Deviation":
        [
            {
                "Active": "true",
                "CountryCode": "se",
                "CountyNo": "2",
                "CreationTime": "2000-03-01T15:44:21+01:00",
                "EW": "721792.22",
                "Geometry": "POINT(721792,22 6619018,33)",
                "Header": "Blidö",
                "IconId": "140",
                "Id": "SE_SRA_TRISSID_1_1030564",
                "ListElements": "Väg 1025",
                "MainNews": "false",
                "MapObject": "false",
                "Message": "Färja.\u000d\u000aVäg 1025 vid Blidöleden, i båda riktningar.",
                "MessageCode": "färja",
                "MessageCodeValue": "ferry",
                "MessageType": "Färjor",
                "MessageTypeValue": "TransitInformation",
                "NS": "6619018.33",
                "Provider": "Trafikverket",
                "RoadCategory": "S",
                "RoadNumberNumeric": "1025",
                "SituationsId": "GUIDf7e0b46d-7376-4c45-8440-b7d7e51a39f5",
                "StartTime": "2011-05-18T18:26:28+02:00",
                "Teaser": "Väg 1025 vid Blidöleden, i båda riktningar.",
                "ValidUntilFurtherNotice": "true",
                "Version": "24",
                "VersionTime": "2011-05-18T18:26:13+02:00",
                "Zone": "Nord"
            },
            …
            {
                "Active": "true",
                "CountryCode": "se",
                "CountyNo": "12",
                "CreationTime": "2011-09-19T11:01:12+02:00",
                "EndTime": "2011-10-21T16:00:00+02:00",
                "EW": "445076.72",
                "Geometry": "POINT(445076,72 6208429,78)",
                "Header": "Härlöv Trafikplats, Kristianstad",
                "IconId": "120",
                "Id": "SE_SRA_TRISSID_2_8079856",
                "ListElements": "E 22",
                "LPV_Message": "På E22 mellan Trafikplats Vilan (38) och Trafikplats Härlöv (37), i riktning mot Hörby görs fräsning och beläggning av ytterfilen vid Trafikplats Härlöv, fram till påfartsramp mot Hässleholm.\u000d\u000aHastighetsbegränsat till 50 km\/h under pågående arbete, övrig tid 70 km\/h.\u000d\u000aRekommenderad hastighet 30 km\/h.",
                "MainNews": "true",
                "MapObject": "true",
                "Message": "Beläggningsarbete.\u000d\u000aE 22 mellan Trafikplats Vilan (38) och Trafikplats Härlöv (37), i riktning mot Hörby.\u000d\u000aPå E22 mellan Trafikplats Vilan (38) och Trafikplats Härlöv (37), i riktning mot Hörby görs fräsning och beläggning av ytterfilen vid Trafikplats Härlöv, fram till påfartsramp mot Hässleholm.\u000d\u000aHastighetsbegränsat till 50 km\/h under pågående arbete, övrig tid 70 km\/h.\u000d\u000aRekommenderad hastighet 30 km\/h.",
                "MessageCode": "beläggningsarbete",
                "MessageCodeValue": "resurfacingWork",
                "MessageType": "Vägarbete",
                "MessageTypeValue": "MaintenanceWorks",
                "NS": "6208429.78",
                "ParentId": "SE_SRA_TRISSID_1_8079856",
                "Provider": "Trafikverket",
                "RoadCategory": "E",
                "RoadNumberNumeric": "22",
                "Severity": "4",
                "SeverityText": "Stor påverkan",
                "SituationsId": "GUID70657dac-a857-4bc2-b1ca-5b5a8ea6be9a",
                "StartTime": "2011-09-26T12:45:00+02:00",
                "Teaser": "E 22 mellan Trafikplats Vilan (38) och Trafikplats Härlöv (37), i riktning mot Hörby.",
                "ValidUntilFurtherNotice": "false",
                "Version": "2",
                "VersionTime": "2011-09-26T12:48:31+02:00",
                "Zone": "NO"
            }
        ]
    }
}

Filtrering & sortering

Då Trafikverket har exponerat ett SQL-gränssnitt är det, som jag nämnder ovan, möjligt att ställa mer komplexa frågor för att filtrera och sortera informationen. Detta är också det stora problemet. I mina exempelfrågor har jag inte valt att göra någon filtrering, vilket resulterar i stora(!) mängder svarsdata. Tillgängliga attribut för PLUGINML:

Om du snabbt vill komma igång med Trafikverkets exponerade API finns:

Andra som bloggat om Trafikverkets API


För att kommentera det här inlägget, skriv en .