読者です 読者をやめる 読者になる 読者になる

仕事中、一瞬の隙も見逃さずに情報収集できるRubyワンライナーとスクリプト

情報収集はビジネスマンとしての基本である。しかし普段シェルで作業する者としては、毎回ブラウザを立ち上げる時間すら不毛である。よって、シェルから一瞬で情報収集できるRubyワンライナーを書いた。

上からYahoo, はてな, Naverまとめ, 2ちゃん

$ ruby -r open-uri -e 'open("http://www.yahoo.co.jp").read.scan(/topics.+?>([^<]+?)</) {|m| puts m}'
$ ruby -r open-uri -e 'open("http://b.hatena.ne.jp/hotentry").read.scan(/entry-link.+>(.+?)</) {|m| puts m}'
$ ruby -r open-uri -e 'open("http://matome.naver.jp/").read.scan(%r{matomename.+?-->(.+?)<!-}m) {|m| puts m}'
$ ruby -r open-uri -e 'open("http://uni.2ch.net/newsplus/").read.scan(/<a.+?>\d+?:\s(.+?)</) {|m| puts m}' | nkf -w

あれ?

普通にブラウザ開いた方が早いw

なので

コマンド一発で情報収集できるスクリプトを書いた

news
#!/usr/bin/env ruby
 
require 'open-uri'
require 'nkf'
 
defined_sites = {
  'yahoo' => {
    'url' => 'http://www.yahoo.co.jp',
    'regexp' => /topics.+?>([^<]+?)</
  },
  'hatena' => {
    'url' => 'http://b.hatena.ne.jp/hotentry',
    'regexp' => /entry-link.+>(.+?)</
  },
  'naver' => {
    'url' => 'http://matome.naver.jp/',
    'regexp' => /matomename.+?-->(.+?)<!--/m
  },
  '2ch' => {
    'url' => 'http://uni.2ch.net/newsplus/',
    'regexp' => /<a.+?>\d+?:\s(.+?)</
  }
}
 
class Site
  attr_accessor :url, :regexp
 
  def initialize
    yield self
  end
 
  def fetch
    open(@url) do |f|
      f.read.scan(@regexp) {|m| puts NKF.nkf('-w', m.join)}
    end
  end
end
 
site_names = ARGV.empty? ? defined_sites.keys : ARGV
sites = []
site_names.each do |site_name|
  raise 'not defined' unless defined_sites.keys.include? site_name
 
  sites << Site.new do |s|
    s.url = defined_sites[site_name]['url']
    s.regexp = defined_sites[site_name]['regexp']
  end
end
 
sites.map(&:fetch)

こいつに実行権限を与えて、pathを通して、newsコマンド

$ news

東電社長 時効主張せずと明言
鳩山元首相、招かれ訪中へ
高2自殺 前日に平手30-40発?
JTB 企業の体力測定事業参入
魔女狩りで禁固20年 ネパール
本田にミランがオファー準備
安藤美姫がトヨタ自動車退社
金爆・鬼龍院のNSC芸人時代
今日の話題(27件)
一番福へ全速力
...

キタ!


yahooとhatenaだけ表示したければ

$ news yahoo hatena


対象サイトを追加したければ、ハッシュ(defined_sites )に追加すればOK!
これで一瞬の隙も見逃さずに情報収集する「できるビジネスマン」になれる!

※注 ネタです

※追記 Rubyワンライナーについてまとめた
Rubyワンライナー入門