SJ uppdaterar API & Min resa

Senast jag skrev om SJ API och deras app uppmärksammade jag hur de hanterar personlig data. I onsdags uppdaterade SJ sin mobilapplikation med några nya efterfrågade funktioner.

SJ API

SJ har också utökat sitt API med nya metoder för att möjliggöra de nya funktionerna i appen.

API-metoder

Metodanropen dokumenterade nedan är de som jag hittills haft möjlighet att se över. Håll utkik efter fler uppdateringar genom att följa mig på Twitter.

Register device

GET deviceRegistration/{token}/{iphone|android}

Exempelfråga:

$ curl https://sjmg.sj.se/api2/deviceRegistration/1/iphone \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"

Get stations

GET stations.json

Exempelfråga:

$ curl "https://sjmg.sj.se/api2/stations.json" \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"

Exempelsvar:

{
    "stations":
    [
        {
            "id": 1,
            "stationName": "Stockholm C",
            "city": "Stockholm C",
            "stationType": "sj"
        },
        …
        {
            "id": 924,
            "stationName": "Stenstorp",
            "city": "Stenstorp",
            "stationType": "sj"
        }
    ]
}

Station timetable

GET stationTimeTable/{id}.json

Exempelfråga:

$ curl https://sjmg.sj.se/api2/stationTimeTable/1.json \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"

Exempelsvar:

{
    "id": 1,
    "stationName": "Stockholm C",
    "city" :"Stockholm C",
    "stationType": "SJ",
    "arrivals":
    [
        {
            "trainNumber": "93",
            "date": "2012-03-23",
            "time":
            {
                "scheduledTime": "2012-03-24T12:05",
                "newTime": "2012-03-24T12:30"
            },
            "track":
            {
                "scheduledTrack": "12",
                "newTrack": ""
            },
            "fromStationName": "Riksgränsen",
            "toStationName": "Stockholm C",
            "stationNames":
            [
                "Riksgränsen",
                "Katterjåkk",
                "Björkliden",
                "Abisko turiststation",
                "Abisko Östra",
                "Kiruna C",
                "Gällivare",
                "Murjek",
                "Boden C",
                "Älvsbyn",
                "Jörn",
                "Bastuträsk",
                "Umeå C",
                "Örnsköldsvik C",
                "Mellansel",
                "Långsele",
                "Bräcke",
                "Ånge",
                "Sundsvall C",
                "Söderhamn",
                "Gävle C",
                "Uppsala C",
                "Arlanda C",
                "Stockholm C"
            ],
            "isPassed": true,
            "cancelled": false
        },
        …
        {
            "trainNumber": "91",
            "date": "2012-03-24",
            "time":
            {
                "scheduledTime": "2012-03-25T06:42",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "12",
                "newTrack": ""
            },
            "fromStationName": "Luleå C",
            "toStationName": "Göteborg C",
            "stationNames":
            [
                "Luleå C",
                "Sunderby sjukhus",
                "Boden C",
                "Älvsbyn",
                "Jörn",
                "Bastuträsk",
                "Vindeln",
                "Umeå C",
                "Örnsköldsvik C",
                "Mellansel",
                "Långsele",
                "Ånge",
                "Ljusdal",
                "Bollnäs",
                "Gävle C",
                "Uppsala C",
                "Arlanda C",
                "Stockholm C",
                "Hallsberg",
                "Skövde C",
                "Herrljunga",
                "Göteborg C"
            ],
            "isPassed": false,
            "cancelled":false
        }
    ],
    "departures":
    [
        {
            "trainNumber": "633",
            "date": "2012-03-24",
            "time":
            {
                "scheduledTime": "2012-03-24T12:21",
                "newTime": "2012-03-24T12:22"
            },
            "track":
            {
                "scheduledTrack": "10",
                "newTrack": ""
            },
            "fromStationName": "Stockholm C",
            "toStationName": "Karlstad C",
            "stationNames":
            [
                "Stockholm C",
                "Södertälje Syd",
                "Katrineholm C",
                "Hallsberg",
                "Degerfors",
                "Kristinehamn",
                "Karlstad C"
            ],
            "isPassed": true,
            "cancelled": false
        },
        …
        {
            "trainNumber": "808",
            "date": "2012-03-25",
            "time":
            {
                "scheduledTime": "2012-03-25T07:11",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "3",
                "newTrack": ""
            },
            "fromStationName": "Stockholm C",
            "toStationName": "Uppsala C",
            "stationNames":
            [
                "Stockholm C",
                "Märsta",
                "Knivsta",
                "Uppsala C"
            ],
            "isPassed": false,
            "cancelled": false
        }
    ]
}

Train timetable

GET trainTimeTable/{train}/{Y-m-d}

Exempelfråga:

$ curl https://sjmg.sj.se/api2/trainTimeTable/8456/2012-03-24 \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"

Exempelsvar:

