インターネット上のデータを取得したくなった。
インターネット経由で情報を取得する方法のうちの一つ。
System.Net.WebClientクラスを利用してみる。
(C#1.2以降)
WebClientクラス
System.Net.WebClientクラスはURIからデータ送信とデータ受信を行ってくれるクラスです。
URIとはUniformResourceIdentifierの略称で、リソースの識別子である。ここでは詳細には言及しない。今回はその識別子が示すリソースを取得し利用することが主題である。
試しにこのgoogleのHTMLを取得して表示してみる。
public class WebClientSample01{ public static void Main(){ using(var client = new System.Net.WebClient()){ var uri = @"https://google.com"; client.Encoding = System.Text.Encoding.UTF8; var html = client.DownloadString(uri); System.Console.WriteLine(html); } } }
出力はgoogleトップのhtmlが出力される。
内容は単純で、6行目のstring DownloadString(string)で、4行目で指定したuriからデータをダウンロードして、出力するだけ。3行目はWebClientがIDsipose(正確にはComponentが実装していてそれを継承している)を実装しているのでusingステートメントでのリソースの自動解放をしている。
上記は簡潔にしたかったので記述していないが、実際に利用する時はtry-catchステートメントでSystem.Net.WebException例外をcatchしてやったほうがいいと思われる。
また、WebClientには
public System.IO.Stream OpenRead (string address); public byte[] DownloadData (string address); public void DownloadFile (string address, string fileName); public string DownloadString(string address);
といったインターネット上のリソースを色んな型で取得するメソッドを持っており、必要に応じてそれぞれを利用できる。これらに合わせてAsync、つまり非同期的に取得してくれる、
public void OpenReadAsync (Uri address); public void DownloadDataAsync (Uri address); public void DownloadFileAsync (Uri address, string fileName); public void DownloadStringAsync(Uri address);
もあることを覚えておく。インターネット上のリソースへのアクセスはどうしても重い処理になりがちなので、利用できるならこちらを利用していきたい。
各メソッドの通知を受け取るには、OnXXXCompleted(XXXCompletedEventArgs)イベントハンドラメソッドを実装しEvent XXXCompletedに追加してやればOK。
WebClient自体は読み込みだけでなく書き込みにも対応しているようだが、今回はこれもスルーする。
これでインターネット上の資源にもアクセスすることが出来るようになりました。
これを利用して出来ることはたくさんありそうなので、色々考えたいと思います。