Sida 1 av 1

Exempelkod i C# för att hämta temperaturer från temperatur.n

Postat: 07 feb 2008, 11:33
av elf98
Det dök upp ett mail med kod som kan användas för att hämta temperaturer från temperatur.nu.

Någon kankse är intresserad?

Kod: Markera allt

using System;
using System.IO;
using System.Net;
using System.Globalization;
using System.Text.RegularExpressions;

namespace EurofireControl
{
    public class Temp
    {
        protected static Regex termoPattern = new Regex(@"Time[:][ ](\d{2}[:]\d{2})[,][ ]Date[:][ ](\d{2}[ ][a-zA-Z]{3}[ ]\d{4})[,][ ]Temp[:][ ]([-]?[0-9\.]+)", RegexOptions.Compiled|RegexOptions.IgnoreCase);

        public static bool GetCurrentTemp(out DateTime date, out double temp)
        {
            bool fStatus = false;
            date = DateTime.MinValue;
            temp = 0.0;

            // reads temp from temperatur.nu, expected format:
            // Time: 22:07, Date: 09 Jan 2008, Temp: 2.6°C
            try
            {

                WebRequest wr = HttpWebRequest.Create("http://www.temperatur.nu/termo/sollentuna/termo.txt");
                wr.Method = "GET";
                wr.Timeout = 10000;

                using(WebResponse resp = wr.GetResponse())
                {
                    using(Stream s = resp.GetResponseStream())
                    {
                        StreamReader sr = new StreamReader(s);
                        String termoLine = sr.ReadToEnd();
                        sr.Close();

                        Match termoMatch = termoPattern.Match(termoLine);
                        if(termoMatch.Success)
                        {
                            CultureInfo ci = new CultureInfo("en-US");

                            string dateTimeString = String.Format("{0} {1}", termoMatch.Groups[2].Value, termoMatch.Groups[1].Value);
                            date = DateTime.ParseExact(dateTimeString, "dd MMM yyyy HH:mm", ci);
                            ci.NumberFormat.NumberDecimalSeparator = ".";
                            temp = double.Parse(termoMatch.Groups[3].Value, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, ci);
                            fStatus = true;
                        }
                    }
                    resp.Close();
                }
            }
            catch(Exception)
            {
            }

            return fStatus;
        }
    }
}
Koden är skriven av Johan Olofsson