image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ: MS-IMEとかATOKとかSKKとか, 波って凍るんだ… , etc... | トップページ | ピックアップ:WindowsとLinuxをシームレスに使う, 文書管理を超えたWeb文書共有・文書公開システム, etc... »

2008-02-23

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)
}

Imagyse37

« ピックアップ: MS-IMEとかATOKとかSKKとか, 波って凍るんだ… , etc... | トップページ | ピックアップ:WindowsとLinuxをシームレスに使う, 文書管理を超えたWeb文書共有・文書公開システム, etc... »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/40232934

この記事へのトラックバック一覧です: ruby mechanize の使い方の練習:

« ピックアップ: MS-IMEとかATOKとかSKKとか, 波って凍るんだ… , etc... | トップページ | ピックアップ:WindowsとLinuxをシームレスに使う, 文書管理を超えたWeb文書共有・文書公開システム, etc... »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク