簡易ニコ生アラートっぽいものを
作ろうとしてる。なお完成するかどうかは不明の模様。
XMLSocketが何かとか受信方法、WPFの勉強のために……。
更新がてらにコミュIDからコミュ名とオーナーを取得するやつを書いてみましたです……。
HtmlAgilityPackに依存してます。もっといい書き方があるかもと思いつつここに残す。
using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using HtmlAgilityPack; class NicoCommunity { private string communityId; private string communityName; private string owner; /// <summary>コミュニティIDの取得、設定を行います</summary> public string CommunityId { get { return communityId; } set { if ( !IsValidCommunityId( value ) ) throw new Exception( "コミュニティIDが正しくありません" ); communityId = value; } } /// <summary>コミュニティ名の取得を行います </summary> public string CommunityName { get { return communityName; } } /// <summary>コミュニティのオーナーの取得を行います</summary> public string Owner { get { return owner; } } /// <summary>超デフォルトコンストラクタ</summary> public NicoCommunity() { } /// <summary>コミュIDを指定したコンストラクタ</summary> /// <param name="communityId"></param> public NicoCommunity( string communityId ) : this() { CommunityId = communityId; } /// <summary>コミュニティの情報を取得します</summary> public void GetCommunityInfo() { string html = null; using ( WebClient client = new WebClient() ) { using ( Stream stream = client.OpenRead( @"http://com.nicovideo.jp/community/" + communityId ) ) { using ( StreamReader reader = new StreamReader( stream, Encoding.UTF8 ) ) { html = reader.ReadToEnd(); } } } GetCommunityName( html ); GetCommunityOwner( html ); } /// <summary>コミュニティの名前を取得します</summary> /// <param name="html">コミュニティページのHTML</param> private void GetCommunityName( string html ) { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml( html ); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes( "//h1[@id='community_name']" ); if ( nodes.Count > 0 ) communityName = nodes[ 0 ].InnerText; } /// <summary>コミュニティのオーナーを取得します </summary> /// <param name="html">コミュニティページのHTML</param> private void GetCommunityOwner( string html ) { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml( html ); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes( "//div[@class='r']//a//strong" ); if ( nodes.Count > 0 ) owner = nodes[ 0 ].InnerHtml; } /// <summary>コミュIDが正しいかどうか調べます</summary> /// <returns>判定結果</returns> private static bool IsValidCommunityId( string communityId ) { return Regex.IsMatch( communityId, @"^co\d+$" ); } }