SlideShare a Scribd company logo
Rubyを使って
まとめサイトをさくっと作ろう
(2009年7月Rubyist九州初心者向けコーナー)




       橋本 幸樹(koki-h)
  http://d.hatena.ne.jp/koki-h
  @20090704 Rubyist九州 定例会
今日のお題
●   フィジカルコンピューティングモジュール
    ”Pepper” のまとめサイトを先日作ったので
    その作業でいかにRubyを利用して楽をしたか、
    についてお話します。
●   上記の話題を通してRuby初心者の方にRubyの便
    利な機能やよく使われるライブラリについて情
    報をご提供できたらうれしいです。
●   まあいろいろツッコミどころはあると思いま
    す。
”Pepper”とは
●   フィジカルコンピューティングモジュール
    (Gainer互換)
●   パソコンと電子部品の橋渡しをする機器
●   これがあれば以下のようなプログラムを各種の
    言語で作成できます。
    –   たとえばパソコンの画面をクリックしたらLED点灯
        (PCからLEDを制御)
    –   たとえば警告通知メール(「サーバが止まっ
        た!」)が到着したら回転灯点灯(PCから回転灯を
        制御)
    –   たとえば大統領スイッチをおしたらWEBサイトで声
        明(大統領スイッチからPCを制御)
大統領スイッチ
  カバーを..




                                 カパッとして




                                                     ぐっと押す!




「シリコンハウス共立」 のブログより引用
http://blog.siliconhouse.jp/archives/51572333.html
Pepperのデモ
●   画面をクリックするとLED点灯
●   今回はProcessingという言語で実装していま
    す。
●   Rubyを使うことも出来ます。(が、まだ試して
    いません)
私とPepper
●   Make: Tokyo Meeting 03 でキットを販売して
    いたのを購入
●   マニュアルなし(「ネットでわかりますよ」)
●   そこで検索
●   雑誌「エレキジャック」のサイトでの作者の方
    が書いた入門記事の連載を発見!
●   ただ、ちょっと読みにくい。。。(記事自体は
    とても良い記事です)
エレキジャックの記事の
        ここが読みにくい
●   前回、次回へのリンクがない
●   連載のインデックスページがない
●   なので、第1回を読んだあと、第2回を読みたく
    ても時間をかけて探さなければならない。




    そうだ。自分でまとめサイトを作ろ
           う!
サイト内検索は?
キーワード“ Pepper”で検索した結
果
サイト内検索は?
●   "Pepper”で検索すると他の記事が上位に来る
●   掲載日順のソートが出来ない


    検索結果から必要なリンクを抜き出
           し、
     並べ替えれば読みやすくなる。

         抜き出しや並べ替えは
    Rubyで自動化できる!(ある程度)
まとめサイト製作の手順
※赤文字のところをRubyでやります

1.エレキジャックのサイトを検索し、検索結果か
  らPepperに関する記事のリンクだけを抜き出
  し、URL順(大体日付順になる)にソートする
2.日付順になっていないところをエディタで直す
3.抜き出したURLを使って記事ページ取得し、サ
  ブタイトルの部分を抜き出す
4.サブタイトルが取得できていないところをエディタで
  直す
5.URL、ページタイトル、サブタイトルを整形
  し、HTML化する
6.整形したHTMLを適当なWEBページに貼り付ける
1.検索→リンク抜き出し→ソート
# fetch_link.rb

require 'rubygems'
require 'mechanize'
url = "http://search.cqpub.co.jp/cgi-bin/searchej.cgi?q=pepper&o="
url2= "http://search.cqpub.co.jp/cgi-bin/searchej.cgi?q=pepper&qxpnd=0&pagenum=2"
Linktext_contains = /Pepper/
Agent = WWW::Mechanize.new
Links = {}

def fetch_link(url) #Mechanizeで検索結果ページを取得
 page = Agent.get(url)
 page.links_with(:text => Linktext_contains).each do |l| #Pepper関連の<a>タグのみ
  Links[l.href] = l.text                                 #URLをキーにリンク文字を格納
 end
end

fetch_link(url)
fetch_link(url2)

