SlideShare a Scribd company logo
はじめてのプロ生 
噂に名高いプロ生、どんなところか、そろそろ参加してみようかな。 
先週まで登壇しまくりで、やっと解放された感。プロ生ちゃんでも眺めながら、まったりしよう…
はじめてのプロ生スタンド 
2日しかない… orz
プロ生ちゃんをひろっちゃう! 
プログラミング生放送勉強会第30回2014/11 名古屋ソフトウェアセンターKouji Matsui @kekyo2
自己紹介 
 Kouji Matsui (けきょ) 
 自転車乗りです 
 アーキとかスクラムマスターとか。MS界隈で生息してます。 
 Center CLRというコミュニティやってます。まだ立ち上げたばかりです。
せっかくなので、オリジナルネタを 
プロ生ちゃんの公式サイトから、イラストをダウンロードして表示します。 
手動じゃなくて、自動でやろう! 
ターゲットはこれ!
まずは調べてみよう 
プロ生ちゃんの壁紙は、以下のURLにありますね! http://pronama.azurewebsites.net/pronama/wallpaper/ 
このページのHTMLをダウンロードして、中身を解析 したら、自動でダウンロード出来るかも? 
壁紙はいくつか種類があるよ。ランドスケープ(横置 き)の画像だけ取りたいな。 
Internet Explorerで開いて、F12キーを押してみよ う!開発者ツールが使えるよ。
開発者ツールでHTMLを解析! 
①このボタンをクリックして… 
②画像をクリック 
画像に対応するHTMLの定義が どこにあるかすぐ分かる
HTMLの構造を再確認 
画像はここのdivタグに並んでる 
id属性があるね 
html→body→div(container)→ 
div(row)→div(hl_links)→div→ 
a(liimagelink)→img
目的のタグまでの階層構造 
id属性があると、見分けが付きやすい(100%信用は出来ないので注意)。 プロ生ちゃんサイトは「hl_links」というidで、ランドスケープの画像をまとめているみたい。 
あとは、class属性とタグで区別していくとベター。 
imgタグはサムネイルなので、欲しいのはその直前のaタグのhrefが示すURL。 
html→body→div(container)→div(row)→div(hl_links)→div→a(liimagelink)→img 
準備できたよっ!
HttpClientクラスでHTMLを取得! 
HttpClientクラスを使おう!「NuGet」で簡単インストール! 
HTMLは非同期でダウンロード。大丈夫、スレッドとか操作しないよ。async/awaitでサクッと実現!
SgmlReaderを使ってHTMLをXMLに変換! 
SgmlReaderを使うと、HTMLを解析してXMLリーダーのようにふるまわせることが出来るよ! 
するとすると、XDocumentに変換出来ちゃう。 
XMLになってしまえば、中身を調べる方法は沢山ある!
LINQでaタグを抽出するよ! 
XMLのネストしたタグ構造も、簡単に辿れるよ!
aタグのURLから画像をダウンロードするよ! 
画像のダウンロードもHttpClientで! 
インメモリで画像をデコードして、ImageSourceに変換するよ! 
ワーカースレッドで動かしているから、 非同期メソッドを同期的に待機してるよ
画面に表示! 
XAMLの強力な機能「データバインディング」を使えば、コレクションにAddするだけ!
デモ
高速化! 
非同期なんだから、並列でダウンロードさせたいよね! 
Task.WhenAllを使って、全ての Taskを同時に待つよ 
(地味にLINQ使ってるよ) 
処理全体を非同期で! 
URL 
URL 
URL 
URL 
非同期Task 
非同期Task 
非同期Task 
非同期Task Task.WhenAll
デモ
まとめ 
ウェブサイトからHTMLをダウンロードしてきて、中身を解析する事を「スク レイピング」といいます。 
.NETの世界では、「SgmlReader」クラスを使ってXDocumentに変換すると、 簡単にHTMLを解析できちゃうよ。 
XDocumentの解析は、LINQでサクサクと! 
HTMLや画像のダウンロードは、「HttpClient」クラスを使うよ。 
便利なライブラリは、「NuGet」で簡単インストール! 
ワーカースレッドなし!非同期でダウンロードサクサク!!
プロ生ちゃんマジ天使!! 
ご清聴ありがとうございました! 
サンプルコードはGitHubに上げてあります。 https://github.com/kekyo/Pronama.ScrapingViewer.git 
スライドはブログに掲載します。 http://www.kekyo.net/

More Related Content

