id:koki-hさんの「Rubyist九州7月定例会での発表内容」は,2つの意味で興味深いものでした。
ひとつは,Rubyを題材にしているということ。もうひとつは,フィジカルコンピューティングを扱っていることです。恥ずかしながら掲載されているスライドでフィジカルコンピューティングという言葉を初めて知ったのですが,現在,制御という学科名がつく学校で働いていることから非常に興味を持ちました。
まず,手始めに「Arduinoで何でも制御」の連載を始めから読んでみたいのですが,第1回を読んだあと,第2回を探すのが大変です。ということで,自分でまとめサイトを作ってみました。id:koki-hさんのモノマネです(^^)。
fetch_link.rb
エレキジャックのサイトを「Arduinoで何でも制御 連載」で検索し,検索結果のURLから記事を昇順にソートしています。連載(9)が順番を乱していますが,そのままにしています。
# -*- coding: utf-8 -*- require 'rubygems' require 'mechanize' require 'cgi' Url = "http://search.cqpub.co.jp/cgi-bin/searchej.cgi?q=" Search_word = "Arduinoで何でも制御 連載" AStruct = Struct.new(:title, :url) $arduino_links = Hash.new def fetch_link(page) page.search('a.doc_title').each do |elem| if /\A連載[(|(].*?[)|)]Arduino/ =~ elem.inner_text if /(20\d\d)\/(\d\d)\/(\d*)/ =~ elem['href'] date = sprintf("%04d%02d%02d", $1.to_i, $2.to_i, $3.to_i) while $arduino_links[date] # dateが重なったときの処理(手抜きです!) date = date.to_i + 1 date.to_s end $arduino_links[date] = AStruct.new(elem.inner_text, elem['href']) end end end end # Main. agent = WWW::Mechanize.new page = agent.get(Url + CGI.escape(Search_word) + "&o=") fetch_link(page) # 複数ページの処理 pages = page.links_with(:href => /searchej.cgi.*?pagenum=\d+?/) pages.delete_if { |elem| elem.text == "NEXT"} pages = pages[0...(pages.size/2)] pages.each do |ele| page = ele.click fetch_link(page) end $arduino_links.sort_by { |key, value| key.to_i}.each do |key ,value| puts "- <a href=\"#{value.url}\">" + value.title + "</a>\n" end
fetch_link.rbを実行したものが,以下です。