Links.keys.sort.each do |k|       #URL順にソートしてタブ区切りで出力
 printf "%st%sn", Links[k], k
end
1.検索→リンク抜き出し→ソート
       (解説)
●   WWW::Mechanizeというライブラリを使用してい
    ます。
●   WWW::Mechanizeはブラウザの代わりにスクリプ
    トでWEBにアクセスするためのライブラリです
●   WWW::Mechanizeは 最近のRubyが入っていて、
    ネットにつながっている環境ならコマンドライ
    ンから
    “gem install mechanize” とやると入ります
    ※gemコマンドは”RubyGems”というRuby用のライブラリやRubyで書かれたアプリを
    管理するソフトウェアです。Ruby1.9系には標準添付ですが、Ruby1.8系だと別途イ
    ンストールしなければならない場合があります。(1.8系でもパッケージ作者さんが
    添付している場合が多いようです。)



                          前のスライドに戻ってソースを見直してみましょう
出力結果(イメージ)
記事タイトルに"Pepper”を含むものだけが抜き出されました

 Ginger/Pepper/Sugarでフィジカル・コンピューティング(1) - フィジカル・
 コンピュー...http://www.eleki-jack.com/FC/2008/11/post.html
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(2) - フィジカル・
 コンピュー...http://www.eleki-
 jack.com/FC/2008/11/gingerpeppersugar2.html
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(3) - フィジカル・
 コンピュー...http://www.eleki-
 jack.com/FC/2008/11/gingerpeppersugar3.html
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(4) - フィジカル・
 コンピュー...http://www.eleki-
 jack.com/FC/2008/11/gingerpeppersugar4.html
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(5) - フィジカ
 ル・コンピュー...http://www.eleki-
 jack.com/FC/2008/11/gingerpeppersugar.html
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(6) - フィジカル・
 コンピュー...http://www.eleki-
 jack.com/FC/2008/11/gingerpeppersugar6.html
               ※プログラムの実行結果をエディタで修正したものの一部
 Ginger/Pepper/Sugarでフィジカル・コンピューティング(7) - フィジカル・
               です。
 コンピュー...http://www.eleki-jack.com/FC/2008/11/7.html
3.記事ページ取得して
                サブタイトル抜き出し
#fetch_subtitle.rb

require 'rubygems'
require 'csv'
require 'open-uri'
require 'nokogiri'

file = './url_list.txt'                #前工程の出力結果(タブ区切りテキスト(TSV))
CSV.open(file,"r","t") do |row| #TSVの読み込み
  title = row[0]                       #各カラムが自動的に配列に入ってくれる
  url = row[1]
  page = open(url)                     #ページを取得
  doc = Nokogiri::HTML(page) #HTMLをnokigiriで解析
  subtitle = doc.css(".asset-body b")[0] #CSSセレクタでサブタイトル抜き出し
  subtitle = subtitle.text if subtitle
  printf "%st%st%sn",url, title.sub(/ - .*$/,''), subtitle #サブタイトル付きで出力(TSV)
end
3.記事ページ取得して
    サブタイトル抜き出し(解説)
●   タブ区切りテキストの読み込みにCSVライブラ
    リを使っています。自動で行区切り、列区切り
    をやってくれるので便利です。
●   ページ取得はここではMechanizeの代わりに
    open-uriライブラリを使っています。
●   CSVライブラリとopen-uriライブラリはRubyに
    標準添付です。
●   HTMLを解析してサブタイトルを抜き出すのには
    Nokogiri を使っています。”gem install
    nokogiri”で入ります。CSSセレクタパターン
    で抜き出せます。
出力結果(イメージ)
 記事のサブタイトルが追加されました
