<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Tågtider blogg »  — Tågtider blogg</title>
	
	<link>http://tagtider.net/blogg</link>
	<description>Mer än bara tågtider</description>
	<lastBuildDate>Mon, 26 Mar 2012 06:00:59 +0000</lastBuildDate>
	<language>sv-SE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tagtider" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tagtider" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">tagtider</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>SJ uppdaterar API &amp; Min resa</title>
		<link>http://tagtider.net/blogg/appar/sj-uppdaterar-api-min-resa/</link>
		<comments>http://tagtider.net/blogg/appar/sj-uppdaterar-api-min-resa/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 08:47:02 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Appar]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=676</guid>
		<description><![CDATA[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. Logga in och få automatisk översyn på resor du köpt som inloggad på sj.se Val att bevaka resor hämtade via beställningsnummer eller telefonnummer Val att få push-notiser förändringar&#8230;]]></description>
				<content:encoded><![CDATA[<p>Senast jag skrev om <strong>SJ API</strong> och deras app uppmärksammade jag <a href="http://tagtider.net/blogg/appar/sj-api-med-tidtabeller-taglagen/" title="SJ API med tidtabeller &#038; tåglägen">hur de hanterar personlig data</a>. I onsdags uppdaterade SJ sin mobilapplikation med några nya efterfrågade funktioner.</p>
<ul>
<li>Logga in och få automatisk översyn på resor du köpt som inloggad på sj.se</li>
<li>Val att bevaka resor hämtade via beställningsnummer eller telefonnummer</li>
<li>Val att få push-notiser förändringar i dina bevakade resor vid inställt tåg, ändrad avgångstid och byte av spår</li>
<li>Som medlem i SJ Prio ser du ditt medlemsnummer, nivå och poäng att använda.</li>
</ul>
<h2>SJ API</h2>
<p>SJ har också utökat sitt API med nya metoder för att möjliggöra de nya funktionerna i appen.</p>
<ul>
<li><strong>Endpoint:</strong> https://sjmg.sj.se/api2/</li>
<li><strong>Key:</strong> E252FEDA2EAA72F0CEBF5E9E432C66BB</li>
</ul>
<h2>API-metoder</h2>
<p>Metodanropen dokumenterade nedan är de som jag hittills haft möjlighet att se över. Håll utkik efter fler uppdateringar genom att följa <a href="http://twitter.com/ptz0n" title="Erik Pettersson på Twitter">mig på Twitter</a>.</p>
<ul>
<li><a href="#register-device">Register device</a></li>
<li><a href="#station-timetable">Station timetable</a></li>
<li><a href="#train-timetable">Train timetable</a></li>
<li><a href="#login-user">Login user</a></li>
<li><a href="#customer-tickets">Customer tickets</a></li>
</ul>
<p><a name="register-device"></a></p>
<h3>Register device</h3>
<p><code>GET deviceRegistration/{token}/{iphone|android}</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl https://sjmg.sj.se/api2/deviceRegistration/1/iphone \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"</code></pre>
<h3>Get stations</h3>
<p><code>GET stations.json</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl "https://sjmg.sj.se/api2/stations.json" \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"</code></pre>
<p>Exempelsvar:</p>
<pre><code>{
    "stations":
    [
        {
            "id": 1,
            "stationName": "Stockholm C",
            "city": "Stockholm C",
            "stationType": "sj"
        },
        …
        {
            "id": 924,
            "stationName": "Stenstorp",
            "city": "Stenstorp",
            "stationType": "sj"
        }
    ]
}</code></pre>
<p><a name="station-timetable"></a></p>
<h3>Station timetable</h3>
<p><code>GET stationTimeTable/{id}.json</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl https://sjmg.sj.se/api2/stationTimeTable/1.json \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"</code></pre>
<p>Exempelsvar:</p>
<pre><code>{
    "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
        }
    ]
}</code></pre>
<p><a name="train-timetable"></a></p>
<h3>Train timetable</h3>
<p><code>GET trainTimeTable/{train}/{Y-m-d}</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl https://sjmg.sj.se/api2/trainTimeTable/8456/2012-03-24 \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"</code></pre>
<p>Exempelsvar:</p>
<pre><code>{
    "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
}</code></pre>
<p><a name="login-user"></a></p>
<h3>Login user</h3>
<p><code>GET login?username={username}&amp;password={password}&amp;deviceID={id}&amp;deviceType={iphone|android}</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl "https://sjmg.sj.se/api2/login?username=<strong>{username}</strong>&amp;password=<strong>{password}</strong>&amp;deviceID=1&amp;deviceType=<strong>{iphone|android}</strong>" \
    -H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
    -H "Devicetype: iphone" \
    -H "Version: 3"</code></pre>
<p>Exempelsvar:</p>
<pre><code>{
    "customerID": "<em>censurerad</em>",
    "firstName": "ERIK",
    "lastName": "PETTERSSON",
    "hash": "<em>censurerad</em>",
    "sjPrioCards":
    [
        {
            "cardNo": "<em>censurerad</em>",
            "priority": "Svart",
            "points": 6998
        }
    ]
}</code></pre>
<p><a name="customer-tickets"></a></p>
<h3>Customer tickets</h3>
<p><code>GET customerTickets/{customerID}/{deviceID}/{iphone|android}?hash={hash}</code></p>
<p>Exempelfråga:</p>
<pre><code>$ curl https://sjmg.sj.se/api2/customerTickets/<strong>{customerID}</strong>/<strong>{deviceID}</strong>/iphone?hash=<strong>{hash}</strong> \
-H "Appkey: E252FEDA2EAA72F0CEBF5E9E432C66BB" \
-H "Devicetype: iphone" \
-H "Version: 3"</code></pre>
<p>Exempelsvar:</p>
<pre><code>[
    {
        "ticketID": "<em>censurerad</em>0001",
        "orderID": "<em>censurerad</em>",
        "travellerID": "<em>censurerad</em>",
        "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": "<em>censurerad</em>",
                "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"
                }
            }
        ]
    }
]</code></pre>
<h2>SJ skickar användarens position till tredje part</h2>
<p>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 <a href="http://xtify.com/" title="">Xtify</a>. Om vi ser till <a href="https://developer.apple.com/appstore/resources/approval/guidelines.html#location">Apples riktlinjer för iOS applikationer</a> 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.</p>
<h2>Fler som skrivit om uppdateringen av Min resa</h2>
<ul>
<li><a href="http://www.presskontakt.se/pressreleaser/visa/pressrelease/470686/sj-uppgraderar-kostn/69E57439-1FDA-9979-735A-8C05D805E585" rel="nofollow">SJ uppgraderar kostnadsfri mobilapp</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/appar/sj-uppdaterar-api-min-resa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>West Coast TravelHack 2011</title>
		<link>http://tagtider.net/blogg/event/west-coast-travelhack-2011/</link>
		<comments>http://tagtider.net/blogg/event/west-coast-travelhack-2011/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 18:00:26 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=597</guid>
		<description><![CDATA[I helgen som var, den 9-8 oktober, gick West Coast TravelHack av stapeln i Göteborg som en del av ett forskningsprojekt för ett hållbart vardagsresande. Under två dagar tävlade totalt nästan 76 deltagare i 20 lag för att skapa prototyper av appar och tjänster. Jag var på plats med Fredrik, Johan, Hardy och Adam i form av #TeamFoo. Vi utvecklade och&#8230;]]></description>
				<content:encoded><![CDATA[<p>I helgen som var, den 9-8 oktober, gick <a href="http://www.travelhack.se/">West Coast TravelHack</a> av stapeln i <a title="Tågtider för Göteborg C" href="http://tagtider.net/goteborg-c/">Göteborg</a> som en del av ett forskningsprojekt för ett hållbart vardagsresande. Under två dagar tävlade totalt nästan 76 deltagare i <a href="http://www.travelhack.se/?q=signed_up_teams">20 lag</a> för att skapa prototyper av appar och tjänster.</p>
<p>Jag var på plats med <a href="http://twitter.com/nadam9">Fredrik</a>, <a href="http://twitter.com/johanni">Johan</a>, <a href="http://twitter.com/fere0010">Hardy</a> och <a href="http://twitter.com/nadam9">Adam</a> i form av <a href="http://twitter.com/search/?q=%23TeamFoo">#TeamFoo</a>. Vi utvecklade och lanserade ett API för crowdsourcing av (mikro)störningar i kollektivtrafik, <a href="http://av.vikel.se/">Avvikelse</a>.</p>
<h2>Vinnare på TravelHack 2011</h2>
<p>Själva tävlingsmomentet var uppdelat i fem olika delar.</p>
<h3>Best Prototype Award</h3>
<p>Den enligt juryn bästa prototypen var <em>GREEN bITs</em> <strong><a href="http://www.trafiklab.se/projekt/commutify">Commutify</a></strong> som uppmuntrar till klimatsmart resande. Genom att på ett roligt sätt utmana sig själv, vänner eller kändisar i vardagsresande och samtidigt belönas resenären med tillgång till rabatterade erbjudanden, ökad hälsa och bättre en miljö.</p>
<h3>Best Team Award</h3>
<p>Juryns val av team vid bedömning av gruppdynamik, produktivitet och den bästa laginsatsen var <strong><em>Team VISIT</em></strong> för utveckling av tjänsten <a href="http://www.trafiklab.se/projekt/visit-travelhack-buynearby">Buy Nearby</a>.</p>
<h3>The Business Region Göteborg Entrepreneur Award</h3>
<p>Det lag juryn bedömde att bäst visa en tydlig affärsidé var också <em>TeamVISIT</em> med sin prototyp <strong><a href="http://www.trafiklab.se/projekt/visit-travelhack-buynearby">Buy Nearby</a></strong>. En tjänst för dig som letar nytt boende och vill ha kort restid men ändå åka kollektivt och hållbart.</p>
<h3>Developer Recognition Award</h3>
<p>Den prototyp eller tjänst som bäst agerar som tröskelsänkare och möjliggör distribuerad utveckling avgjordes av de deltagande lagen i form av omröstning. Flest röster mottog vårt API, <strong><a href="http://www.trafiklab.se/projekt/avvikelse">Avvikelse</a></strong>. Stort tack från oss i <a href="http://twitter.com/search/?q=%23TeamFoo">#TeamFoo</a> och vi hoppas ni också får nytta av detta i vidare utveckling.</p>
<h3>CommuteGreener Award</h3>
<p>Tjänsten som bäst enligt juryn mötte kriterierna för att vara affärs- och ingenjörsmässig samt bemötte en efterfrågan blev slutligen <em>Code Monkeys</em> <strong><a href="http://www.trafiklab.se/projekt/find-me-ride">Find me a ride</a></strong>.</p>
<h2>Vad TravelHack 2011 lämnat efter sig</h2>
<p>Åter igen, ett stort tack till arrangörer, inblandade samt deltagare för en lång och inspirerande helg. Jag hoppas att de skapelser som under TravelHack 2011 såg dagens ljus blir något som resenärer snart kan nyttja för ett hållbart vardagsresande.</p>
<ul>
<li><a title="TravelHack på Slideshare" href="http://www.slideshare.net/travelhack">Presentationer från TravelHack</a></li>
<li><a title="TravelHack på Bambuser" href="http://bambuser.com/channel/travelhack">Video från TravelHack</a>, tack <a title="Joakim Jardenberg" href="http://jardenberg.se/">Jocke</a>!</li>
</ul>
<h2>Andra som skrivit om TravelHack 2011</h2>
<ul>
<li><a href="http://www.mashup.se/nyheter/rapport-fran-travelhack">Rapport från TravelHack</a> av Daniel Rudmark, Mashup.se</li>
<li><a href="http://www.trafiklab.se/blogg/2011/sep/west-coast-travel-hack-2011">West Coast Travel Hack 2011</a> av Elias Arnestrand, Trafiklab</li>
<li><a href="http://blogg.gp.se/teknik/2011/10/07/travelhack/">Direkt från Travelhack</a> av Eva Wieselgren, GP</li>
<li><a href="http://www.businessregion.se/mappfornyheter/mappfornyheter2011/westcoasttravelhack2011avgjort.4457.html">West Coast Travel Hack 2011 avgjort</a> av Erik-Wilhelm Graef Behm, Businss Region Göteborg</li>
<li><a href="http://www.goteborg.se/wps/portal/!ut/p/c5/04_SB8K8xLLM9MSSzPy8xBz9CP0os3gjU-9AJyMvYwN_t0AXA6MQN8ewgBAfJ9NQY6B8JFDeONjENdgFKG9m4mLgGWgRYGwRbGgUbGxOjG5nd0cPE3MfAwMLE3cDA08TJ38_D-dAQwNPYwK6_Tzyc1P1C3JDI8odFRUBTkPwMQ!!/dl3/d3/L0lDU0lKSWdrbUEhIS9JRFJBQUlpQ2dBek15cXchLzRCRWo4bzBGbEdpdC1iWHBBRUEhLzdfMjVLUUIySjMwR0hUMTAyM0k5TEdKSTAyUjUvRWp4dEgxNTEyMDA1Mg!!/?WCM_PORTLET=PC_7_25KQB2J30GHT1023I9LGJI02R5000000_WCM&amp;WCM_GLOBAL_CONTEXT=/wps/wcm/connect/goteborg.se/goteborg_se/invanare/resor_trafik/akt_n400_rt_2011-08-16_travelhack2011mobilatjansterforhallbararesmonster">TravelHack 2011 &#8211; mobila tjänster för hållbara resmönster</a>, Göteborgs stad</li>
<li><a href="http://jardenberg.se/b/travelhack-och-bambusertest/">Travelhack och test med bambuser</a>, Joakim Jardenberg</li>
<li><a href="http://www.svenskkollektivtrafik.se/Nyheter1/2011/Oktober-2011/West-Coast-TravelHack-2011/">West Coast TravelHack 2011</a>, Svensk kollektivtrafik</li>
<li><a href="http://kreativstuga.se/travelhack-big-brother-version/">Travelhack i Big Brother-version</a>, Kreativ stuga</li>
<li><a href="http://www.itufak.gu.se/aktuellt/kalendarium/Aktuellt_detalj/?eventId=1774705048">West Coast TravelHack</a>, Göteborgs universitet</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/event/west-coast-travelhack-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google lanserar Transit i Sverige</title>
		<link>http://tagtider.net/blogg/tjanster/google-lanserar-transit-i-sverige/</link>
		<comments>http://tagtider.net/blogg/tjanster/google-lanserar-transit-i-sverige/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 10:58:14 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Tjänster]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GTFS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[Samtrafiken]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=599</guid>
		<description><![CDATA[Igår höll Google Sverige en presskonferens på Spårvägsmuseet gällande lanseringen av den efterlängtade tjänsten Transit för kollektivtrafik i Sverige. Detta innebär att vi i Sverige nu enkelt kan planera resor med kollektivtrafik som tar oss från exempelvis Göteborg till Malmö, via Google Maps eller applikationer som Maps på iPhone eller iPad. Google Transit började 2005 som ett sidoprojekt och&#8230;]]></description>
				<content:encoded><![CDATA[<p>Igår höll <a href="http://g.co/maps/n7drf">Google Sverige</a> en presskonferens på <a href="http://sparvagsmuseet.sl.se/">Spårvägsmuseet</a> gällande lanseringen av den efterlängtade tjänsten <a href="http://www.google.se/transit">Transit</a> för kollektivtrafik i Sverige.</p>
<p>Detta innebär att vi i Sverige nu enkelt kan planera resor med kollektivtrafik som tar oss från exempelvis <a title="Tågtider för Göteborg C" href="http://tagtider.net/goteborg-c/">Göteborg</a> till <a title="Tågtider för Malmö C" href="http://tagtider.net/malmo-c/">Malmö</a>, via <a href="http://maps.google.se/">Google Maps</a> eller applikationer som <em>Maps</em> på <a title="Native Maps application for iPhone" href="http://www.apple.com/iphone/built-in-apps/maps-compass.html">iPhone</a> eller <a title="Native iOS maps application for iPad" href="http://www.apple.com/ipad/built-in-apps/maps.html">iPad</a>.</p>
<p><em>Google Transit</em> började 2005 som ett sidoprojekt och var till 2007 en del av <a title="Google Labs" href="http://www.googlelabs.com/">Labs</a>. Idag omfattar tjänsten kollektivtrafik för flera hundra städer runt om i världen.</p>
<blockquote><p>“Är lite besviken att jag inte blev kallad till presentationen, uppmanar Google &amp; Samtrafiken till bättring på den punkten.”</p></blockquote>
<h2>Inga <a title="Tågtider med tidtabeller" href="http://tagtider.net/">tidtabeller</a> i realtid</h2>
<p>I samarbete med <a href="http://www.samtrafiken.se/">Samtrafiken</a> har Google via <a href="http://tagtider.net/blogg/utveckling/datastandarder-for-kollektivtrafik/">GTFS</a> tillgängliggjort Transit i Sverige. Dock är detta endast <em>stolptidtabeller</em>, dvs. att förändringar och förseningar (ännu) inte omfattas. Jag ser gärna att de även implementerar <a href="http://code.google.com/transit/realtime/">GTFS-realtime</a> för att snabbt och korrekt nå ut med kollektivtrafikinformation till resenärer.</p>
<h2>Möjligtvis mer öppen data</h2>
<p>Den data som <em>Samtrafiken</em> tillhandahåller Google är ännu inte publik, vad jag kan se, i <a href="http://code.google.com/p/googletransitdatafeed/wiki/PublicFeeds">GTFS:s officiella lista</a>.</p>
<h2>Andra som skrivit om Google kollektivtrafik för Sverige</h2>
<ul>
<li><a href="http://www.swedroid.se/45003/google-lanserar-transit-for-maps-i-sverige/">Google lanserar Transit för Maps i Sverige</a>, Swedroid</li>
<li><a href="http://bloggar.expressen.se/fredriksjoshult/2011/10/googletidtabeller/">Googles nya gratistjänst – tidtabeller</a> av Fredrik Sjöshult, Expressen</li>
<li><a href="http://googlesepress.blogspot.com/2011/10/google-transit-nu-i-sverige.html">Google Transit nu i Sverige &#8211; kollektivtrafik i Google Maps</a>, Google Sweden Press Blog</li>
<li><a href="http://www.mynewsdesk.com/se/pressroom/google/pressrelease/view/google-och-samtrafiken-visar-kollektivtrafiken-i-google-maps-692434">Google och Samtrafiken visar kollektivtrafiken i Google Maps</a> av Google, Mynewsdesk</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/tjanster/google-lanserar-transit-i-sverige/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SJ API med tidtabeller &amp; tåglägen</title>
		<link>http://tagtider.net/blogg/appar/sj-api-med-tidtabeller-taglagen/</link>
		<comments>http://tagtider.net/blogg/appar/sj-api-med-tidtabeller-taglagen/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 06:37:03 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Appar]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=539</guid>
		<description><![CDATA[Igår eftermiddag, dagen efter Trafikverket presenterade Läget i trafiken, lanserade SJ en app till Android. Jag började snabbt titta på datatrafiken till och från appen. Precis som i Trafikverkets fall handlar det om ett helt öppet och oskyddat API, dock inte lika exponerat. SJ exponerade personlig data Om du tittar lite närmare i svarsdatan från&#8230;]]></description>
				<content:encoded><![CDATA[<p>Igår eftermiddag, dagen efter <a href="http://tagtider.net/blogg/tjanster/trafikverket-exponerar-api/" title="Trafikverket exponerar API">Trafikverket presenterade <em>Läget i trafiken</em></a>, lanserade <a href="http://tagtider.net/operatorer/sj-ab/" title="SJ AB">SJ</a> en <a href="http://www.mynewsdesk.com/se/pressroom/sj/pressrelease/view/sj-foerbaettrar-informationen-med-ny-resenaersapp-687184">app</a> till Android. Jag började snabbt titta på datatrafiken till och från appen. Precis som i Trafikverkets fall handlar det om ett helt öppet och oskyddat API<del datetime="2011-09-29T09:31:41+00:00">, dock inte lika exponerat</del>.</p>
<h2>SJ exponerade personlig data</h2>
<p>Om du tittar lite närmare i svarsdatan från SJ:s API nedan, närmare bestämt i värdefältet för <code>deviceID</code>. Detta innehåller den <em>privata</em>, unika identifieraren för den enhet du använder när en ny bevakning skapas. SJ exponerar alltså denna data, om alla som valt att bevaka tåg via deras app.</p>
<p>Detta är väldigt kritiskt data, som varken Google eller Apple tillåter att utvecklare tillgängliggör. Med informationen, som Theodor <a href="http://www.tstorm.se/blogg/20110929-418285-SJs-app-lacker-resenarsinformation.html" title="SJs app läcker resenärsinformation">nämner i sitt inlägg</a>, är det exempelvis möjligt att skapa, ändra och ta bort andra användares bevakningar.</p>
<p><strong>Jag uppmanar alla användare att ta bort alla sina bevakningar som skapats via appen, tills dess att SJ har säkrat sitt API.</strong></p>
<h2>SJ har bemött kritiken via Twitter</h2>
<blockquote id="pitch"><p>“Nu har vi svar. Det finns ingen personlig info i appen, inte ens UD ID. Det vi kallar device ID är endast kopplat till appen. Trots det ska vi göra om den så den blir krypterad så fort som möjligt.” — <a href="http://twitter.com/sj_ab/status/119392029959659521">@SJ_AB</a></p></blockquote>
<p>Intressant svar. Inget är fel, men det ska ändå åtgärdas? Detta är fel. Appen skickar UDID i klartext till SJ:s API. Theodor har tydliggjort detta med enkla skärmdumpar i <a href="http://www.tstorm.se/blogg/20110929-418285-SJs-app-lacker-resenarsinformation.html">sitt inlägg</a>. Därefter var det dags att bekänna.</p>
<blockquote id="pitch"><p>“Vi var övertygade om att vi hade rätt. Nu undersöker vi vad detta beror på och ska åtgärda snarast.” — <a href="https://twitter.com/sj_ab/status/119405068536643585">@SJ_AB</a></p></blockquote>
<p>Jättebra agerande av marknadsavdelningen tycker jag. Nu hoppas vi bara att SJ först kommunicerar problemet med sina användare och sedan stänger in användardatan snarast.</p>
<p><strong>Uppdatering:</strong> SJ har nu säkrat den mest kritiska bristen i sitt API. Men fortfarande skickas iOS-enheters UDID i klartext till och från appen.</p>
<ul>
<li><strong>Endpoint:</strong> http://sjmg.sj.se/api/</li>
<li><strong>Format:</strong> JSON</li>
</ul>
<h2>Metoder (deprecated)</h2>
<p><strong>Första versionen av SJ API fungerar inte längre som dokumenterat nedan. Se <a href="http://tagtider.net/blogg/appar/sj-uppdaterar-api-min-resa/" title="SJ uppdaterar API &#038; Min resa">dokumentation av SJ API 2</a>.</strong> </p>
<ul>
<li><a href="#get-stations">Get stations</a></li>
<li><a href="#get-station">Get station</a></li>
<li><a href="#get-station-timetable">Get station timetable</a></li>
<li><a href="#get-train">Get train</a></li>
<li><a href="#get-train-timetable">Get train timetable</a></li>
<li><a href="#get-subscriptions"><del datetime="2011-09-29T19:29:03+00:00">Get subscriptions</del></a></li>
<li><a href="#new-subscription">New subscription</a></li>
</ul>
<p><a name="get-stations"></a></p>
<h3>Get stations</h3>
<p><code>GET /stations.json</code><br />
Returnerar alla stationer. Exempel för <a href="http://sjmg.sj.se/api/stations.json">/stations.json</a>:</p>
<pre><code>{
    "stations":
    [
        {
            "id": 1,
            "stationName": "Stockholm C",
            "city": "Stockholm C",
            "stationType": "sj"
        },
        …
        {
            "id": 924,
            "stationName": "Stenstorp",
            "city": "Stenstorp",
            "stationType": "sj"
        }
    ]
}</code></pre>
<p><a name="get-station"></a></p>
<h3>Get station</h3>
<p><code>GET /station/#{id}.json</code><br />
Returnerar given station. Exempel för <a href="http://sjmg.sj.se/api/station/1.json">/station/1.json</a>:</p>
<pre><code>{
    "id": 1,
    "stationName": "Stockholm C",
    "city": "Stockholm C",
    "stationType": "SJ"
}</code></pre>
<p><a name="get-station-timetable"></a></p>
<h3>Get station timetable</h3>
<p><code>GET /stationTimeTable/#{id}.json</code><br />
Returnerar tidtabell för given station. Exempel för <a href="http://sjmg.sj.se/api/stationTimeTable/1.json">/stationTimeTable/1.json</a>:</p>
<pre><code>{
    "id": 1,
    "stationName": "Stockholm C",
    "city": "Stockholm C",
    "stationType": "SJ",
    "arrivals":
        [
        {
            "trainNumber": "11",
            "time":
            {
                "scheduledTime": "2011-09-29T08:16",
                "newTime": "2011-09-29T08:18"
            },
            "track":
            {
                "scheduledTrack": "7",
                "newTrack": ""
            },
            "fromStationName": "Falun C",
            "toStationName": "Stockholm C",
            "stationNames":
            [
                "Falun C",
                "Borlänge C",
                "Säter",
                "Hedemora",
                "Avesta Krylbo",
                "Sala",
                "Uppsala C",
                "Arlanda C",
                "Stockholm C"
            ],
            "cancelled": false
        },
        …
        {
            "trainNumber": "861",
            "time":
            {
                "scheduledTime": "2011-09-29T19:49",
                "newTime":""
            },
            "track":
            {
                "scheduledTrack": "3",
                "newTrack": ""
            },
            "fromStationName": "Uppsala C",
            "toStationName": "Stockholm C",
            "stationNames":
            [
                "Uppsala C",
                "Knivsta",
                "Märsta",
                "Stockholm C"
            ],
            "cancelled": false
        },
        …
        {
            "trainNumber": "10759",
            "time":
            {
                "scheduledTime": "2011-09-29T20:00",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "7",
                "newTrack": ""
            },
            "fromStationName": "Örebro C",
            "toStationName": "Stockholm C",
            "stationNames":
            [
                "Örebro C",
                "Arboga",
                "Köping",
                "Västerås C",
                "Enköping",
                "Bålsta",
                "Sundbyberg",
                "Stockholm C"
            ],
            "cancelled": false
        }
    ],
    "departures":
    [
        {
            "trainNumber": "425",
            "time":
            {
                "scheduledTime": "2011-09-29T08:10",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "10",
                "newTrack": ""
            },
            "fromStationName": "Stockholm C",
            "toStationName": "Göteborg C",
            "stationNames":
            [
                "Stockholm C",
                "Södertälje Syd",
                "Katrineholm C",
                "Skövde C",
                "Alingsås",
                "Göteborg C"
            ],
            "cancelled":false
        },
        …
        {
            "trainNumber": "860",
            "time":
            {
                "scheduledTime": "2011-09-29T20:11",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "3",
                "newTrack": ""
            },
            "fromStationName": "Stockholm C",
            "toStationName": "Uppsala C",
            "stationNames":
            [
                "Stockholm C",
                "Märsta",
                "Knivsta",
                "Uppsala C"
            ],
            "cancelled":false
        }
    ]
}</code></pre>
<p><a name="get-train"></a></p>
<h3>Get train</h3>
<p><code>GET /train/#{nr}.json</code><br />
Returnerar position för givet tågnummer. Exempel för <a href="http://sjmg.sj.se/api/train/220.json">/train/220.json</a>:</p>
<pre><code>{
    "trainNumber": "220",
    "trainType": "",
    "fromStationName": "Linköping C",
    "toStationName": "Stockholm C",
    "trainPosition":
    {
        "latitude": 59.154098,
        "longitude": 17.762635,
        "timestamp": "2011-10-03T08:09"
    }
}</code></pre>
<p><a name="get-train-timetable"></a></p>
<h3>Get train timetable</h3>
<p><code>GET /trainTimeTable/#{nr}.json</code><br />
Returnerar stationer och position för givet tågnummer. Exempel för <a href="http://sjmg.sj.se/api/trainTimeTable/538.json">/trainTimeTable/538.json</a>:</p>
<pre><code>{
    "trainNumber": "538",
    "trainType": "",
    "fromStationName": "Malmö C",
    "toStationName": "Stockholm C",
    "trainPosition":
    {
        "latitude": 58.417037,
        "longitude": 15.624342,
        "timestamp": "2011-09-28T17:52"
    },
    "stops":
    [
        {
            "station":
            {
                "id": 3,
                "stationName": "Malmö C",
                "city": "Malmö C",
                "stationType": "SJ"
            },
            "arrivalTime":
            {
                "scheduledTime": "2011-09-28T13:09",
                "newTime":""
            },
            "departureTime":
            {
                "scheduledTime": "2011-09-28T13:17",
                "newTime": "2011-09-28T13:37"
            },
            "track":
            {
                "scheduledTrack": "6",
                "newTrack": ""
            },
            "isCancelled" :true,
            "isPassed":true
        },
        …
        {
            "station":
            {
                "id": 1,
                "stationName": "Stockholm C",
                "city": "Stockholm C",
                "stationType": "SJ"
            },
            "arrivalTime":
            {
                "scheduledTime": "2011-09-28T17:39",
                "newTime": "2011-09-28T19:30"
            },
            "departureTime":
            {
                "scheduledTime": "",
                "newTime": ""
            },
            "track":
            {
                "scheduledTrack": "10",
                "newTrack": ""
            },
            "isCancelled": false,
            "isPassed": false
        }
    ],
    "nextStop":7
}</code></pre>
<p><a name="get-subscriptions"></a></p>
<h3><del datetime="2011-09-29T19:29:03+00:00">Get subscriptions</del></h3>
<p><code>GET /subscriptions.json</code><br />
Returnerade tidigare alla bevakningar. Exempel för <a href="http://sjmg.sj.se/api/subscriptions.json">/subscriptions.json</a>:</p>
<pre><code>{
    "subscriptionsDTO":
    [
        {
            "id": "<em>censurerad</em>",
            "deviceID": "<em>censurerad</em>",
            "deviceType": "Android",
            "fromStationName": "Stockholm C",
            "toStationName": "Malmö C",
            "fromStationID": 1,
            "toStationID": 3,
            "enabled": true,
            "fromTime": "19:25",
            "toTime": "22:28",
            "weekdays":
            [
                "Tuesday",
                "Friday"
            ]
        },
        …
        {
            "id": "<em>censurerad</em>",
            "deviceID": "<em>censurerad</em>",
            "deviceType": "Android",
            "fromStationName": "Västerås C",
            "toStationName": "Katrineholm C",
            "fromStationID": 99,
            "toStationID": 166,
            "enabled": true,
            "fromTime": "06:55",
            "toTime": "08:00",
            "weekdays":
            [
                "Thursday",
                "Monday",
                "Tuesday",
                "Wednesday"
            ]
        }
    ]
}</code></pre>
<p><a name="new-subscription"></a></p>
<h3>New subscription</h3>
<p><code>POST /subscriptions.json</code><br />
Skapar ny bevakning. Exempelfrågan:</p>
<pre><code>{
    "enabled":true,
    "deviceType": "iphone",
    "weekdays":
    [
        "Thursday"
    ],
    "deviceID": "<em>censurerad</em>",
    "toStationName": "Uppsala C",
    "fromStationName": "Stockholm C",
    "fromStationID": 1,
    "toStationID": 5,
    "fromTime": "10:41",
    "toTime": "11:41"
}</code></pre>
<p>ger svaret:</p>
<pre><code>{
    "id": "<em>censurerad</em>",
    "deviceID": "<em>censurerad</em>",
    "deviceType": "iphone",
    "fromStationName": "Stockholm C",
    "toStationName": "Uppsala C",
    "fromStationID": 1,
    "toStationID": 5,
    "enabled": true,
    "fromTime": "10:41",
    "toTime": "11:41",
    "weekdays":
    [
        "Thursday"
    ]
}</code></pre>
<h2>Andra som skrivit om SJ:s API</h2>
<ul>
<li><a href="http://www.mashup.se/nyheter/api-mandag-trafikverket-sj-bredbandskollen-och-e-delegationen">API Måndag – Trafikverket, SJ, Bredbandskollen och E-delegationen</a> av Andreas Krohn, Mashup.se</li>
<li><a href="http://www.dn.se/ekonomi/sj-lackte-info-om-anvandare">SJ läckte info om användare</a> av Sujay Dutt, DN</li>
<li><a href="http://computersweden.idg.se/2.2683/1.407308/sjs-app-lacker-anvandardata">SJs app läcker användardata</a> av Ludvig Mjöbring, Computer Sweden</li>
<li><a href="http://www.aftonbladet.se/nyheter/article13706643.ab">SJ släppte app – som läckte telefonens identitet</a> av Lisa Röstlund, Aftonbladet</li>
<li><a href="http://www.tstorm.se/blogg/20110929-418285-SJs-app-lacker-resenarsinformation.html">SJs app läcker resenärsinformation</a> av <a href="http://www.tstorm.se/">Theodor Storm</a></li>
<li><a href="http://www.mobilbusiness.se/sj-lacker-info-om-anvandare-1.486699.html">SJ läcker info om användare</a> av Roman Pixell, Mobil Business</li>
<li><a href="http://www.travelnews.se/Tag/SJs-nya-appar-lacker-information-om-anvandare/">SJ:s nya appar läcker information om användare</a>, Travel News</li>
<li><a href="http://www.ul.se/sv/Nyheter/Fel-om-Upptaget-i-SJ-app-Mina-resor/">Fel om Upptåget i SJ-app &#8221;Mina resor&#8221;</a>, Upplands Lokaltrafik</li>
<li><a href="http://www.standbynews.com/news/12275">SJ-app läckte info om användare</a>, The Scandinavian Travel Trade Journal</li>
<li><a href="http://www.androidbloggen.se/index.php/2011/09/30/ny-app-fran-sj-ska-underlatta-resandet/">Ny app från SJ ska underlätta resandet</a>, Androidbloggen</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/appar/sj-api-med-tidtabeller-taglagen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Trafikverket exponerar API</title>
		<link>http://tagtider.net/blogg/tjanster/trafikverket-exponerar-api/</link>
		<comments>http://tagtider.net/blogg/tjanster/trafikverket-exponerar-api/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 19:23:09 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Tjänster]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Trafikverket]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=506</guid>
		<description><![CDATA[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&#8230;]]></description>
				<content:encoded><![CDATA[<p>I eftermiddags lanserade <a title="Trafikverkets API" href="http://tagtider.net/blogg/utveckling/trafikverket-api/">Trafikverket</a> en ny del av sin webbplats, <a href="http://trafikinfo.trafikverket.se/litmenu/litmenu.htm#id=200" rel="nofollow">Läget i trafiken</a>. Via fliken <em>Tågtrafiken</em> 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.</p>
<ul>
<li><strong>Endpoint:</strong> http://trafikinfo.trafikverket.se/litcore/orion/orionproxy.ashx</li>
<li><strong>Format:</strong> JSON</li>
<li><strong>Metod:</strong> POST</li>
<li><strong>Språkstöd (locale):</strong> SE_sv, US_en</li>
</ul>
<p>Genom att skriva en egen klient som efterliknar anropen som görs på Trafikverkets webbplats har jag funnit att följande data exponeras.</p>
<h2>Stationer</h2>
<p>Alla tågstationer (och trafikplatser?).</p>
<p>Exempelfrågan:</p>
<pre><code>&lt;ORIONML version='1.0'&gt;
    &lt;REQUEST plugin='KartDB'&gt;
        &lt;PLUGINML table='Stations'&gt;&lt;/PLUGINML&gt;
    &lt;/REQUEST&gt;
&lt;/ORIONML&gt;</code></pre>
<p>ger svaret:</p>
<pre><code>{
    "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"
            }
        ]
    }
}</code></pre>
<h2>Meddelanden</h2>
<p>Alla meddelanden som berör tågtrafiken vid olika stationer.</p>
<p>Exempelfrågan:</p>
<pre><code>&lt;ORIONML version=&quot;1.0&quot;&gt;
    &lt;REQUEST plugin=&quot;KartDB&quot; locale=&quot;SE_sv&quot;&gt;
        &lt;PLUGINML table=&quot;Messages&quot; /&gt;
    &lt;/REQUEST&gt;
&lt;/ORIONML&gt;</code></pre>
<p>ger svaret:</p>
<pre><code>{
    "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"
            }
        ] 
    }
}</code></pre>
<h2>Tidtabeller</h2>
<p>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.</p>
<p>Exempelfrågan:</p>
<pre><code>&lt;ORIONML version=&quot;1.0&quot;&gt;
    &lt;REQUEST plugin=&quot;WOW&quot; locale=&quot;SE_sv&quot;&gt;
        &lt;PLUGINML table=&quot;LpvTrafiklagen&quot; /&gt;
    &lt;/REQUEST&gt;
&lt;/ORIONML&gt;</code></pre>
<p>ger svaret:</p>
<pre><code>{
    "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. <br /><br />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"
            }
        ]
    }
}</code></pre>
<h2>Avvikelser</h2>
<p>Information om planerade och pågående vägarbeten samt avvikelser i färjetrafiken. </p>
<p>Exempelfrågan:</p>
<pre><code>&lt;ORIONML version=&quot;1.0&quot;&gt;
    &lt;REQUEST plugin=&quot;TrissData2&quot;&gt;
        &lt;PLUGINML table=&quot;Deviations&quot; /&gt;
    &lt;/REQUEST&gt;
&lt;/ORIONML&gt;</code></pre>
<p>ger svaret:</p>
<pre><code>{
    "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"
            }
        ]
    }
}</code></pre>
<h2>Filtrering &#038; sortering</h2>
<p>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 <code>PLUGINML</code>:</p>
<ul>
<li>filter</li>
<li>orderby</li>
<li>selectcolumns</li>
<li>limit</li>
</ul>
<p>Om du snabbt vill komma igång med Trafikverkets exponerade API finns:</p>
<ul>
<li><a href="https://github.com/ptz0n/php-trafikverket">API-wrapper för <strong>PHP</strong></a> av mig</li>
<li><a href="https://gist.github.com/1246066">Exempelkod för <strong>PHP</strong></a> av mig</li>
<li><a href="https://gist.github.com/1247081">Exempelkod för <strong>.NET</strong></a> av <a href="http://rickardp.se/">Rickard Pettersson</a></li>
</ul>
<h2>Andra som bloggat om Trafikverkets API</h2>
<ul>
<li><a href="http://www.mashup.se/nyheter/api-mandag-trafikverket-sj-bredbandskollen-och-e-delegationen">API Måndag – Trafikverket, SJ, Bredbandskollen och E-delegationen</a> av Andreas Krohn, Mashup.se</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/tjanster/trafikverket-exponerar-api/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Internet Ombord API med tågkoordinater</title>
		<link>http://tagtider.net/blogg/utveckling/internet-ombord-api-med-tagkoordinater/</link>
		<comments>http://tagtider.net/blogg/utveckling/internet-ombord-api-med-tagkoordinater/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 08:50:25 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Internet Ombord]]></category>
		<category><![CDATA[SJ]]></category>
		<category><![CDATA[Trafikverket]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=486</guid>
		<description><![CDATA[I morse steg jag på SJ 525 i Stockholm, anslöt till det trådlösa nätverket ombord för att få lite gjort. För att få igång internetanslutningen besöker jag i vanlig ordning någon webbplats och att blir vidarebefordrad till inloggningsformuläret för Internet Ombord. Då upptäckte jag något intressant. Webbadressen jag blev vidarebefordrad till innehåller faktiskt tågets aktuella&#8230;]]></description>
				<content:encoded><![CDATA[<p>I morse steg jag på <a href="http://tagtider.net/operatorer/sj-ab/">SJ</a> 525 i <a href="http://tagtider.net/stockholm-c/">Stockholm</a>, anslöt till det trådlösa nätverket ombord för att få lite gjort. För att få igång internetanslutningen besöker jag i vanlig ordning någon webbplats och att blir vidarebefordrad till inloggningsformuläret för Internet Ombord. Då upptäckte jag något intressant. Webbadressen jag blev vidarebefordrad till innehåller faktiskt tågets aktuella koordinater.</p>
<p><em>http://ombord.sj.se/?mac=78:CA:39:BB:15:02&amp;longitude=<strong>17.998610</strong>&amp;latitude=<strong>59.259320</strong>…</em></p>
<p>Genom att göra en mängd frågor fick jag snabbt ihop koordinaterna för tågets färd ut från <a href="http://tagtider.net/stockholm-c/">Stockholm C</a>.</p>
<ul>
<li>…?longitude=<strong>17.998610</strong>&amp;latitude=<strong>59.259320</strong>…</li>
<li>…?longitude=<strong>17.951672</strong>&amp;latitude=<strong>59.221930</strong>…</li>
<li>…?longitude=<strong>17.928563</strong>&amp;latitude=<strong>59.203430</strong>…</li>
<li>…?longitude=<strong>17.894603</strong>&amp;latitude=<strong>59.184005</strong>…</li>
<li>…?longitude=<strong>17.856482</strong>&amp;latitude=<strong>59.165897</strong>…</li>
</ul>
<p>Som <a href="http://tagtider.net/blogg/tjanster/crowdsourcing-av-taglaget/">tidigare nämnt</a> förmedlas inte denna information vidare till varken <a href="http://tagtider.net/blogg/utveckling/trafikverket-api/" title="Trafikverkets API">Trafikverket</a> eller andra intressenter. Däremot presenteras det en enklare karta med tågets position på <a href="http://ombord.sj.se/">ombord.sj.se</a>. Efter att ha kikat lite efter resurser som ligger till grund för kartan hittade jag ett API med enklare ombordinformation.</p>
<ul>
<li><strong>Endpoint:</strong> http://www.ombord.info/api/</li>
<li><strong>Format:</strong> XML eller JSONP</li>
</ul>
<h2>Metoder</h2>
<h3>Get connectivity</h3>
<p><code>GET /{format}/connectivity/[?callback={function}]</code><br />
Exempelsvar för <a href="http://www.ombord.info/api/xml/connectivity/">/xml/connectivity/</a>:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;connectivity&gt;
    &lt;online type=&quot;integer&quot;&gt;1&lt;/online&gt;
    &lt;links type=&quot;array&quot;&gt;
        &lt;link&gt;
            &lt;index type=&quot;integer&quot;&gt;2&lt;/index&gt;
            &lt;device_type type=&quot;string&quot;&gt;ethernet&lt;/device_type&gt;
            &lt;device_subtype type=&quot;string&quot;&gt;unavailable&lt;/device_subtype&gt;
            &lt;device_state type=&quot;string&quot;&gt;down&lt;/device_state&gt;
            &lt;link_state type=&quot;string&quot;&gt;disconnected&lt;/link_state&gt;
            &lt;rssi type=&quot;integer&quot;&gt;-1&lt;/rssi&gt;
            &lt;technology type=&quot;string&quot;&gt;unavailable&lt;/technology&gt;
            &lt;operator_id type=&quot;integer&quot;&gt;-1&lt;/operator_id&gt;
        &lt;/link&gt;
        &lt;link&gt;
            &lt;index type=&quot;integer&quot;&gt;101&lt;/index&gt;
            &lt;device_type type=&quot;string&quot;&gt;modem&lt;/device_type&gt;
            &lt;device_subtype type=&quot;string&quot;&gt;sierra-8700&lt;/device_subtype&gt;
            &lt;device_state type=&quot;string&quot;&gt;up&lt;/device_state&gt;
            &lt;link_state type=&quot;string&quot;&gt;available&lt;/link_state&gt;
            &lt;rssi type=&quot;integer&quot;&gt;-85&lt;/rssi&gt;
            &lt;technology type=&quot;string&quot;&gt;hspa&lt;/technology&gt;
            &lt;operator_id type=&quot;integer&quot;&gt;24005&lt;/operator_id&gt;
            &lt;umts_info&gt;
                &lt;net_status type=&quot;integer&quot;&gt;1&lt;/net_status&gt;
                &lt;lac type=&quot;string&quot;&gt;0018&lt;/lac&gt;
                &lt;cellid type=&quot;string&quot;&gt;00183689&lt;/cellid&gt;
            &lt;/umts_info&gt;
        &lt;/link&gt;
        &lt;link&gt;
            &lt;index type=&quot;integer&quot;&gt;103&lt;/index&gt;
            &lt;device_type type=&quot;string&quot;&gt;modem&lt;/device_type&gt;
            &lt;device_subtype type=&quot;string&quot;&gt;sierra-8700&lt;/device_subtype&gt;
            &lt;device_state type=&quot;string&quot;&gt;up&lt;/device_state&gt;
            &lt;link_state type=&quot;string&quot;&gt;available&lt;/link_state&gt;
            &lt;rssi type=&quot;integer&quot;&gt;-78&lt;/rssi&gt;
            &lt;technology type=&quot;string&quot;&gt;dc-hspa+&lt;/technology&gt;
            &lt;operator_id type=&quot;integer&quot;&gt;24004&lt;/operator_id&gt;
            &lt;umts_info&gt;
                &lt;net_status type=&quot;integer&quot;&gt;1&lt;/net_status&gt;
                &lt;lac type=&quot;string&quot;&gt;0502&lt;/lac&gt;
                &lt;cellid type=&quot;string&quot;&gt;04047224&lt;/cellid&gt;
            &lt;/umts_info&gt;
        &lt;/link&gt;
   &lt;/links&gt;
&lt;/connectivity&gt;</code></pre>
<h3>Get position</h3>
<p><code>GET /{format}/position/[?callback={function}]</code><br />
Exempelsvar för <a href="http://www.ombord.info/api/xml/position/">/xml/position/</a>:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;position&gt;
    &lt;time type=&quot;double&quot;&gt;1316243696&lt;/time&gt;
    &lt;latitude type=&quot;double&quot;&gt;59.0026&lt;/latitude&gt;
    &lt;longitude type=&quot;double&quot;&gt;16.269718&lt;/longitude&gt;
    &lt;altitude type=&quot;double&quot;&gt;63.1&lt;/altitude&gt;
    &lt;speed type=&quot;double&quot;&gt;44.556&lt;/speed&gt;
    &lt;cmg type=&quot;double&quot;&gt;257.3&lt;/cmg&gt;
    &lt;satellites type=&quot;integer&quot;&gt;11&lt;/satellites&gt;
&lt;/position&gt;</code></pre>
<h3>Get system</h3>
<p><code>GET /{format}/system/[?callback={function}]</code><br />
Exempelsvar för <a href="http://www.ombord.info/api/xml/system/">/xml/system/</a>:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;system&gt;
    &lt;system_id type=&quot;integer&quot;&gt;1086&lt;/system_id&gt;
&lt;/system&gt;</code></pre>
<h3>Get users</h3>
<p><code>GET /xml/users/[?callback={function}]</code><br />
Exempelsvar för <a href="http://www.ombord.info/api/xml/users/">/xml/users/</a>:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;users&gt; 
    &lt;total type=&quot;integer&quot;&gt;80&lt;/total&gt; 
    &lt;online type=&quot;integer&quot;&gt;34&lt;/online&gt; 
&lt;/users&gt;</code></pre>
<h3>Get user</h3>
<p><code>GET /{format}/user/[?callback={function}]</code><br />
Exempelsvar för <a href="http://www.ombord.info/api/xml/user/">/xml/user/</a>:</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;user&gt;
    &lt;ip type=&quot;string&quot;&gt;10.101.1.69&lt;/ip&gt;
    &lt;mac type=&quot;string&quot;&gt;78:CA:39:BB:15:02&lt;/mac&gt;
    &lt;online type=&quot;integer&quot;&gt;12160&lt;/online&gt;
    &lt;userclass type=&quot;integer&quot;&gt;2&lt;/userclass&gt;
&lt;/user&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/utveckling/internet-ombord-api-med-tagkoordinater/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Datastandarder för kollektivtrafik</title>
		<link>http://tagtider.net/blogg/utveckling/datastandarder-for-kollektivtrafik/</link>
		<comments>http://tagtider.net/blogg/utveckling/datastandarder-for-kollektivtrafik/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 21:23:20 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[Verklighet]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[DATEX]]></category>
		<category><![CDATA[GTFS]]></category>
		<category><![CDATA[SIRI]]></category>
		<category><![CDATA[TransModel]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=409</guid>
		<description><![CDATA[En tråkig del i svensk kollektivtrafik är också att vi inte har någon de fakto-standard för data mellan aktörer, intressenter och resenärer. Nedan har jag samlat övergripande fakta om standarder som används för kollektivtrafik i Europa. General Transit Feed Specification (GTFS) Datastandarden som är till grund för Google Transit, utvecklad av Google och Portland TriMet,&#8230;]]></description>
				<content:encoded><![CDATA[<p>En tråkig del i svensk kollektivtrafik är också att vi inte har någon de fakto-standard för data mellan aktörer, intressenter och resenärer. Nedan har jag samlat övergripande fakta om standarder som används för kollektivtrafik i Europa.</p>
<h2>General Transit Feed Specification (GTFS)</h2>
<p>Datastandarden som är till grund för <a href="http://www.google.com/transit/">Google Transit</a>, utvecklad av Google och <a href="http://trimet.org/">Portland TriMet</a>, ursprungligen känd som <em>Google Transit Feed Specification</em>. GTFS tar hänsyn till en mängd trafikslag där bland färja, <a href="http://sv.wikipedia.org/wiki/Wuppertals_balkbana">balkbana</a> och tunnelbana.</p>
<p><a href="http://code.google.com/intl/sv-SE/transit/spec/transit_feed_specification.html">Se hela specifikationen på Google Code</a> och läs <a href="http://sf.streetsblog.org/2010/01/05/how-google-and-portlands-trimet-set-the-standard-for-open-transit-data/">historien bakom standarden</a> hos <a href="http://sf.streetsblog.org/">Streetsblog San Francisco</a>.</p>
<ul>
<li><strong>Format: </strong>CSV</li>
<li><strong>Licens:</strong> <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a></li>
</ul>
<h3>GTFS-realtime</h3>
<p>Den 22 augusti <a href="http://googlecode.blogspot.com/2011/08/introducing-gtfs-realtime-to-exchange.html">presenterade Google</a> en ny standard, en förlängning av GTFS som möjliggör aktörer att kommunicera realtidsinformation om fordon och rutter. Utformat för enkel implementation och för att snabbt kunna förmedla information till resenärer som reser kollektivt.</p>
<p><a href="http://code.google.com/transit/realtime/">Mer om GTFS-realtime</a></p>
<div>
<ul>
<li><strong>Format:</strong> <a href="http://code.google.com/apis/protocolbuffers">Protocol Buffers</a></li>
<li><strong>Licens:</strong> <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a></li>
</ul>
<div>
<h2>TransModel</h2>
<p>TransModel är det Europeiska standardschemat, utformat för att modellera information om kollektivtrafik. Den omfattar allt från tidtabeller till bemanning och realtidsanalys. Främst är standarden anpassad till trafikslag som buss &amp; spårvagn men har också implementeras för tunnelbana och pendeltåg.</p>
<p><a href="http://www.dft.gov.uk/transmodel/">Mer om TransModel</a></p>
<ul>
<li><strong>Format:</strong> XML</li>
</ul>
</div>
</div>
<h2>DATEX2</h2>
<p><a href="http://twitter.com/cisene">Christoffer</a> tipsade mig om DATEX2 som skapats med stöd av <a href="http://www.easyway-its.eu/1/index.php?option=com_content&amp;view=article&amp;id=14&amp;Itemid=38">EasyWay-projektet</a> och medgrundats av självaste <a href="http://ec.europa.eu/index_sv.htm">EU-kommissionen</a>. Standarden omfattar främst trafikslag på väg och förmedling av trafiksituationer för analys.</p>
<p><a href="http://www.datex2.eu/">Mer information på datex2.eu</a></p>
<ul>
<li><strong>Format:</strong> XML</li>
<li><strong>Status:</strong> Under utveckling</li>
</ul>
<h2>TransXChange</h2>
<p>Den nationella standarden i England för utbyte av busstidtabeller och relaterad information. TransXChange utgörs av två modeller, en för registrering och en för utbyte av data mellan system. Används för trafik- och reseplanering samt realtidsspårning av fordon.</p>
<p><a href="http://www.dft.gov.uk/transxchange/">Mer om TransXChange</a></p>
<ul>
<li><strong>Version:</strong> 2.4</li>
<li><strong>Format:</strong> XML</li>
</ul>
<h2>Service Interface for Real Time Information</h2>
<p>SIRI är en standrad som ursprungligen togs fram med deltagare från Frankrike, Tyskland, Skandinavien(?) och England för att enklare kunna utbyta information om kollektivtrafik i realtid. Standarden bygger på publicera/prenumerera-modellen för web services (HTTP). <a href="http://hogia.se/">Hogia</a> har implementerat standarden hos operatörer i Sverige.</p>
<p>Sedan oktober 2010 baseras allt utbyte av realtidsinformation för kollektivtrafik i Norge på SIRI-standarden.</p>
<p><a href="http://www.kizoom.com/standards/siri/">Mer om SIRI</a></p>
<ul>
<li><strong>Version:</strong> 1.3</li>
<li><strong>Format:</strong> XML</li>
</ul>
<h3>Real Time Interest Group XML</h3>
<p>Utvecklad i England för att tillåta distribuerade beräkningar av information om kollektivtrafik i realtid. Formad som en förlängning av TransModel. Numera en del av SIRI.</p>
<p><a href="http://www.kizoom.com/standards/rtigxml/">Mer om RTIG-XML</a></p>
<h2>Dokumenterad men inte öppen</h2>
<p>När en eller flera standarder har valts och implementerats behöver de tillgängliggöras. Av erfarenhet är det just när det tar stopp. Information flödar mellan aktörer, men den enskilda resenären får sällan ta del av den. Antingen för sent, eller inte alls.</p>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/utveckling/datastandarder-for-kollektivtrafik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trafiklab för öppen trafikdata</title>
		<link>http://tagtider.net/blogg/utveckling/trafiklab-for-oppen-trafikdata/</link>
		<comments>http://tagtider.net/blogg/utveckling/trafiklab-for-oppen-trafikdata/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 16:25:37 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[sl]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=429</guid>
		<description><![CDATA[Idag öppnade Trafiklab upp för utvecklare att hitta trafikdata till sina projekt. Bakom initiativet står inledningsvis Samtrafiken, Storstockholms Lokaltrafik och Viktoriainstitutet med hjälp av Andreas Krohn, Deportivo och Kollegorna. Jag har följt Trafiklab som stängd beta under en tid, men nu är den äntligen live. Vi behöver just den här typen av initiativ för att öka kvaliteten på kollektivt&#8230;]]></description>
				<content:encoded><![CDATA[<p>Idag öppnade <a title="Trafiklab är ett initiativ för öppen trafikdata" href="http://www.trafiklab.se/">Trafiklab</a> upp för utvecklare att hitta trafikdata till sina projekt. Bakom initiativet står inledningsvis <a href="http://www.samtrafiken.se/">Samtrafiken</a>, <a href="http://sl.se/">Storstockholms Lokaltrafik</a> och <a href="http://www.viktoria.se/">Viktoriainstitutet</a> med hjälp av <a href="http://www.mashup.se/">Andreas Krohn</a>, <a href="http://www.deportivo.se/">Deportivo</a> och <a href="http://www.kollegorna.se/">Kollegorna</a>.</p>
<p>Jag har följt Trafiklab som stängd beta under en tid, men nu är den äntligen live. Vi behöver just den här typen av initiativ för att öka kvaliteten på kollektivt resande i Sverige.</p>
<h2>Fler som bloggat om Trafiklab</h2>
<ul>
<li><a href="http://www.mashup.se/nyheter/trafiklab-portalen-for-svenska-rese-apier">Trafiklab – portalen för svenska rese-APIer</a> – <a href="http://www.mashup.se/">Mashup.se</a></li>
<li><a href="http://www.mkse.com/2011/09/12/trafik-api-pa-drupal-fran-sl-och-samtrafiken/">Trafik API på Drupal från SL och Samtrafiken</a> – <a href="http://www.mkse.com/">MKSE</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/utveckling/trafiklab-for-oppen-trafikdata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ett år med något bättre Tågtider</title>
		<link>http://tagtider.net/blogg/verklighet/ett-ar-med-nagot-battre-tagtider/</link>
		<comments>http://tagtider.net/blogg/verklighet/ett-ar-med-nagot-battre-tagtider/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 06:00:43 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Verklighet]]></category>
		<category><![CDATA[ios]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=374</guid>
		<description><![CDATA[För precis ett år sedan, den 11 juni 2010, lanserade jag den första versionen av Tågtider. Mitt syfte med tjänsten var att lösa de problem jag ställdes inför i min vardag, som du kan läsa om i Idén bakom Tågtider. I det här inlägget vill jag se tillbaka och reflektera över det gångna året samt de&#8230;]]></description>
				<content:encoded><![CDATA[<p>För precis ett år sedan, den 11 juni 2010, lanserade jag den första versionen av <a title="Tågtider met tidtabeller för stationer och tåg i Sverige." href="http://tagtider.net/">Tågtider</a>. Mitt syfte med tjänsten var att lösa de problem jag ställdes inför i min vardag, som du kan läsa om i <a title="Idén bakom Tågtider" href="http://tagtider.net/blogg/utveckling/iden-bakom-tagtider/">Idén bakom Tågtider</a>. I det här inlägget vill jag se tillbaka och reflektera över det gångna året samt de hinder jag mött på vägen.</p>
<h2>Att tolka inkonsekvent information</h2>
<p>Som du kanske redan har noterat, hämtar jag aktuell trafikinformation direkt från, bland annat, Trafikverkets webbplats. Därefter granskas, korrigeras och ordnas informationen till det du kan ta del av, exempelvis i form av tidtabeller för <a title="Tågtider för Stockholm C" href="http://tagtider.net/stockholm-c/">Stockholm C</a>. Denna process är något jag under året kontinuerligt förfinat och optimerat för att ny trafikinformation snabbt ska kunna mottas via webb, SMS eller <a href="http://tagtider.net/">Tågtider API</a>.</p>
<p>Den information som presenteras på tavlor eller via högtalare på stationer runt om i Sverige görs manuellt från trafikledningscentraler. Nedan är några av de, enligt mig, mest udda anmärkningarna i sin helhet som Trafikverket valt att publicerat under året.</p>
<ul>
<li>älgkrock</li>
<li>Extrabuss</li>
<li>bus ers</li>
<li>Omledning</li>
<li>Personal</li>
<li>Tågab</li>
<li>inväntar</li>
<li>SJ Regio</li>
<li>Förstärk buss</li>
<li>Felvänt</li>
<li>vä</li>
<li>Arriva</li>
<li>Snö/Is</li>
<li>Nästa anslutn</li>
<li>EJ</li>
<li>Tåg-</li>
<li>Omlett</li>
<li>Bistron</li>
<li>vagnar i</li>
<li>ingen</li>
<li>P</li>
<li>Främre Tågsät</li>
<li>Neds. hast.</li>
<li>Krot tåg</li>
<li>Djur i spåret</li>
<li>Hinder</li>
<li>Tomtåg</li>
<li>Obeh i spåret</li>
<li>Broöppning</li>
<li>Spårhalka</li>
<li>Passkontr</li>
<li>Sjukdom</li>
<li>Shellmacken</li>
<li>Stängd</li>
<li>o-ordning</li>
<li>kor</li>
</ul>
<p>Genom att se till dessa förstår du kanske delar av den huvudvärk jag ständigt drabbas av. Visst är det fint att redaktörerna på <a title="Tågtider i huvudet hos trafikledningen" href="http://tagtider.net/blogg/verklighet/tagtider-i-huvudet-hos-trafikledningen/">trafikledningen</a> vill informera om alla händelser i tågtrafiken samt orsaken till dessa? Jag tycker dock att många av fraserna ovan snarare bidrar till förvirring, istället för att vägleda resenärer med relevant information. Vidare vill jag tydliggöra hur inkonsekvent data som verkligen publiceras. Fraserna nedan tolkar jag som samma anmärkning, att given avgång eller ankomst är inställd och ersatt med buss(ar).</p>
<ul>
<li>Buss ers.</li>
<li>Buss ers,</li>
<li>Buss ersätter</li>
<li>Buss</li>
<li>buss</li>
<li>bus ers</li>
<li>Ersatt av Buss</li>
<li>Ersättn.buss</li>
<li>Tågbuss</li>
<li>Buss beställd</li>
<li>Ersättn.buss</li>
</ul>
<p>För att snabbare och mer effektivt nå ut med information till resenärer föreslår jag att trafikledningen standardiserar de mest frekventa anmärkningsfraserna. Om inte annat för att undvika publicering av pinsamma felstavningar.</p>
<h2>Tågtider i mobilen</h2>
<p>Redan i september, i.o.m. lanseringen av Tågtider 2 var tjänsten anpassad för webbläsare i både smarta och enklare mobiler. Möjligheten att <a title="Tågtider i din mobil" href="http://tagtider.net/mobil/">bevaka tåg via SMS</a> har mottagits med öppna armar av resenärer runt om i landet. <a title="SJ AB" href="http://tagtider.net/operatorer/sj-ab/">SJ</a> gjorde i januari ett (halvhjärtat) försök med en <a title="SJ erbjuder pendlare trafikinformation via SMS" href="http://tagtider.net/blogg/tjanster/sj-erbjuder-pendlare-trafikinformation-via-sms/">liknande funtion</a>.</p>
<p>När jag sedan byggde Tågtider API på <a title="Tågtider API på Codemocracy" href="http://tagtider.net/blogg/utveckling/tagtider-api-codemocracy/">Codemocracy</a> tog det bara någon timme för ett par fantastiska utvecklare att bygga enklare appar för både iOS och <a title="Tågtider för Android" href="http://tagtider.net/blogg/appar/tagtider-for-android/">Android</a>. Just nu finns Tågtider i applikationer för följande mobila plattformar.</p>
<ul>
<li><a title="Tågtider för Android" href="http://tagtider.net/blogg/appar/tagtider-for-android/">Android</a></li>
<li><a title="Tågtider för Widows Phone 7" href="http://tagtider.net/blogg/appar/tagtider-for-widows-phone-7/">Windows Phone 7</a></li>
<li>iOS (beta)</li>
</ul>
<h2>Tågtider i framtiden</h2>
<p>Om du följt <a title="Tågtider blogg" href="http://tagtider.net/blogg/">bloggen</a> har du ganska bra koll på vad som komma skall. Tågtider för iOS (iPhone &amp; iPod touch) är just nu i beta och vi trimmar in såväl push-servern som detaljer i appen. Därefter är det dags för <a title="Hur jag bygger Tågtider 3" href="http://tagtider.net/blogg/utveckling/hur-jag-bygger-tagtider-3/">Tågtider 3</a>, först i form av ett helt nytt API följt av webb- och uppdaterade mobilapplikationer.</p>
<p>Så länge <a title="Trafikverkets API" href="http://tagtider.net/blogg/utveckling/trafikverket-api/">Trafikverket</a> och/eller <a title="Tågoperatörer i Sverige" href="http://tagtider.net/operatorer/">operatörer</a> inte tar sitt ansvar och förmedlar relevant information till sina resenärer, kommer jag fortsätta underhålla och utveckla <a href="http://tagtider.net/">Tågtider</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/verklighet/ett-ar-med-nagot-battre-tagtider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hur jag bygger Tågtider 3</title>
		<link>http://tagtider.net/blogg/utveckling/hur-jag-bygger-tagtider-3/</link>
		<comments>http://tagtider.net/blogg/utveckling/hur-jag-bygger-tagtider-3/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 11:57:38 +0000</pubDate>
		<dc:creator>Erik Eng</dc:creator>
				<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[tågtiderbot]]></category>
		<category><![CDATA[Trafikverket]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://tagtider.net/blogg/?p=359</guid>
		<description><![CDATA[Jag vill varna känsliga läsare för att detta är ett ganska tekniskt inlägg som kort beskriver beståndsdelarna i kommande version av tjänsten Tågtider. Funderingar eller feedback mottar jag gärna via mail, Twitter, Facebook eller svarsformuläret nedan. Tågtider 3 i molnet Det som gör att Tågtider svarar med aktuell information när du använder skickar ett SMS eller&#8230;]]></description>
				<content:encoded><![CDATA[<p>Jag vill varna känsliga läsare för att detta är ett ganska tekniskt inlägg som kort beskriver beståndsdelarna i kommande version av tjänsten <a title="Tågtider" href="http://tagtider.net">Tågtider</a>. Funderingar eller feedback mottar jag gärna via <a href="mailto:hej@tagtider.net">mail</a>, <a href="http://twitter.com/tagtider">Twitter</a>, <a href="http://www.facebook.com/tagtider">Facebook</a> eller svarsformuläret nedan.</p>
<h2>Tågtider 3 i molnet</h2>
<p>Det som gör att <em>Tågtider</em> svarar med aktuell information när du använder skickar ett SMS eller använder någon applikation.</p>
<ul>
<li><strong><a href="http://httpd.apache.org/">Apache2</a></strong> &#8211; Webbserver</li>
<li><strong><a href="http://www.php.net/">PHP5</a></strong> &#8211; Scriptspråk</li>
<li><strong><a href="http://curl.haxx.se/">cURL</a></strong> &#8211; Klient för att skicka och motta data</li>
<li><strong><a title="Open source advanced key-value store" href="http://redis.io">Redis</a></strong> (med <a title="phpredis on GitHub" href="http://github.com/nicolasff/phpredis">phpredis</a>) &#8211; Primär  datalagring i minnet med redundans till disk</li>
<li><strong><a href="http://www.mysql.com/">MySQL</a></strong> &#8211; Sekundär datalagring på disk.</li>
</ul>
<h2>Tågtiderbot spindlar trafikinformation</h2>
<p>Det är i roboten som mycket av logiken (magin) är definierad för att tolka inkonsekvent data från Trafikverket om stationer, <a title="Tågoperatörer i Sverige" href="http://tagtider.net/operatorer/">operatörer</a>, förbindelser, tåg, trafikplatser, spår etc. Då <a title="Trafikverkets API" href="http://tagtider.net/blogg/utveckling/trafikverket-api/">Trafikverket</a> inte följer <a title="Trafikverket &amp; HTTP-protokollet" href="http://tagtider.net/blogg/utveckling/trafikverket-http-protokollet/">enkla standarder för HTTP-protokollet</a> är det omöjligt att veta när informationen uppdateras. Det gör att jag i blindo kontinuerligt söker efter förändringar i järnvägstrafiken. Tågtiderbot består av följande tre delar.</p>
<ol>
<li><strong>Scheduler</strong> &#8211; Schemalägger och prioriterar nerladdningar</li>
<li><strong>Downloader</strong> &#8211; Flertrådad nerladdning av innehåll</li>
<li><strong>Parser</strong> &#8211; Läser, tolkar och relaterar informationen.</li>
</ol>
<h2>Tågtider API 2 med realtidsströmmar</h2>
<p>Första versionen av <a href="http://tagtider.net/api/">Tågtider API</a> mottogs med öppna armar av en mängd utvecklare som skapat applikationer för bland annat <a title="Tågtider för Android" href="http://tagtider.net/blogg/appar/tagtider-for-android/">Android</a>, <a title="Tågtider för Widows Phone 7" href="http://tagtider.net/blogg/appar/tagtider-for-widows-phone-7/">Windows Phone 7</a> och iPhone. Alla hurrarop och förfrågningar ger mig energi att utveckla tjänsten till något mycket bättre med tekniken nämnd ovan. Nästa version av Tågtider API omfattar bland annat:</p>
<ul>
<li>Helt öppna metodanrop för aktuella tidtabeller</li>
<li>Klientautentisering för applikationer via <a href="http://oauth.net/2/">oAuth2</a></li>
<li>Realtidsuppdateringar via <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>, <a href="http://sv.wikipedia.org/wiki/SMS">SMS</a> (via <a href="http://www.cellsynt.com/sv/">Cellsynt</a>), <a href="http://code.google.com/intl/sv-SE/android/c2dm/index.html">C2DM</a> och <a title="Apple Push Notification Service" href="http://en.wikipedia.org/wiki/Apple_Push_Notification_Service">APNS</a></li>
<li>Tillgång till historisk data.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tagtider.net/blogg/utveckling/hur-jag-bygger-tagtider-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: tagtider.net @ 2013-05-20 20:25:10 -->
