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

19
はじめてのプロ生 噂に名高いプロ生、どんなところか、そろそろ参加してみようかな。 先週まで登壇しまくりで、やっと解放された感。プロ生ちゃんでも眺めながら、まったりしよう

Upload: kouji-matsui

Post on 05-Jul-2015

1.984 views

Category:

Software


1 download

DESCRIPTION

プロ生ちゃんをひろっちゃう! プログラミング生放送勉強会 第30回@名古屋ソフトウェアセンター http://www.kekyo.net/2014/11/08/%e3%83%97%e3%83%ad%e7%94%9f%e3%81%a1%e3%82%83%e3%82%93%e3%82%92%e3%81%b2%e3%82%8d%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%ef%bc%81-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/

TRANSCRIPT

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

はじめてのプロ生

噂に名高いプロ生、どんなところか、そろそろ参加してみようかな。

先週まで登壇しまくりで、やっと解放された感。プロ生ちゃんでも眺めながら、まったりしよう…

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

はじめてのプロ生スタンド

2日しかない… orz

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

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

プログラミング生放送勉強会第30回 2014/11 名古屋ソフトウェアセンター Kouji Matsui @kekyo2

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

自己紹介

Kouji Matsui (けきょ)

自転車乗りです

アーキとかスクラムマスターとか。MS界隈で生息してます。

Center CLRというコミュニティやってます。まだ立ち上げたばかりです。

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

せっかくなので、オリジナルネタを

プロ生ちゃんの公式サイトから、イラストをダウンロードして表示します。

手動じゃなくて、自動でやろう!

ターゲットはこれ!

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

まずは調べてみよう

プロ生ちゃんの壁紙は、以下のURLにありますね!http://pronama.azurewebsites.net/pronama/wall

paper/

このページのHTMLをダウンロードして、中身を解析したら、自動でダウンロード出来るかも?

壁紙はいくつか種類があるよ。ランドスケープ(横置き)の画像だけ取りたいな。

Internet Explorerで開いて、F12キーを押してみよう! 開発者ツールが使えるよ。

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

開発者ツールでHTMLを解析!

①このボタンをクリックして…

②画像をクリック

画像に対応するHTMLの定義がどこにあるかすぐ分かる

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

HTMLの構造を再確認

画像はここのdivタグに並んでる

id属性があるね

html→body→div(container)→

div(row)→div(hl_links)→div→

a(liimagelink)→img

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

目的のタグまでの階層構造

id属性があると、見分けが付きやすい(100%信用は出来ないので注意)。プロ生ちゃんサイトは「hl_links」というidで、ランドスケープの画像をまとめているみたい。

あとは、class属性とタグで区別していくとベター。

imgタグはサムネイルなので、欲しいのはその直前のaタグのhrefが示すURL。

html→body→div(container)→div(row)→div(hl_links)→div→a(liimagelink)→img

準備できたよっ!

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

HttpClientクラスでHTMLを取得!

HttpClientクラスを使おう!「NuGet」で簡単インストール!

HTMLは非同期でダウンロード。大丈夫、スレッドとか操作しないよ。async/awaitでサクッと実現!

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

SgmlReaderを使ってHTMLをXMLに変換!

SgmlReaderを使うと、HTMLを解析してXMLリーダーのようにふるまわせることが出来るよ!

するとすると、XDocumentに変換出来ちゃう。

XMLになってしまえば、中身を調べる方法は沢山ある!

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

LINQでaタグを抽出するよ!

XMLのネストしたタグ構造も、簡単に辿れるよ!

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

aタグのURLから画像をダウンロードするよ!

画像のダウンロードもHttpClientで!

インメモリで画像をデコードして、ImageSourceに変換するよ!

ワーカースレッドで動かしているから、非同期メソッドを同期的に待機してるよ

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

画面に表示!

XAMLの強力な機能「データバインディング」を使えば、コレクションにAddするだけ!

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

デモ

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

高速化!

非同期なんだから、並列でダウンロードさせたいよね!

Task.WhenAllを使って、全てのTaskを同時に待つよ

(地味にLINQ使ってるよ)

処理全体を非同期で!

URL

URL

URL

URL

非同期Task

非同期Task

非同期Task

非同期Task

Task

.Wh

en

All

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

デモ

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

まとめ

ウェブサイトからHTMLをダウンロードしてきて、中身を解析する事を「スクレイピング」といいます。

.NETの世界では、「SgmlReader」クラスを使ってXDocumentに変換すると、簡単にHTMLを解析できちゃうよ。

XDocumentの解析は、LINQでサクサクと!

HTMLや画像のダウンロードは、「HttpClient」クラスを使うよ。

便利なライブラリは、「NuGet」で簡単インストール!

ワーカースレッドなし!非同期でダウンロードサクサク!!

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

プロ生ちゃんマジ天使!!

ご清聴ありがとうございました!

サンプルコードはGitHubに上げてあります。https://github.com/kekyo/Pronama.ScrapingViewer.git

スライドはブログに掲載します。http://www.kekyo.net/