http://www.eleki-jack.com/FC/2008/11/post.html Ginger/Pepper/Sugarでフィジカル・
コンピューティング(1)               はじめに
http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar2.html    Ginger/Pepper/Sugar
でフィジカル・コンピューティング(2) 第2回 Pepperを組み立てよう-1
http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar3.html    Ginger/Pepper/Sugar
でフィジカル・コンピューティング(3) 第2回 Pepperを組み立てよう-2
http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar4.html    Ginger/Pepper/Sugar
でフィジカル・コンピューティング(4) 第3回 Pepperの動作を確認しよう-1
http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar.html Ginger/Pepper/Sugarで
フィジカル・コンピューティング(5) 第3回 Pepperの動作を確認しよう-2 
(Processingのインストール編)
http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar6.html    Ginger/Pepper/Sugar
でフィジカル・コンピューティング(6) 第4回 PepperでHello World
http://www.eleki-jack.com/FC/2008/11/7.htmlGinger/Pepper/Sugarでフィジカル・コン
ピューティング(7)             (前回からの続き)



                            ※プログラムの実行結果をエディタで修正したものの一部
                            です。
5.整形、HTML化
#make_html.rb

require 'rubygems'
require 'csv'
require 'erb'
TEMPLATE =<<TEMPLATE #出力結果のテンプレート
 <p>
  <a href=<%= url %>><%= title %></a><br />
  <span style="font-size:85%"><%= subtitle %></span>
 </p>
TEMPLATE
FORMATTER = ERB.new(TEMPLATE)

file = './subtitles.txt'           #前工程の出力結果(タブ区切りテキスト
(TSV))
CSV.open(file,"r","t") do |row|   #TSV読み込み
  url      = row[0]
  title = row[1]
  subtitle = row[2]
  puts FORMATTER.result(binding)    #erbでフォーマットして出力
end
5.整形、HTML化(解説)
●   TSV読み込みのところは前の工程と一緒です。
●   HTMLに整形する部分はERBを使っています。
●   ERBはRubyに標準添付のテンプレートエンジン
    です。(Ruby on Railsでも使われていま
    す。)
●   ERBを使うと書式の中にテキストを埋め込むこ
    とが簡単にできます。
出力結果(部分)
これを適当なWEBページに貼り付ければ完成です!

  <p>
   <a href=http://www.eleki-jack.com/FC/2008/11/post.html>Ginger/Pepper/Sugarで
フィジカル・コンピューティング(1)</a><br />
   <span style="font-size:85%">はじめに</span>
  </p>
  <p>
   <a href=http://www.eleki-
jack.com/FC/2008/11/gingerpeppersugar2.html>Ginger/Pepper/Sugarでフィジカル・
コンピューティング(2)</a><br />
   <span style="font-size:85%">第2回 Pepperを組み立てよう-1</span>
  </p>
  <p>
   <a href=http://www.eleki-
jack.com/FC/2008/11/gingerpeppersugar3.html>Ginger/Pepper/Sugarでフィジカル・
コンピューティング(3)</a><br />
   <span style="font-size:85%">第2回 Pepperを組み立てよう-2</span>
  </p>
まとめ
●   WEBから何かを取得して抜き出すときは
    WWW::Mechanizeが便利
●   単純なWEBアクセスにはopen-uriが便利
●   CSVの読み込みにはCSVライブラリが便利
●   HTMLを解析して特定の要素を抜き出すには
    Nokigiriが便利
●   テンプレート出力にはERBが便利
●   似たような機能を持つライブラリは他にもあり
    ます。慣れてきたらもっと自分好みのものを探
    してみるのもいいかと思います。
リンク
●   WWW::Mechanize
    –   http://d.hatena.ne.jp/kitamomonga/20081209/kai
        setsu_for_ver_0_9_ruby_www_mechanize
●   open-uri
    –   http://www.ruby-
        lang.org/ja/man/html/open_uri.html
●   CSV
    –   http://www.ruby-lang.org/ja/man/html/CSV.html
●   Nokogiri
    –   http://mono.kmc.gr.jp/~yhara/rubyscraping/?
        Nokogiri
リンク(2)
●   ERB
    –   http://www.ruby-lang.org/ja/man/html/erb.html
●   RubyGems
    –   http://www.ruby-
        lang.org/ja/man/html/RubyGems.html
●   Pepperまとめサイト
    –   http://pepper.gohannnotomo.org
●   雑誌「エレキジャック」
    –   http://www.eleki-jack.com/
質疑応答
ご清聴ありがとうございました

More Related Content

