#wp7dev_jp

天気のRSSから情報を持ってきて表示できないかな?とおもってなんとなくコードをかいてみた。パターンはTwitterクライアントと一緒。

  1. コンストラクターでListboxを追加
  2. 同じくコンストラクターでRSS(XML)を取得
  3. 場所と天気を格納する Tenki クラスを定義
  4. RSSから天気情報が含まれる <item> の下の <title> を取得しリストボックスに格納
    • その際取得文字列から場所と天気を抽出してTenkiクラスに格納しています。(gettenki関数)

[ 今日の天気 ] 東京 - 晴のち曇 - 最高気温11℃ - 2月22日(水)   → gettenki → [東京] 晴のち曇

最終的にはバインドしてグラフィカルに表示させたい ♪image

public partial class MainPage : PhoneApplicationPage

{

    ListBox listbox = new ListBox(); 
    // コンストラクター

    public MainPage() 
   
        InitializeComponent(); 
        this.FontSize = 42; 
        ContentPanel.Children.Add(listbox);

        WebClient rss = new WebClient(); 
        rss.DownloadStringCompleted +=
                new DownloadStringCompletedEventHandler(
                       rss_DownloadStringCompleted); 
        rss.DownloadStringAsync(
                new Uri("http://weather.livedoor.com/forecast/rss/index.xml", UriKind.Absolute));

    }

    public class Tenki
   
        public string place { get; set; } 
        public string tenki { get; set; }

        //public string tenki1 { get; set; } 
        //public string tenki2 { get; set; } 
        //public string freq { get; set; } 
        //public string tenki3 { get; set; }

        public override string ToString() 
       
            if (place == "") return ""
            return "[" + place + "] " + tenki
       
    }    

    void rss_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    {

        if (e.Error != null
            return;

        XElement xmlTweets = XElement.Parse(e.Result);

        listbox.ItemsSource
            from item in xmlTweets.Descendants("item"
            select gettenki( item.Element("title").Value );

    }

    Tenki gettenki(String title) 
    {

        Regex re = new Regex(
                ".*] (?<place>.*?) - (?<tenki>.*?) –.*-.*",
                RegexOptions.IgnoreCase | RegexOptions.Singleline); 
        Match m = re.Match(title);

        Tenki tenki = new Tenki() 
       
            place = m.Groups["place"].Value, 
            tenki = m.Groups["tenki"].Value 
        };

        //if (tenki.tenki.Length <= 2) 
        //    tenki.tenki1 = tenki.tenki; 
        //else 
        //{ 
        //    tenki.tenki1 = tenki.tenki.Substring(0, 1); 
        //    tenki.freq = tenki.tenki.Substring(1, 2); 
        //    tenki.tenki2 = tenki.tenki.Substring(3, 1); 
        //}

        return tenki
    }
}