MozReplとGrowlとはてブAPIで遊ぶ略してHatebuMozGrowl
懲りずにMozReplの遊び方は無いか考えてた.ついでに最近Growlで遊んでないなーとかも考えてた.んじゃMozReplでなんかごにょごにょしてGrowlにNotifyさせるってのはどうだろう,って思った.
さて,なにをNotifyさせようか.
散々考えた*1結果,はてブAPIで表示してるページの被はてブ数を取ってきて,それをNotifyしてやろうと.これはちょっとウザいぞと.
require
このスクリプトを走らせるためには,gemのruby-growlが必要になります.あと,当たり前だけどGrowlも.Growlなんてねーよ!っていうWindowsな人は,冴子先生やカイル君に教えてもらうのも良いかもね.逆に,Growlは無機質な感じがするので冴子先生が羨ましい.
スパゲッティ
ただただ,徒然と書いた.反省はしていない.
require 'net/telnet' require 'xmlrpc/client' require 'rubygems' require 'ruby-growl' # MozReplに接続 prompt = /^repl>/ begin repl = Net::Telnet.new('Host' => 'localhost', 'Port' => 4242, 'Prompt' => prompt) rescue puts 'replが起動していません' exit end repl.waitfor(prompt) # Growlを作成 g = Growl.new('localhost', 'MozGrowl', ['Hatebu']) # はてブAPIに接続(してるのか?仕組みがわからない) hatebu = XMLRPC::Client.new2('http://b.hatena.ne.jp/xmlrpc') urls = Array.new begin loop do url = repl.cmd('content.location.href').split(prompt).shift.strip # 一度見たサイトのURLは見ない unless urls.include?(url) urls << url count = hatebu.call('bookmark.getCount', url)[url] title = "" if count >= 100 title = "すごく注目エントリー" elsif count >= 50 title = "かなり注目エントリー" elsif count >= 10 title = "注目エントリー" end unless title.empty? message = "このページは#{count}件ブックマークされています" g.notify('Hatebu', title, message) end # unless end # unlless sleep(3) end # loop rescue puts 'たぶんFirefoxの窓が閉じられたので終了します' exit end # begin
終了方法は?
Ctrl+c.躊躇したら負けかなと思っている.
sleep
「何秒間かrubyスクリプトを停止させる関数の名前ってなんだったっけなー?」ってなって,思い出すのにすごい時間がかかりました.たぶん,このスクリプトのアルゴリズムを考えるよりも.このsleepを思い出せないまま,とりあえず走らせてアクティビティモニタを見たら,rubyだけでCPU使用率30%超えてたYO!(sleepを思い出したあと走らせたら0.10%になった)
*1:だいたい2分.大したもんだ