PDF
Haikara
PPT
web server
PDF
Puppet on AWS
KEY
Itcamp長崎2012 capistrano
PPTX
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
PDF
ChefとPuppetの比較
PPTX
Puppetのススメ
PDF
Pycon2014 django performance
Haikara
web server
Puppet on AWS
Itcamp長崎2012 capistrano
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
ChefとPuppetの比較
Puppetのススメ
Pycon2014 django performance

What's hot (20)

PDF
らくちん Go言語
PDF
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
PDF
明日から使えるコーディングツール
PDF
Ansible 入門 #01 (初心者向け)
KEY
ゆるかわPhp
PDF
Mina 20130417
PDF
The master plan of scaling a web application
PDF
Ansible roleとinventoryの書き方
PDF
Chef+serverspec+werckerでインフラCIする話
PDF
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
PDF
Chefを利用した運用省力化とDevOpsの取り組みについて
PDF
Ansible入門
PDF
RubyもApache Arrowでデータ処理言語の仲間入り
PPTX
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
PDF
Chef SoloからItamaeに完全移行した話+
PDF
Ansible入門...?
PPTX
明日から始める Chef 入門 #bpstudy
PDF
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
PDF
Word pressのテーマは firephpでハックすれば 良かったのか
PPTX
Ansible ではじめるインフラのコード化入門
らくちん Go言語
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
明日から使えるコーディングツール
Ansible 入門 #01 (初心者向け)
ゆるかわPhp
Mina 20130417
The master plan of scaling a web application
Ansible roleとinventoryの書き方
Chef+serverspec+werckerでインフラCIする話
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
Chefを利用した運用省力化とDevOpsの取り組みについて
Ansible入門
RubyもApache Arrowでデータ処理言語の仲間入り
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Chef SoloからItamaeに完全移行した話+
Ansible入門...?
明日から始める Chef 入門 #bpstudy
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Word pressのテーマは firephpでハックすれば 良かったのか
Ansible ではじめるインフラのコード化入門
Ad

Viewers also liked (11)

PDF
Welcome pepper~facebookで振り返る片想い?が実るまでの軌跡~
PDF
20160529 Pepper SDK for Android Studio
PDF
Pepper x IoT x Web 勉強会やってみた話と失敗談
PDF
Pepper DAYS ☆ -Pepperのいる世界-
PPTX
NAO Workshop #1
PPTX
ニンニンPepperアプリ概要と技術説明
PDF
Pepperって実際何モノ?
PDF
Wo! vol.38 ロボットの「iPhone」になるか?Pepperの概要
PDF
IBM Blluemix を Pepper とつないでみよう
PPTX
Pepper アプリデベロッパーのための NAO アプリ開発講座1
PPTX
Pepper活用提案書
Welcome pepper~facebookで振り返る片想い?が実るまでの軌跡~
20160529 Pepper SDK for Android Studio
Pepper x IoT x Web 勉強会やってみた話と失敗談
Pepper DAYS ☆ -Pepperのいる世界-
NAO Workshop #1
ニンニンPepperアプリ概要と技術説明
Pepperって実際何モノ?
Wo! vol.38 ロボットの「iPhone」になるか?Pepperの概要
IBM Blluemix を Pepper とつないでみよう
Pepper アプリデベロッパーのための NAO アプリ開発講座1
Pepper活用提案書
Ad

Similar to 20090704rubyist九州 (20)

PDF
安全なプログラムの作り方
ODP
kpfx07 LT ruby-processingでイケメンになりたい
PDF
エコなWebサーバー
PDF
Web技術勉強会23回目
PDF
Red Data Tools
PPTX
エンジニアという職業について
PDF
Rails vim easy
PPTX
趣味でやるSmalltalk Webアプリ開発
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
Fluentd casual
PDF
Mojolicious::Liteを使ってみよう
PDF
実践スクレイピング
PDF
Rubyで始めるWebスクレイピング
PDF
Fluentd Casual Talks LT #fluentd #fluentdcasual
PPT
Mohawk presentation-gdg-kobe
PDF
ScrapyとPhantomJSを用いたスクレイピングDSL
PDF
Web技術勉強会 第37回
PDF
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
PDF
#31 愛しのst2
PPTX
Couch Db勉強会0623 by yssk22
安全なプログラムの作り方
kpfx07 LT ruby-processingでイケメンになりたい
エコなWebサーバー
Web技術勉強会23回目
Red Data Tools
エンジニアという職業について
Rails vim easy
趣味でやるSmalltalk Webアプリ開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Fluentd casual
Mojolicious::Liteを使ってみよう
実践スクレイピング
Rubyで始めるWebスクレイピング
Fluentd Casual Talks LT #fluentd #fluentdcasual
Mohawk presentation-gdg-kobe
ScrapyとPhantomJSを用いたスクレイピングDSL
Web技術勉強会 第37回
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
#31 愛しのst2
Couch Db勉強会0623 by yssk22

