sodjan:
Anledningen till att jag vill köra med C# är för att jag tycker att det är nog så jobbigt att lära mig det mitt i bland stuider, jobb osv... Men python står näst på tur på "saker-jag-vill-lära-mig-innan-allt-blir-svart-listan". Sparar länken så jag kan kika på det då. Och som svar på din andra fråga så är svaret nej - ingen inloggning krävs.
Zeela:
Tack för att du erbjuder dig att titta på koden. Nu har jag fått en annan kod att fungera men om du vill kolla på den gamla så kan jag ska fixa fram en XML-fil men hinner nog inte riktigt idag, ska iväg på galej om <45 min. Jag är faktiskt intresserad av varför den inte fungerar.
Övriga:
Var borta på middag hela kvällen igår och eftersom att jag var ganska pigg när jag kom hem vid 01:00 så startade jag datorn och fortsatte att felsöka/arbeta med koden. Jag följde Microsofts Tutorial till punkt och pricka(CTRL+C CTRL+V) och efter en stunds funderande om vad som egentligen händer så lyckades jag presentera lite data på skärmen! Koden är varken snygg och jag tror inte att den är effektiv men vad gör det kände jag
Ny kod för konsolapplikation:
Kod: Markera allt
using System;
using System.Xml;
namespace ReadXMLfromURL
{
class Class1
{
static void Main(string[] args)
{
Console.WriteLine("Ange SiteID, xxxx, för hållplats: ");
Console.WriteLine("Slussen: 9192, Huddinge: 9527, Vänhemsvägen: 7074");
string SiteID = Console.ReadLine();
String URLString1 = "http://api.sl.se/api2/realtimedepartures.xml?key=MINAPINYCKEL&siteid=";
String URLString2 = "&timewindow=60";
String URLString = URLString1 + SiteID + URLString2;
XmlTextReader reader = new XmlTextReader(URLString);
int destination = 1;
int time = 1;
int clock = 1;
int Line = 1;
int Buses = 1;
int Trains = 1;
int Metros = 1;
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Text: //Display the text in each element
if (Metros == 0)
{
Console.WriteLine(" ");
Console.WriteLine("Tunnelbana:");
Metros = 1;
}
if (Buses == 0)
{
Console.WriteLine(" ");
Console.WriteLine("Buss:");
Buses = 1;
}
if (Trains == 0)
{
Console.WriteLine(" ");
Console.WriteLine("Pendeltåg:");
Trains = 1;
}
if (Line == 0)
{
Console.Write("Linje " + reader.Value);
Line = 1;
}
if (destination == 0)
{
Console.Write(" mot " + reader.Value + " ");
destination = 1;
}
if (time == 0)
{
Console.WriteLine(reader.Value);
time = 1;
}
if (clock == 0)
{
string clock2 = Convert.ToString(reader.Value);
var s = @clock2;
var r = s.Substring(s.IndexOf(@"T") + 1);
Console.WriteLine("Senast uppdaterad: " + r);
clock = 1;
}
break;
case XmlNodeType.Element: // The node is an element.
if (reader.Name == "Destination")
{ destination = 0; }
if (reader.Name == "DisplayTime")
{ time = 0; }
if (reader.Name == "LatestUpdate")
{ clock = 0; }
if (reader.Name == "LineNumber")
{ Line = 0; }
if (reader.Name == "Buses")
{ Buses = 0; }
if (reader.Name == "Trains")
{ Trains = 0; }
if (reader.Name == "Metros")
{ Metros = 0; }
break;
}
}
Console.ReadKey();
}
}
}
reseplanerare6.JPG
Idag på eftermiddagen fortsatte jag men att skriva om den till en Windows Form Application:
Kod för Windows Form Application:
Kod: Markera allt
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string SiteID = "7074";
String URLString1 = "http://api.sl.se/api2/realtimedepartures.xml?key=MINAPINYCKEL&siteid=";
String URLString2 = "&timewindow=60";
String URLString = URLString1 + SiteID + URLString2;
XmlTextReader reader = new XmlTextReader(URLString);
int destination = 1;
int time = 1;
int Line = 1;
string Linje = " ";
string mot = " ";
string tid = " ";
int clock = 1;
int a = 0;
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Text:
if (Line == 0)
{
Linje = "Linje " + reader.Value;
Line = 1;
a++;
}
if (destination == 0)
{
mot = (" mot " + reader.Value + " ");
destination = 1;
}
if (time == 0)
{
tid = (reader.Value);
time = 1;
}
if (clock == 0)
{
string clock2 = Convert.ToString(reader.Value);
var s = @clock2;
var r = s.Substring(s.IndexOf(@"T") + 1);
label3.Text = (r);
clock = 1;
}
if (a == 1)
label1.Text = Linje + mot + tid;
if (a == 2)
label5.Text = Linje + mot + tid;
if (a == 3)
label6.Text = Linje + mot + tid;
break;
case XmlNodeType.Element:
if (reader.Name == "Destination")
{ destination = 0; }
if (reader.Name == "DisplayTime")
{ time = 0; }
if (reader.Name == "LineNumber")
{ Line = 0; }
if (reader.Name == "LatestUpdate")
{ clock = 0; }
break;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
Reseplanerare5.JPG
Båda koderna innehåller säkert mycket onödigt, konstiga variabelnamn och blanksteg etc så det får bli morgondagens projekt att städa upp och effektivisera. Ikväll ska jag bara njuta av att det fungerar!

Sen ska jag fixa till UI på senaste koden och lägga till auto-update, möjlighet att välja station etc. Det blir nog en projekttråd snart då jag ska köra koden, på något sätt, på en hallonpaj med tillhörande skärm i en snygg låda... Ska försöka få till så den presenterar avgångarna efter den som går först också. Och möjlighet att välja vilket färdslag, buss/båt/tåg etc, man vill presentera. Kanske möjlighet att presentera enstaka linjer också. Vi får se hur det blir helt enkelt, det blir väl ytterligare ett never ending project....
Emil
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.