DOCX
Livedoor blog
PDF
AzureとSUSE Studioのあつ~い関係
PDF
RpgツクールVX ace勉強会「はじめての操作編」 20151003
PDF
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
PDF
Jsoupを試してみたyoz。
KEY
WordPressコミュニティの魅力 | OSC Nagoya 2012 WordBench Nagoya
PPTX
モンスターストライクにおける負荷対策
PPTX
Arxan導入前後で変わったこと
Livedoor blog
AzureとSUSE Studioのあつ~い関係
RpgツクールVX ace勉強会「はじめての操作編」 20151003
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
Jsoupを試してみたyoz。
WordPressコミュニティの魅力 | OSC Nagoya 2012 WordBench Nagoya
モンスターストライクにおける負荷対策
Arxan導入前後で変わったこと

What's hot (18)

PDF
秘伝:クラウドに開発環境をえいっ!と構築する方法
PDF
モンスターストライクにおける監視システムのあれこれ
PDF
『JUnit実践入門』写経・実践会 in 横浜 #2
PDF
来週11/27(日) OSC広島のご紹介
PDF
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
ODP
Mtddc Tokyo Lt2010 oscar
PPTX
スパース性に基づく機械学習 2章 データからの学習
PDF
『JUnit実践入門』写経・実践会 in 横浜 #3
PDF
通信対戦ゲームを作った話
PDF
すごいぞVuetify!! 〜ポートフォリオを作ってみた〜
PDF
RubyGemsで公開されているライブラリをモンキーパッチした話
PPTX
WebMatrix3でwebプログラミング入門 (2013/08/03)
PDF
cocos2d-xを勉強し始めるまで
PDF
文系学生対象!! エンジニアと働きたい「非エンジニア」勉強会
PPTX
ゼロからのエンジニアが開発マネージャーになるまで
PDF
Narrative
PDF
おもわずハマるゲームのUI&UX
PPTX
マスコットアプリ後夜祭&常駐アプリを作ろう
秘伝:クラウドに開発環境をえいっ!と構築する方法
モンスターストライクにおける監視システムのあれこれ
『JUnit実践入門』写経・実践会 in 横浜 #2
来週11/27(日) OSC広島のご紹介
Linuxデスクトップのお手軽セミナー 〜クラウドとかも使いこなしちゃえ〜
Mtddc Tokyo Lt2010 oscar
スパース性に基づく機械学習 2章 データからの学習
『JUnit実践入門』写経・実践会 in 横浜 #3
通信対戦ゲームを作った話
すごいぞVuetify!! 〜ポートフォリオを作ってみた〜
RubyGemsで公開されているライブラリをモンキーパッチした話
WebMatrix3でwebプログラミング入門 (2013/08/03)
cocos2d-xを勉強し始めるまで
文系学生対象!! エンジニアと働きたい「非エンジニア」勉強会
ゼロからのエンジニアが開発マネージャーになるまで
Narrative
おもわずハマるゲームのUI&UX
マスコットアプリ後夜祭&常駐アプリを作ろう
Ad

More from Kouji Matsui (20)

PDF
パターンでわかる! .NET Coreの非同期処理
PDF
Making archive IL2C #6-55 dotnet600 2018
PDF
Matrix signal controller and BrainPad overview
PDF
Fun with BrainPad
PDF
What's Functional?
PDF
Pitfall for WioLTE
PDF
How to make the calculator
PDF
Write common, run anywhere
PDF
Locality of Reference
PDF
Nespのコード生成
PDF
C#でわかる こわくないMonad
PDF
You will be assimilated. Resistance is futile.
PDF
How to meets Async and Task
PDF
Beachhead implements new opcode on CLR JIT
PDF
Async deepdive before de:code
PDF
Thread affinity and CPS
PDF
Async DeepDive basics
PDF
continuatioN Linking
PDF
真Intermediate languageのキホン
PDF
.NET Coreから概観する.NETのOSSへの取り組み
パターンでわかる! .NET Coreの非同期処理
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Fun with BrainPad
What's Functional?
Pitfall for WioLTE
How to make the calculator
Write common, run anywhere
Locality of Reference
Nespのコード生成
C#でわかる こわくないMonad
You will be assimilated. Resistance is futile.
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
Async deepdive before de:code
Thread affinity and CPS
Async DeepDive basics
continuatioN Linking
真Intermediate languageのキホン
.NET Coreから概観する.NETのOSSへの取り組み
Ad

プロ生ちゃんをひろっちゃう!