{
    "trainNumber": "8456",
    "date": "2012-03-24",
    "trainType": "",
    "fromStationName": "Upplands Väsby",
    "toStationName": "Uppsala C",
    "trainPosition":
    {
        "latitude": 59.52166666666667,
        "longitude": 17.899444444444445,
        "timestamp": ""
    },
    "stops":
    [
        {
            "station":
            {
                "id": 782,
                "stationName": "Upplands Väsby",
                "city": "Upplands Väsby",
                "stationType": "SJ"
            },
            "arrivalTime":
            {
                "scheduledTime": "",
                "newTime": ""
            },
            "departureTime":
            {
                "scheduledTime": "2012-03-24T19:20",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "32a",
                "newTrack":""
            },
            "isCancelled": false,
            "isPassed": false
        },
        …
        {
            "station":
            {
                "id": 5,
                "stationName": "Uppsala C",
                "city": "Uppsala C",
                "stationType": "SJ"
            },
            "arrivalTime":
            {
                "scheduledTime": "2012-03-24T19:47",
                "newTime": ""
            },
            "departureTime":
            {
                "scheduledTime": "",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "3",
                "newTrack": ""
            },
            "isCancelled": false,
            "isPassed": false
        }
    ],
    "nextStop": 0,
    "isSubscribeable": true
}

Login user

GET login?username={username}&password={password}&deviceID={id}&deviceType={iphone|android}

Exempelfråga:

$ curl "https://sjmg.sj.se/api2/login?username={username}&password={password}&deviceID=1&deviceType={iphone|android}" \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"

Exempelsvar:

{
    "customerID": "censurerad",
    "firstName": "ERIK",
    "lastName": "PETTERSSON",
    "hash": "censurerad",
    "sjPrioCards":
    [
        {
            "cardNo": "censurerad",
            "priority": "Svart",
            "points": 6998
        }
    ]
}

Customer tickets

GET customerTickets/{customerID}/{deviceID}/{iphone|android}?hash={hash}

Exempelfråga:

$ curl https://sjmg.sj.se/api2/customerTickets/{customerID}/{deviceID}/iphone?hash={hash} \
-H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
-H "Devicetype: iphone" \
-H "Version: 3"

Exempelsvar:

[
    {
        "ticketID": "censurerad0001",
        "orderID": "censurerad",
        "travellerID": "censurerad",
        "itineraries":
        [
            {
                "trainNumber": "85",
                "trainType": "74",
                "departureStation": "Gävle C",
                "departureTime": "2012-03-25T21:00",
                "arrivalStation": "Stockholm C",
                "arrivalTime": "2012-03-25T22:35",
                "isSubscribeable": true,
                "subscriptionID": "censurerad",
                "stops":
                [
                    {
                        "station":
                        {
                            "id": 210,
                            "stationName": "Gävle C",
                            "city": "Gävle C",
                            "stationType": "SJ"
                        },
                        "arrivalTime":
                        {
                            "scheduledTime": "2012-03-25T20:50",
                            "newTime": ""
                        },
                        "departureTime":
                        {
                            "scheduledTime": "2012-03-25T21:00",
                            "newTime": ""
                        },
                        "track":
                        {
                            "scheduledTrack": "1",
                            "newTrack": ""
                        },
                        "isCancelled": false,
                        "isPassed": false
                    },
                    –
                    {
                        "station":
                        {
                            "id": 1,
                            "stationName": "Stockholm C",
                            "city": "Stockholm C",
                            "stationType": "SJ"
                        },
                        "arrivalTime":
                        {
                            "scheduledTime": "2012-03-25T22:33",
                            "newTime": ""
                        },
                        "departureTime":
                        {
                            "scheduledTime": "",
                            "newTime": ""
                        },
                        "track":
                        {
                            "scheduledTrack": "4",
                            "newTrack": ""
                        },
                        "isCancelled": false,
                        "isPassed": false
                    }
                ],
                "nextStop":0,
                "trainPosition":
                {
                    "latitude":63.351274,
                    "longitude":14.38646,
                    "timestamp": "2012-03-25T16:47"
                }
            }
        ]
    }
]

SJ skickar användarens position till tredje part

Något som jag reagerade på är att SJ utan användarens medgivande skickar vidare dess position till tredje part. För kännedom gäller det tjänsten Xtify. Om vi ser till Apples riktlinjer för iOS applikationer måste användaren ge sitt medgivande vid förmedling, användning och nyttjande av positionsinformation. I annat fall hävdar Apple att applikationen inte kommer bli godkänd och synas i App Store. Men den här gången blev det fel.

Fler som skrivit om uppdateringen av Min resa

Tweet

Svara på inlägget


Hittills bara en kommentar

Erik Pettersson

Upptäckte precis att resursen Login User inte alltid returnerar några objekt i nykeln ”sjPrioCards”. Bugg?

Ping- & trackbacks

Hackernytt | Om startups och allt som hör till. På svenska. | SJ uppdaterar API & Min resa

[...] SJ uppdaterar API & Min resa [tagtider.net] poäng | Postat mars 25 av Erik Pettersson [...]

API Måndag – Skolverket, SJ, databasjournalistik & Skimlinks » API – Mashup.se

[...] Pettersson snabb på att sniffa trafiken mellan appen och SJs servrar och dokumentera det APIet. Ny dokumenterad funktionalitet är bla att logga in och få översyn på de resor man köpt på [...]