お天気 Watch サンプルソース
#wp7dev_jp
天気のRSSから情報を持ってきて表示できないかな?とおもってなんとなくコードをかいてみた。パターンはTwitterクライアントと一緒。
- コンストラクターでListboxを追加
- 同じくコンストラクターでRSS(XML)を取得
- 場所と天気を格納する Tenki クラスを定義
- RSSから天気情報が含まれる <item> の下の <title> を取得しリストボックスに格納
- その際取得文字列から場所と天気を抽出してTenkiクラスに格納しています。(gettenki関数)
[ 今日の天気 ] 東京 - 晴のち曇 - 最高気温11℃ - 2月22日(水) → gettenki → [東京] 晴のち曇
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;
}
}