WWW::Mechanize

2007/09/15

Webサイトへのアクセスを自動化するのに、「ブラウザを操作するのと同じような感覚で」スクリプトを書くことができるという、WWW::Mechanizeを使ってみる。

RubyForge : RubyForge: WWW::Mechanize: Project Info
日本語リファレンス : Greenbear Laboratory - WWW::Mechanizeの日本語リファレンス

ページを開いて、ユーザーIDとパスワードを入力して、ログインボタンを押して、・・・なんてことを自動化するスクリプトを「ブラウザを操作するのと同じような感覚で」書けてしまうスグレモノみたいです。

インストール

gem install mechanizeで。WWW::MechanizeはHpricotに依存しているらしいので、入れてない場合はHpricotも入るのだと思われる。
# gem install mechanize
Bulk updating Gem source index for: http://gems.rubyforge.org
Install required dependency hoe? [Yn]  Y
Install required dependency rubyforge? [Yn]  Y
Successfully installed mechanize-0.6.10
Successfully installed hoe-1.3.0
Successfully installed rubyforge-0.4.4
Installing ri documentation for mechanize-0.6.10...
Installing ri documentation for hoe-1.3.0...
Installing ri documentation for rubyforge-0.4.4...
Installing RDoc documentation for mechanize-0.6.10...
Installing RDoc documentation for hoe-1.3.0...
Installing RDoc documentation for rubyforge-0.4.4...


はてなRSSリーダーに一括登録するスクリプトをつくってみる

WWW::Mechanizeを使用して、複数のフィードURLを記述したテキストファイルから、はてなRSSリーダーへ一括登録するスクリプトを作ってみました。
はてなRSSリーダーにフィードを追加する手順としては、

  1. はてなのログイン画面を開く

  2. ユーザー名とパスワードを入力し、「送信する」ボタンを押す

  3. はてなRSSリーダー画面を開く

  4. 右サイドバーのテキストボックスにフィードURLを入力し、「追加」ボタンを押す

  5. 確認画面で「追加する」ボタンを押す


となる。それをスクリプトに表現すればよい。
なお、事前に各画面のフォーム(テキストボックスのnameなど)は調べておきます。

スクリプト(add_hatena_rss.rb)
とりあえず、引数は順に「テキストファイルパス」、「はてなのユーザーID」、「パスワード」決めうちとしてます。
また、ところどころのsleepは、DOS攻撃っぽくならないようにするためになんとなく入れてます。
require 'mechanize'

url_file = ARGV[0]
my_user = ARGV[1]
my_pass = ARGV[2]

#テキストファイルからフィードURLを取得
urls = File.read(url_file).to_a

agent = WWW::Mechanize.new

#はてなのログイン画面を開き
hatena_login_page = agent.get('https://www.hatena.ne.jp/login')
#ログインフォームにユーザー名とパスワードを入れて
login_form = hatena_login_page.forms.first
login_form['name'] = my_user
login_form['password'] = my_pass
#「送信する」を押す
agent.submit(login_form)
sleep(3)

#フィードURL数分繰り返す
urls.each {|url|
  #RSSリーダーのページを開き
  hatena_rss_page = agent.get('http://r.hatena.ne.jp/' + my_user)
  #フィードURLを入れて「追加」ボタンを押す
  add_form = hatena_rss_page.form('addform')
  add_form['url'] = url.chomp
  sleep(3)
  confirm_page = agent.submit(add_form)
  #確認画面で「追加する」を押す
  sleep(3)
  confirm_form = confirm_page.forms.first
  agent.submit(confirm_form, confirm_form.buttons.name('save'))
  sleep(5)
}


用意するテキストファイル(rss.txt)
上からGIGAZINE、スラッシュドット ジャパン、CNET Japanの3つを一括登録するために以下のような1行1フィードURLなテキストファイルを用意します。
http://www.pheedo.jp/f/gigazine_2
http://www.pheedo.jp/f/slashdot_japan
http://feeds.japan.cnet.com/cnet/rss


実行
ruby add_hatena_rss.rb rss.txt <ユーザーID> <パスワード>

処理終了後、はてなRSSリーダーを開くと、ちゃんと3つ登録されてます。
hatena_rss

アイデア次第でいろんなことができそう!
エクスポート機能のないブログのバックアップとか、ググればいろんなアイデアがあるようです。

Ruby and Rails | コメント(0) | トラックバック(0)
トラックバック
トラックバックURL:
コメントをどうぞ
名前 (入力しなければ「通りすがり」):

メールアドレス (入力しても公開されません):

URL (入力すればリンクが張られます):


コメント:

(コメントにタグなどを使ってもタグがそのままが表示されます)