20090704rubyist九州

  • 1. Rubyを使って まとめサイトをさくっと作ろう (2009年7月Rubyist九州初心者向けコーナー) 橋本 幸樹(koki-h) http://d.hatena.ne.jp/koki-h @20090704 Rubyist九州 定例会
  • 2. 今日のお題 ● フィジカルコンピューティングモジュール ”Pepper” のまとめサイトを先日作ったので その作業でいかにRubyを利用して楽をしたか、 についてお話します。 ● 上記の話題を通してRuby初心者の方にRubyの便 利な機能やよく使われるライブラリについて情 報をご提供できたらうれしいです。 ● まあいろいろツッコミどころはあると思いま す。
  • 3. ”Pepper”とは ● フィジカルコンピューティングモジュール (Gainer互換) ● パソコンと電子部品の橋渡しをする機器 ● これがあれば以下のようなプログラムを各種の 言語で作成できます。 – たとえばパソコンの画面をクリックしたらLED点灯 (PCからLEDを制御) – たとえば警告通知メール(「サーバが止まっ た!」)が到着したら回転灯点灯(PCから回転灯を 制御) – たとえば大統領スイッチをおしたらWEBサイトで声 明(大統領スイッチからPCを制御)
  • 4. 大統領スイッチ カバーを.. カパッとして ぐっと押す! 「シリコンハウス共立」 のブログより引用 http://blog.siliconhouse.jp/archives/51572333.html
  • 5. Pepperのデモ ● 画面をクリックするとLED点灯 ● 今回はProcessingという言語で実装していま す。 ● Rubyを使うことも出来ます。(が、まだ試して いません)
  • 6. 私とPepper ● Make: Tokyo Meeting 03 でキットを販売して いたのを購入 ● マニュアルなし(「ネットでわかりますよ」) ● そこで検索 ● 雑誌「エレキジャック」のサイトでの作者の方 が書いた入門記事の連載を発見! ● ただ、ちょっと読みにくい。。。(記事自体は とても良い記事です)
  • 7. エレキジャックの記事の ここが読みにくい ● 前回、次回へのリンクがない ● 連載のインデックスページがない ● なので、第1回を読んだあと、第2回を読みたく ても時間をかけて探さなければならない。 そうだ。自分でまとめサイトを作ろ う!
  • 9. サイト内検索は? ● "Pepper”で検索すると他の記事が上位に来る ● 掲載日順のソートが出来ない 検索結果から必要なリンクを抜き出 し、 並べ替えれば読みやすくなる。 抜き出しや並べ替えは Rubyで自動化できる!(ある程度)
  • 10. まとめサイト製作の手順 ※赤文字のところをRubyでやります 1.エレキジャックのサイトを検索し、検索結果か らPepperに関する記事のリンクだけを抜き出 し、URL順(大体日付順になる)にソートする 2.日付順になっていないところをエディタで直す 3.抜き出したURLを使って記事ページ取得し、サ ブタイトルの部分を抜き出す 4.サブタイトルが取得できていないところをエディタで 直す 5.URL、ページタイトル、サブタイトルを整形 し、HTML化する 6.整形したHTMLを適当なWEBページに貼り付ける
  • 11. 1.検索→リンク抜き出し→ソート # fetch_link.rb require 'rubygems' require 'mechanize' url = "http://search.cqpub.co.jp/cgi-bin/searchej.cgi?q=pepper&o=" url2= "http://search.cqpub.co.jp/cgi-bin/searchej.cgi?q=pepper&qxpnd=0&pagenum=2" Linktext_contains = /Pepper/ Agent = WWW::Mechanize.new Links = {} def fetch_link(url) #Mechanizeで検索結果ページを取得 page = Agent.get(url) page.links_with(:text => Linktext_contains).each do |l| #Pepper関連の<a>タグのみ Links[l.href] = l.text #URLをキーにリンク文字を格納 end end fetch_link(url) fetch_link(url2) Links.keys.sort.each do |k| #URL順にソートしてタブ区切りで出力 printf "%st%sn", Links[k], k end
  • 12. 1.検索→リンク抜き出し→ソート (解説) ● WWW::Mechanizeというライブラリを使用してい ます。 ● WWW::Mechanizeはブラウザの代わりにスクリプ トでWEBにアクセスするためのライブラリです ● WWW::Mechanizeは 最近のRubyが入っていて、 ネットにつながっている環境ならコマンドライ ンから “gem install mechanize” とやると入ります ※gemコマンドは”RubyGems”というRuby用のライブラリやRubyで書かれたアプリを 管理するソフトウェアです。Ruby1.9系には標準添付ですが、Ruby1.8系だと別途イ ンストールしなければならない場合があります。(1.8系でもパッケージ作者さんが 添付している場合が多いようです。) 前のスライドに戻ってソースを見直してみましょう
  • 13. 出力結果(イメージ) 記事タイトルに"Pepper”を含むものだけが抜き出されました Ginger/Pepper/Sugarでフィジカル・コンピューティング(1) - フィジカル・ コンピュー...http://www.eleki-jack.com/FC/2008/11/post.html Ginger/Pepper/Sugarでフィジカル・コンピューティング(2) - フィジカル・ コンピュー...http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar2.html Ginger/Pepper/Sugarでフィジカル・コンピューティング(3) - フィジカル・ コンピュー...http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar3.html Ginger/Pepper/Sugarでフィジカル・コンピューティング(4) - フィジカル・ コンピュー...http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar4.html Ginger/Pepper/Sugarでフィジカル・コンピューティング(5) - フィジカ ル・コンピュー...http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar.html Ginger/Pepper/Sugarでフィジカル・コンピューティング(6) - フィジカル・ コンピュー...http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar6.html ※プログラムの実行結果をエディタで修正したものの一部 Ginger/Pepper/Sugarでフィジカル・コンピューティング(7) - フィジカル・ です。 コンピュー...http://www.eleki-jack.com/FC/2008/11/7.html
  • 14. 3.記事ページ取得して サブタイトル抜き出し #fetch_subtitle.rb require 'rubygems' require 'csv' require 'open-uri' require 'nokogiri' file = './url_list.txt' #前工程の出力結果(タブ区切りテキスト(TSV)) CSV.open(file,"r","t") do |row| #TSVの読み込み title = row[0] #各カラムが自動的に配列に入ってくれる url = row[1] page = open(url) #ページを取得 doc = Nokogiri::HTML(page) #HTMLをnokigiriで解析 subtitle = doc.css(".asset-body b")[0] #CSSセレクタでサブタイトル抜き出し subtitle = subtitle.text if subtitle printf "%st%st%sn",url, title.sub(/ - .*$/,''), subtitle #サブタイトル付きで出力(TSV) end
  • 15. 3.記事ページ取得して サブタイトル抜き出し(解説) ● タブ区切りテキストの読み込みにCSVライブラ リを使っています。自動で行区切り、列区切り をやってくれるので便利です。 ● ページ取得はここではMechanizeの代わりに open-uriライブラリを使っています。 ● CSVライブラリとopen-uriライブラリはRubyに 標準添付です。 ● HTMLを解析してサブタイトルを抜き出すのには Nokogiri を使っています。”gem install nokogiri”で入ります。CSSセレクタパターン で抜き出せます。
  • 16. 出力結果(イメージ) 記事のサブタイトルが追加されました http://www.eleki-jack.com/FC/2008/11/post.html Ginger/Pepper/Sugarでフィジカル・ コンピューティング(1) はじめに http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar2.html Ginger/Pepper/Sugar でフィジカル・コンピューティング(2) 第2回 Pepperを組み立てよう-1 http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar3.html Ginger/Pepper/Sugar でフィジカル・コンピューティング(3) 第2回 Pepperを組み立てよう-2 http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar4.html Ginger/Pepper/Sugar でフィジカル・コンピューティング(4) 第3回 Pepperの動作を確認しよう-1 http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar.html Ginger/Pepper/Sugarで フィジカル・コンピューティング(5) 第3回 Pepperの動作を確認しよう-2  (Processingのインストール編) http://www.eleki-jack.com/FC/2008/11/gingerpeppersugar6.html Ginger/Pepper/Sugar でフィジカル・コンピューティング(6) 第4回 PepperでHello World http://www.eleki-jack.com/FC/2008/11/7.htmlGinger/Pepper/Sugarでフィジカル・コン ピューティング(7) (前回からの続き) ※プログラムの実行結果をエディタで修正したものの一部 です。
  • 17. 5.整形、HTML化 #make_html.rb require 'rubygems' require 'csv' require 'erb' TEMPLATE =<<TEMPLATE #出力結果のテンプレート <p> <a href=<%= url %>><%= title %></a><br /> <span style="font-size:85%"><%= subtitle %></span> </p> TEMPLATE FORMATTER = ERB.new(TEMPLATE) file = './subtitles.txt' #前工程の出力結果(タブ区切りテキスト (TSV)) CSV.open(file,"r","t") do |row| #TSV読み込み url = row[0] title = row[1] subtitle = row[2] puts FORMATTER.result(binding) #erbでフォーマットして出力 end
  • 18. 5.整形、HTML化(解説) ● TSV読み込みのところは前の工程と一緒です。 ● HTMLに整形する部分はERBを使っています。 ● ERBはRubyに標準添付のテンプレートエンジン です。(Ruby on Railsでも使われていま す。) ● ERBを使うと書式の中にテキストを埋め込むこ とが簡単にできます。
  • 19. 出力結果(部分) これを適当なWEBページに貼り付ければ完成です! <p> <a href=http://www.eleki-jack.com/FC/2008/11/post.html>Ginger/Pepper/Sugarで フィジカル・コンピューティング(1)</a><br /> <span style="font-size:85%">はじめに</span> </p> <p> <a href=http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar2.html>Ginger/Pepper/Sugarでフィジカル・ コンピューティング(2)</a><br /> <span style="font-size:85%">第2回 Pepperを組み立てよう-1</span> </p> <p> <a href=http://www.eleki- jack.com/FC/2008/11/gingerpeppersugar3.html>Ginger/Pepper/Sugarでフィジカル・ コンピューティング(3)</a><br /> <span style="font-size:85%">第2回 Pepperを組み立てよう-2</span> </p>
  • 20. まとめ ● WEBから何かを取得して抜き出すときは WWW::Mechanizeが便利 ● 単純なWEBアクセスにはopen-uriが便利 ● CSVの読み込みにはCSVライブラリが便利 ● HTMLを解析して特定の要素を抜き出すには Nokigiriが便利 ● テンプレート出力にはERBが便利 ● 似たような機能を持つライブラリは他にもあり ます。慣れてきたらもっと自分好みのものを探 してみるのもいいかと思います。
  • 21. リンク ● WWW::Mechanize – http://d.hatena.ne.jp/kitamomonga/20081209/kai setsu_for_ver_0_9_ruby_www_mechanize ● open-uri – http://www.ruby- lang.org/ja/man/html/open_uri.html ● CSV – http://www.ruby-lang.org/ja/man/html/CSV.html ● Nokogiri – http://mono.kmc.gr.jp/~yhara/rubyscraping/? Nokogiri
  • 22. リンク(2) ● ERB – http://www.ruby-lang.org/ja/man/html/erb.html ● RubyGems – http://www.ruby- lang.org/ja/man/html/RubyGems.html ● Pepperまとめサイト – http://pepper.gohannnotomo.org ● 雑誌「エレキジャック」 – http://www.eleki-jack.com/