Hatena::Grouprubyist

yuisekiのいまさらruby厨日記

 | 

2008-10-29

ActiveRecordを単体で使う

| 01:40 | はてなブックマーク - ActiveRecordを単体で使う - yuisekiのいまさらruby厨日記

これもよくある話。twitterの発言をとってきて保存するのを想定

  • 先にDBをつくる必要がある
  • DB名とかクラス名はARの規約に従っている必要がある

ファイルに保存する程度じゃ済まない量で、SQLを直で書くほど複雑な処理で無いときは楽でいいんかな。



書き込み用:

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'active_record'
ActiveRecord::Base.establish_connection(
  :adapter=>"mysql",
  :host=>"localhost",
  :user=>"test",
  :password=>"hogehuga",
  :database=>"twitter"
)
class Status < ActiveRecord::Base; end
    #dbへ書き込み
    statuses = Status.create([
        { :username => username,
          :content => content,
          :time => time,
          :url => stat },
      ])

表示用:

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'active_record'
ActiveRecord::Base.establish_connection(
  :adapter=>"mysql",
  :host=>"localhost",
  :user=>"test",
  :password=>"hogehuga",
  :database=>"twitter"
)
class Status < ActiveRecord::Base; end

statuses = Status.find(:all, :limit=>10, :order=>"time DESC")
statuses.each{|s|
      puts "   "+ s.id.to_s + "\/ "+ s.username + ": "+ s.content.chomp + "  ("+ s.time.to_s + ")  \n"
}

rubyのWWW::mechanizeでtwitterにログイン

| 01:32 | はてなブックマーク - rubyのWWW::mechanizeでtwitterにログイン - yuisekiのいまさらruby厨日記

最初、mechanizeのバージョンではまった。どうも、新しすぎるとうまく動かなかったりする。

あとTwitterがたまに特定のアカウントだけログインできなくなる期間のようなものがあるみたいで、500と503の場合は1分まって再試行とかしないとだめっぽい。

#!/usr/bin/ruby -Ku

require 'rubygems'
#バージョンを指定してからrequire
gem 'mechanize', '= 0.7.8'
require 'mechanize'

#ログイン処理
begin
  agent = WWW::Mechanize.new
  agent.user_agent_alias = 'Windows IE 7'
  agent.redirect_ok='false'
  agent.redirection_limit=3

  puts "Start twitter login..."
  page = agent.get('http://twitter.com/login')
  page.body = page.body.toutf8
  form = page.forms[0]
  form['session[username_or_email]'] = 'dankogai'
  form['session[password]'] = 'kogaidan'
  puts "Submit..."
  page = agent.submit(form, form.buttons.first)
rescue WWW::Mechanize::ResponseCodeError => ex
  case ex
  when '500' || '503'
    sleep 60.to_i
    page = agent.submit(form, form.buttons.first)
  else
    warn ex.message
  end
end
puts "Done."

るーる

| 12:45 | はてなブックマーク - るーる - yuisekiのいまさらruby厨日記

  • なるべくruby本体のバージョンとかライブラリのバージョンをタグとして使う

おいOperaだとフォルダアイコンからカテゴリ挿入する便利そうなJavascriptうごかないやんけ…

トラックバック - http://rubyist.g.hatena.ne.jp/yuiseki/20081029
 |