Inital commit
authorGustav Eek <gustav.eek@etraveli.com>
Fri, 8 Sep 2017 17:32:27 +0000 (19:32 +0200)
committerGustav Eek <gustav.eek@etraveli.com>
Fri, 8 Sep 2017 17:32:27 +0000 (19:32 +0200)
.gitignore [new file with mode: 0644]
apitest/examples/Javascript_Search.html [new file with mode: 0644]
apitest/tests/a-test.py [new file with mode: 0644]
apitest/tests/a-test.sh [new file with mode: 0644]
notes.mdwn [new file with mode: 0644]
stations.py [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..ed8635c
--- /dev/null
@@ -0,0 +1,4 @@
+*#
+*~
+.#*
+*.xml
\ No newline at end of file
diff --git a/apitest/examples/Javascript_Search.html b/apitest/examples/Javascript_Search.html
new file mode 100644 (file)
index 0000000..63ede98
--- /dev/null
@@ -0,0 +1,206 @@
+<!DOCTYPE html>\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+    <title></title>\r
+    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">\r
+    <style>\r
+        table\r
+        {\r
+            border: 1px solid #000000;\r
+            border-collapse: collapse;\r
+            border-spacing: 0px;\r
+        }\r
+        table td\r
+        {\r
+            padding: 8px 8px;\r
+        }\r
+    </style>\r
+    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>\r
+    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>\r
+    <script type="text/javascript">\r
+        var Stations = new Array();\r
+        $(document).ready(function () {\r
+            $.support.cors = true; // Enable Cross domain requests\r
+            try {\r
+                $.ajaxSetup({\r
+                    url: "http://api.trafikinfo.trafikverket.se/v1/data.json",\r
+                    error: function (msg) {\r
+                        if (msg.statusText == "abort") return;\r
+                        alert("Request failed: " + msg.statusText + "\n" + msg.responseText);\r
+                    }\r
+                });\r
+            }\r
+            catch (e) { alert("Ett fel uppstod vid initialisering."); }\r
+            // Create an ajax loading indicator\r
+            var loadingTimer;\r
+            $("#loader").hide();\r
+            $(document).ajaxStart(function () {\r
+                loadingTimer = setTimeout(function () {\r
+                    $("#loader").show();\r
+                }, 200);\r
+            }).ajaxStop(function () {\r
+                clearTimeout(loadingTimer);\r
+                $("#loader").hide();\r
+            });\r
+            // Load stations\r
+            PreloadTrainStations();\r
+        });\r
+\r
+        function PreloadTrainStations() {\r
+            // Request to load all stations\r
+            var xmlRequest = "<REQUEST>" +\r
+                                // Use your valid authenticationkey\r
+                                "<LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />" +\r
+                                "<QUERY objecttype='TrainStation'>" +\r
+                                    "<FILTER/>" +\r
+                                    "<INCLUDE>Prognosticated</INCLUDE>" +\r
+                                    "<INCLUDE>AdvertisedLocationName</INCLUDE>" +\r
+                                    "<INCLUDE>LocationSignature</INCLUDE>" +\r
+                                "</QUERY>" +\r
+                             "</REQUEST>";\r
+            $.ajax({\r
+                type: "POST",\r
+                contentType: "text/xml",\r
+                dataType: "json",\r
+                data: xmlRequest,\r
+                success: function (response) {\r
+                    if (response == null) return;\r
+                    try {\r
+                        var stationlist = [];\r
+                        $(response.RESPONSE.RESULT[0].TrainStation).each(function (iterator, item)\r
+                        {\r
+                            // Save a key/value list of stations\r
+                            Stations[item.LocationSignature] = item.AdvertisedLocationName;\r
+                            // Create an array to fill the search field autocomplete.\r
+                            if (item.Prognosticated == true)\r
+                                stationlist.push({ label: item.AdvertisedLocationName, value: item.LocationSignature });\r
+                        });\r
+                        fillSearchWidget(stationlist);\r
+                    }\r
+                    catch (ex) { }\r
+                }\r
+            });\r
+        }\r
+\r
+        function fillSearchWidget(data) {\r
+            $("#station").val("");\r
+            $("#station").autocomplete({\r
+                // Make the autocomplete fill with matches that "starts with" only\r
+                source: function (request, response) {\r
+                    var matches = $.map(data, function (tag) {\r
+                        if (tag.label.toUpperCase().indexOf(request.term.toUpperCase()) === 0) {\r
+                            return {\r
+                                label: tag.label,\r
+                                value: tag.value\r
+                            }\r
+                        }\r
+                    });\r
+                    response(matches);\r
+                },\r
+                select: function (event, ui) {\r
+                    var selectedObj = ui.item;\r
+                    $("#station").val(selectedObj.label);\r
+                    // Save selected stations signature\r
+                    $("#station").data("sign", selectedObj.value);\r
+                    return false;\r
+                },\r
+                focus: function (event, ui) {\r
+                    var selectedObj = ui.item;\r
+                    // Show station name in search field\r
+                    $("#station").val(selectedObj.label);\r
+                    return false;\r
+                }\r
+            });\r
+        }\r
+\r
+        function Search() {\r
+            var sign = $("#station").data("sign");\r
+            // Clear html table\r
+            $('#timeTableDeparture tr:not(:first)').remove();\r
+\r
+            // Request to load announcements for a station by its signature\r
+            var xmlRequest = "<REQUEST version='1.0'>" +\r
+                                "<LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />" +\r
+                                "<QUERY objecttype='TrainAnnouncement' " +\r
+                                    "orderby='AdvertisedTimeAtLocation' >" +\r
+                                    "<FILTER>" +\r
+                                    "<AND>" +\r
+                                        "<OR>" +\r
+                                            "<AND>" +\r
+                                                "<GT name='AdvertisedTimeAtLocation' " +\r
+                                                            "value='$dateadd(-00:15:00)' />" +\r
+                                                "<LT name='AdvertisedTimeAtLocation' " +\r
+                                                            "value='$dateadd(14:00:00)' />" +\r
+                                            "</AND>" +\r
+                                            "<GT name='EstimatedTimeAtLocation' value='$now' />" +\r
+                                        "</OR>" +\r
+                                        "<EQ name='LocationSignature' value='" + sign + "' />" +\r
+                                        "<EQ name='ActivityType' value='Avgang' />" +\r
+                                    "</AND>" +\r
+                                    "</FILTER>" +\r
+                                    // Just include wanted fields to reduce response size.\r
+                                    "<INCLUDE>InformationOwner</INCLUDE>" +\r
+                                    "<INCLUDE>AdvertisedTimeAtLocation</INCLUDE>" +\r
+                                    "<INCLUDE>TrackAtLocation</INCLUDE>" +\r
+                                    "<INCLUDE>FromLocation</INCLUDE>" +\r
+                                    "<INCLUDE>ToLocation</INCLUDE>" +\r
+                                "</QUERY>" +\r
+                                "</REQUEST>";\r
+            $.ajax({\r
+                type: "POST",\r
+                contentType: "text/xml",\r
+                dataType: "json",\r
+                data: xmlRequest,\r
+                success: function (response) {\r
+                    if (response == null) return;\r
+                    if (response.RESPONSE.RESULT[0].TrainAnnouncement == null)\r
+                        jQuery("#timeTableDeparture tr:last").\r
+                            after("<tr><td colspan='4'>Inga avgångar hittades</td></tr>");\r
+                    try {\r
+                        renderTrainAnnouncement(response.RESPONSE.RESULT[0].TrainAnnouncement);\r
+                    }\r
+                    catch (ex) { }\r
+                }\r
+            });\r
+        }\r
+\r
+        function renderTrainAnnouncement(announcement) {\r
+            $(announcement).each(function (iterator, item) {\r
+                var advertisedtime = new Date(item.AdvertisedTimeAtLocation);\r
+                var hours = advertisedtime.getHours()\r
+                var minutes = advertisedtime.getMinutes()\r
+                if (minutes < 10) minutes = "0" + minutes\r
+                var toList = new Array();\r
+                $(item.ToLocation).each(function (iterator, toItem) {\r
+                    toList.push(Stations[toItem]);\r
+                });\r
+                var owner = "";\r
+                if (item.InformationOwner != null) owner = item.InformationOwner;\r
+                jQuery("#timeTableDeparture tr:last").\r
+                    after("<tr><td>" + hours + ":" + minutes + "</td><td>" + toList.join(', ') +\r
+                    "</td><td>" + owner + "</td><td style='text-align: center'>" + item.TrackAtLocation +\r
+                    "</td></tr>");\r
+            });\r
+        }\r
+\r
+    </script>\r
+</head>\r
+<body>\r
+    <div>\r
+        <input id="station" type="text" />\r
+        <input type="button" value="Visa" onclick="javascript: Search()" />\r
+        <span id="loader" style="margin-left: 10px">Laddar data ...</span>\r
+    </div>\r
+    <div id="result">\r
+        <h3>Avgående tåg</h3>\r
+        <table border="1" id="timeTableDeparture">\r
+                      <tr>\r
+                        <th scope="col" style="width:40px;">Tid</th>\r
+                        <th scope="col" style="width:200px;">Till</th>\r
+                        <th scope="col" style="width:80px;"></th>\r
+                        <th scope="col"  style="width:80px;">Spår</th>\r
+                      </tr>\r
+                    </table>\r
+                  </div>\r
+</body>\r
+</html>\r
diff --git a/apitest/tests/a-test.py b/apitest/tests/a-test.py
new file mode 100644 (file)
index 0000000..a5f99a0
--- /dev/null
@@ -0,0 +1,30 @@
+#1/usr/bin/python
+
+import xml.etree.ElementTree as ET
+import re
+
+
+tree = ET.parse('respons.xml')
+response = root = tree.getroot()
+
+result = respons[0]; print result.tag, result.attrib
+
+for c in result:
+    print c.tag, c.attrib, c.text
+
+for c in result[0]:
+    print c.tag, c.attrib, len(c), c.text
+
+
+# Parse train station info
+
+tree = ET.parse('train-station-response.xml')
+response = root = tree.getroot()
+
+result = root[0]
+train_station = n = root[0][0]; print n.tag, n.attrib, len(n), n.text
+
+for c in n:
+    print c.tag, c.attrib, len(c), c.text
+
+station_names = [n[0].text for n in result]
diff --git a/apitest/tests/a-test.sh b/apitest/tests/a-test.sh
new file mode 100644 (file)
index 0000000..911886b
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# Dokumentation http://api.trafikinfo.trafikverket.se/API/TheRequest
+
+authentication_key="d5c9638b906b45a9876c7f7192b9e11d"
+objecttype="TrainStation"
+
+request="<REQUEST>
+  <LOGIN authenticationkey=\"$authentication_key\" />
+  <QUERY objecttype=\"$objecttype\" limit=\"10\">
+  <FILTER>
+    <EQ name=\"SomeDataField\" value=\"2\" />
+  </FILTER>
+  </QUERY>
+</REQUEST>"
+
+request="<REQUEST>
+      <LOGIN authenticationkey=\"$authentication_key\" />
+      <QUERY objecttype=\"TrainAnnouncement\">
+            <FILTER>
+                  <EQ name=\"AdvertisedTrainIdent\" value=\"535\" />
+            </FILTER>
+      </QUERY>
+</REQUEST>"
+
+# URLer
+# http://api.trafikinfo.trafikverket.se/v1.2/data.xml
+# http://api.trafikinfo.trafikverket.se/v1.2/data.json
+# http://api.trafikinfo.trafikverket.se/v1.1/data.xml
+# http://api.trafikinfo.trafikverket.se/v1.1/data.json
+# http://api.trafikinfo.trafikverket.se/v1/data.xml
+# http://api.trafikinfo.trafikverket.se/v1/data.json
+
+url='http://api.trafikinfo.trafikverket.se/v1.2/data.xml'
+
+curl -v -H "Content-Type: text/xml" -d "$request" "$url" > train-announcement-respons.xml
+
+request="
+    <REQUEST>
+       <LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />
+       <QUERY objecttype='TrainStation'>
+           <FILTER/>
+           <INCLUDE>Prognosticated</INCLUDE>
+           <INCLUDE>AdvertisedLocationName</INCLUDE>
+           <INCLUDE>LocationSignature</INCLUDE>
+       </QUERY>
+    </REQUEST>
+"
+
+curl -v -H "Content-Type: text/xml" -d "$request" "$url" > train-station-response.xml
+
+
+
diff --git a/notes.mdwn b/notes.mdwn
new file mode 100644 (file)
index 0000000..30c13cc
--- /dev/null
@@ -0,0 +1,310 @@
+# Titel
+
+"Hacking economy, economy hacked"
+
+"Hacking travelling, 
+
+"Enforcing co-produced travel experience"
+
+"Progression on rails; co-travelling hacked"
+
+"Restablishing the cotravelling best practicies"
+
+"Spårad utveckling"
+
+"Ur spår är tiden"
+
+"Ur spår med tiden"
+
+"Res gement: med(-)resenär ur spår"
+
+"Hackar resandets upplevelse"
+
+"Vi reser gemen-samt"
+
+"Att resa gement"
+
+"Gement resande"
+
+"Kollektivt resande med spår i tiden"
+
+# Åtgärder
+
+ * TODO Ta bilder
+
+# Syftet
+
+**Trainhack.** Sprida kunskap om data och API.
+
+(Främja nätverkande)
+
+Unique challeging hack, tjänster, som gör resande och kollektivtrafik
+enklare, och ger en positiv upplevelse.
+
+**Vårt projekt.**
+
+Vi vill ta det ett steg till
+
+<center>
+Världsrevolution
+</center>
+
+Mer än kunder: medresenärer.
+
+Tekniken suger ut aktiviteten och kreativiteten och frukten i
+dialog. Man blir ickenärvarande. Men eftersom vi vill använda tekniken
+för att resenärerna ska närma sig varandra.
+
+Förslaget var att skapa lösningar som hanterar det oförutsedda i
+trafiken. Vi påstår att tekniken i sig har stort inflytande över
+människorna, många gånger konserverande (konservativt, (Varför vill
+man ha incheckning på tåget?)). Istället tycker vi tekniken kan skapa
+det oförutsedda och agera progressivt.
+
+Heads up
+
+Telefonen
+
+Får inte bli identitets-grejen
+
+
+
+
+# Orten
+
+Uppsala eller Byske? Åsträsk? Jörn?
+
+Tåg 92 Göteborg--Luleå stannar i Vindeln, Bastuträsk, Jörn, Älvsbyn,
+Boden, och Sunderby
+
+# Datakällor och frågor
+
+Frågorna
+
+ * Vad skulle huset kosta?
+ * Vilka är mina grannar?
+ * Vad jobbar man med här?
+ * Vad röstar mina grannar på här?
+ * Avstånd till skola?
+ * Avstånd till bio?
+ * Vad mer?
+ * Frekvens tågavgångar (Trafikverkets öppna? TODO verifiera)
+ * Rekreation
+
+Kartkällorna
+
+ * Valmyndighen
+ * Lantmäteriet
+ * Trafikverket -- Lastkajen, vilket Jonas presenterade.
+ * (TODO För huspriser)
+ * (TODO För skola och hus)
+Andra API:er
+
+ * Trafikverkets öppna
+
+    * Avgångsfrekvens
+    * Antalet olika linjer
+       
+ * Resrobbot
+    * Antal byten till "storstad" 
+       * Total bytesväntestid 
+    * Total ombordtid på tåg (ju mer desto bättre)
+    * Risk för att inte få sittplats?
+               
+Andra källor
+
+ * Statistiska Centralbyråns (SCB) arbetsplatsregistret
+   
+    * Information om skolornas placering -- Istället medelavstånd
+      eller medianavstånd i kommunen
+
+
+# Interaktion med medresenärer per aparatstöd
+
+Heads up
+
+Kupe: Tågförsening blir giftemål (TODO kolla artikeln)
+
+Martin: Vänner som blev tillsammans: Tåget kom inte. Tyst. 30
+minuter. Tyst. "Tycker du om pankakor?"
+
+Hur provocera (TODO term? "uppmuntra", "vecka intresse", ...) till
+interaktion? Nyfikenhet centralt. Uppmärksamhet. Alternativa köandet.
+
+Inspiration:
+
+ * Som kösystem, alternativ till att stå i kö eller ännu värre
+   nummerlappar där man får sig en plats enkom genom interaktion med
+   apparaten.
+
+
+# Utveckla egna källor
+
+ * 
+
+(TODO kolla upp MashUp)
+
+# Resekvalitet
+
+Det är värt att åka tåg. Dock risk för att inte få sittplats?
+T.ex. Uppsalapendeln, där män ofta får stå.
+
+# Presentation
+
+
+Upplägg -- Bildspel? A3? Teater?
+
+ 1. Teaterdialogen
+
+    * Bakgrund och syfte ingår
+
+ 2. Övergång bildspel (fortsatt dialogform)
+  
+    * Vad det faktiskt är tekniskt
+
+    * Återkoppla till syfte (täck in fulständigt)
+
+       * Bilder, fotografier
+
+       * "Heads up" -- Vad är det.
+
+    * Datakällor (alla vi tänkt på)
+       
+          * Vilka vi faktiskt verifierat
+
+    * Utökningsbarhet
+
+ 3. Fördjupad demonstration
+
+
+Bilder på frågorna?
+
+ * Rekreation ... Vad är värde i livet? Hur vill vi leva våra liv?
+ * Vad skulle huset kosta?
+ * Vad röstar mina grannar på här?
+ * Avstånd till skola?
+ * Avstånd till bio?
+ * Frekvens tågavgångar (Trafikverkets öppna? TODO verifiera)
+
+(Får inte bli identitets-grejen)
+
+
+**Älvsbyn-dialogen**
+
+ C: Två medresenärer kring tågfönstret. "Pling!" Huvet ner i
+ telefonen. Trist? Inte då: Teknik kan också främja interaktion med
+ medresenärer. A kollar ner i telefonen
+
+ A: "Jaha, vi är i Älvsbyn."
+
+ B: (Någon observation)
+
+ A: (Något svar)
+
+ B: "Kan man bo här (?) Hur många gör det?"
+
+ A: "Närmare 5 000 personer -- tendensen är att det minskar. Peak var 1980: 5 500 pers."
+Paus
+
+ A: Och folk flyttar runt rätt bra. 47 villaförsäljningar bara i år
+    enligt mäklarstatistiken. Slutpris 0.7302 MSEK i genomsnitt. Och
+    de ligger ute för 0.801 MSEK
+ B: Jaha, så priserna går ner i försäljningen.
+
+ A: Ja, men inte mycket: ner 9 % vid försäljning. 
+ A forts: Motsvarande i Uppsala från när vi passerade var upp 5.5 %
+ där var genomsnittliga slutpriset för villa 5.90 MSEK
+   
+ B: Vad sa vi? 107 försäljningar? Bara dubbelt så många (!!) Och i
+ Uppsala bor 150 000: 30 gånger fler: 0.7 mot 8 promille i
+ villaomsättning per befolkning.
+
+Villor lanen 1417 vs 1856 14463 vs 25637 pkvm
+
+
+TODO Täck in närigslivet 
+
+
+**Noter**
+
+* Bef:utv. ([Älvsbyn](https://sv.wikipedia.org/wiki/Älvsbyn)) (1900,
+  974; 1950, 2787; 1960, 2832; 1965, 3590; 1970, 3902; 1975, 4707;
+  1980, 5445; 1990, 5328; 1995, 5365; 2000, 5176; 2005, 5042; 2010,
+  4967; 2015, 4976)
+
+* Bef:utv. ([Uppsala](https://sv.wikipedia.org/wiki/Uppsala#Befolkningsutveckling))
+  (1950, 56052; 1960, 72978; 1965, 82450; 1970, 92624; 1975, 101850;
+  1980, 102102; 1990, 109497; 1995, 119979; 2000, 124036; 2005,
+  128409; 2010, 140454; 2015, 149245)
+
+* Villamarknaden Älvsbyn ([Hemnet](http://hemnet.se/salda/bostader))
+
+   * 6 till salu, men 47 slutpriser i år
+
+   * Till salupris medel 0.801 MSEK (1.09, 0.95, 0.55, (3.25), 0.49,
+     0.925)
+
+   * Slutpris medel 0.7302 MSEK (0.725, 0.450, 0.840, 0.46, 0.50,
+     0.50, 1.75, 0.60, 0.70, 0.95, 0.49, 0.39, 0.97, 0.85, 1.10, 0.80,
+     0.58, 0.84, 0.48, 0.50, 0.62, .32, .74, .60, 1.50)
+
+* Uppsala
+
+   * 39 till salu 107 slutpriser 
+
+   * Upp 5.5 % vid försäljning
+
+   * Till salupriser medel 5.59 MSEK (5.35, 4.80, 4.35, 4.29, 6.99,
+     6.50, 5.60, 3.90, 5.50, 5.45, 7.48, 5.95, 8.25, 5.90, 5.40, 3.60,
+     5.99, 5.49, 5.35, (22.0))
+
+   * Slutpriser medel 5.90 MSEK (5.35, (9.19), 5.75, 5.46, 4.98, 7.30,
+     5.70, 9.50, 4.05, 6.40, 6.0, 8.49, 8.68, 4.39, 4.10, 6.69, 6.50,
+     6.10, 5.25, 6.78, 4.12, 4.0, 4.31)
+
+
+
+**Byske-dialogen.** "Pling!" Huvet ner i telefonen. Trist? Inte då: Teknik
+kan också främja interaktion med medresenärer. A kollar ner i
+telefonen
+
+ A: "Jaha, vi är i Byske."
+
+
+ B: "Byske, jaha. Stationen är fin."
+
+ A: "Huset blev modell för flera längs sträckan: Åsträsk, Tvärålund,
+    Brännberg ... många. Byskemodellen är en typ av
+    järnvägsstationshus av VI-klassen ritat av chefsarkitekten vid
+    Statens Järnvägars arkitektkontor Adolf W. Edelsvärd."
+
+ B: "Kan man bo här (?) Hur många gör det?"
+
+ A: "Närmare 1800 personer -- ökande sedan 2015. Peak var 1980: 2000 pers."
+Paus
+
+ A: Enligt mäklarstatistiken var slutpris villa 1.6 i genomsnitt. De ligger ute för 0.9825
+ B: Det är en ganska stor skillnad
+ A: X % !!  Motsvarande  i Uppsala när vi passerade var Y %
+
+
+Källorna
+
+ * [Bysekmodellen](https://sv.wikipedia.org/wiki/Byskemodellen)
+
+  * Bef:utv. (1960, 1143; 1965, 1345; 1970, 1551; 1975, 1710; 1980,
+   1999; 1990, 1932; 1995, 1852; 2000, 1738; 2005, 1731; 2010, 1728;
+   2015, 1785) [Byske](https://sv.wikipedia.org/wiki/Byske)
+
+ * Mäklarstatistik, Byske, annonsering (1.25, 1.2, 0.89, 0.59) MSEK
+   och slutpris (1.67, 0.92, 1.8, 1.5, 2.15) MSEK
+
diff --git a/stations.py b/stations.py
new file mode 100644 (file)
index 0000000..130d3b3
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+
+# Gets train information
+
+import httplib, urllib
+import xml.etree.ElementTree as ET
+
+BASE_URL = url = "http://api.trafikinfo.trafikverket.se/v1.2/data.xml"
+BASE_URL = url = "api.trafikinfo.trafikverket.se/v1.2/data.xml"
+PORT = 80
+HEADERS = {"Content-Type": "text/xml"}
+
+def get_train_stations ():
+
+    xml_request = """
+    <REQUEST>
+       <LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />
+       <QUERY objecttype='TrainStation'>
+           <FILTER/>
+           <INCLUDE>Prognosticated</INCLUDE>
+           <INCLUDE>AdvertisedLocationName</INCLUDE>
+           <INCLUDE>LocationSignature</INCLUDE>
+       </QUERY>
+    </REQUEST>
+    """
+
+    conn = httplib.HTTPConnection(BASE_URL, PORT)
+    conn.request("POST", "", xml_request, HEADERS)
+    response = conn.getresponse()
+    print response.status, response.reason # 303 Found
+    xml_data = response.read()
+    conn.close()
+
+    response = root = ET.fromstring(xml_data)
+
+
+if __name__ == '__main__':
+
+