お天気 Watch サンプルソース

#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("https://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;
    }
}