ruby mechanize の使い方の練習
社内の web ページを ruby mechanize で操作するための練習として、
mixi の "コミュニティ最新書き込み" を取得する ruby スクリプトを書いてみた。
(yield の使い方の練習もかねているが、こちらのほうは少し怪しい...)
実行結果例と、ソースコードを示す。(jruby でも動作する)
$ ruby getdialy.rb | nkf -w
2008年02月23日 17:28 三字熟語しりとり No.5(817) (言葉が好きだ。) view_bbs.pl?id=27488903&comment_count=817&comm_id=965
2008年02月23日 17:27 好きな映画を好きなだけ挙げて3本以上かぶったらマイミク!(885) (映画愛好会) view_bbs.pl?id=26387907&comment_count=885&comm_id=36
2008年02月23日 17:26 漢字しりとり No.28(771) (言葉が好きだ。) view_bbs.pl?id=27525724&comment_count=771&comm_id=965
... 省略 ...
$cat getdialy.rb
#
# See http://sora2hs.blog70.fc2.com/blog-entry-246.html
# mixi に login して、"コミュニティ最新書き込み" 一覧を得てから、logout する。
# username, password は config.yaml に書いておく。
#
# cat config.yaml
# user: name@gmail.com
# pass: pass
#
require 'rubygems'
require 'mechanize'
require 'yaml'
require 'rss'
require 'kconv'
require 'pp'
$KCODE = 'euc'
class Robot
MIXI_URL = 'http://mixi.jp/'
attr_reader :agent # WWW::Mechanize
# ログイン
def login(config)
# ユーザ名、パスワードを config.yaml に設定する
config = YAML.load_file(config)
username = config["user"]
password = config["pass"]
@agent = WWW::Mechanize.new
page = @agent.get(MIXI_URL)
form = page.forms[0]
form.fields.find {|f| f.name == 'email'}.value = username
form.fields.find {|f| f.name == 'password'}.value = password
form.fields.find {|f| f.name == 'next_url'}.value = '/home.pl'
page = @agent.submit(form, form.buttons.first)
# p "-------- login --------"
end
# ログアウト
def logout
@agent.get('/logout.pl')
# p "-------- logout --------"
end
# アクセス処理
def Robot.open(config)
robot = Robot.new
robot.login(config)
begin
yield(robot)
ensure
robot.logout
end
end
end
def getData(robot)
# diarylist = agent.get('/new_friend_diary.pl') # マイミクシィ最新日記
diarylist = robot.agent.get('/new_bbs.pl') # コミュニティ最新書き込み
doc = diarylist.root
doc.search("/html/body/div[2]/div/div[2]/ul/li/dl").each {|entry|
time = entry.at(:dt).inner_text.sub('?', ' ')
dd = entry.at(:dd)
title = dd.inner_text.strip
url = dd.at(:a)["href"]
print "#{time} #{title} #{url}¥n"
}
end
robot = Robot.new
Robot.open('config.yaml') { |robot|
getData(robot)
}
« ピックアップ: MS-IMEとかATOKとかSKKとか, 波って凍るんだ… , etc... | トップページ | ピックアップ:WindowsとLinuxをシームレスに使う, 文書管理を超えたWeb文書共有・文書公開システム, etc... »
この記事へのコメントは終了しました。
« ピックアップ: MS-IMEとかATOKとかSKKとか, 波って凍るんだ… , etc... | トップページ | ピックアップ:WindowsとLinuxをシームレスに使う, 文書管理を超えたWeb文書共有・文書公開システム, etc... »
コメント