参考にしたのは、
http://ruby.g.hatena.ne.jp/garyo/20100512/p2
http://twitter.rubyforge.org/
ほとんど参考情報のまま。
#!/usr/local/bin/ruby require 'twitter' httpauth = Twitter::HTTPAuth.new('USERNAME', 'PASSWORD') client = Twitter::Base.new(httpauth) Twitter::Search.new.to('SEARCH_ACCOUNT').each do |r| puts puts r.created_at puts r.from_user puts r.text end
なお、rubyのバージョンは
ruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]
Comments
Twitter::Search
の結果、返ってくるのは、
こんな感じ。
<#Hashie::Mash
created_at="Wed, 12 May 2010 00:48:36 +0000"
from_user="account"
from_user_id=123456789
geo=nil
id=12345678901
iso_language_code="ja"
metadata=<#Hashie::Mash result_type="recent">
profile_image_url="http://*$#.com/images/default_profile.png"
source="<a href="http://twitter.com/">web</a>"
text="@SEARCH_ACCOUNT かなのめがねかめのなか"
to_user="SEARCH_ACCOUNT"
to_user_id=987654321>
Vine Linux 4.2
でも同じようにgemをインストールしたが、 # gem --version:344:in `method_missing': undefined method `manage_gems' for Gem:Module (NoMethodError) from /usr/bin/gem:10:in ` ' とエラーが出る。 http://www.videc.at/2009/04/30/rubygems-undefined-method-manage_gems-for-gemmodule-nomethoderror/ を参考に、 /usr/bin/gemを編集。 #Gem.manage_gems とコメントアウトした。 それでも # gem --version /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:186:in `strip!': can't modify frozen string (RuntimeError) from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:186:in `initialize' from /usr/bin/gem:15:in `new' from /usr/bin/gem:15:in ` ' とエラーが出るので、 /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/version.rb を編集。 @version.strip! を @version.strip に。 しかしそれでも、 # gem --version :338:in `const_missing': uninitialized constant Gem::GemRunner (NameError) from /usr/bin/gem:25:in ` ' と出るので、 /usr/bin/gemを編集。 require 'rubygems/gem_runner' を追加。 # cat /usr/bin/gem #! /usr/bin/ruby #-- # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. # All rights reserved. # See LICENSE.txt for permissions. #++ require 'rubygems' require 'rubygems/gem_runner' #Gem.manage_gems required_version = Gem::Version::Requirement.new(">= 1.8.0") unless required_version.satisfied_by?(Gem::Version.new(RUBY_VERSION)) puts "Expected Ruby Version #{required_version}, was #{RUBY_VERSION}" exit(1) end # We need to preserve the original ARGV to use for passing gem options # to source gems. If there is a -- in the line, strip all options after # it...its for the source building process. args = !ARGV.include?("--") ? ARGV.clone : ARGV[0...ARGV.index("--")] Gem::GemRunner.new.run(args) これでようやく、 # gem --version 1.3.7
gem install twitter した時の出力
# gem install twitter
When you HTTParty, you must party hard!
Building native extensions. This could take a while...
Successfully installed oauth-0.4.0
Successfully installed hashie-0.2.0
Successfully installed crack-0.1.6
Successfully installed httparty-0.5.2
Successfully installed yajl-ruby-0.7.6
Successfully installed twitter-0.9.5
6 gems installed
Installing ri documentation for oauth-0.4.0...
Installing ri documentation for hashie-0.2.0...
Installing ri documentation for crack-0.1.6...
Installing ri documentation for httparty-0.5.2...
Installing ri documentation for yajl-ruby-0.7.6...
Installing ri documentation for twitter-0.9.5...
Updating class cache with 1381 classes...
Installing RDoc documentation for oauth-0.4.0...
Installing RDoc documentation for hashie-0.2.0...
Installing RDoc documentation for crack-0.1.6...
Installing RDoc documentation for httparty-0.5.2...
Installing RDoc documentation for yajl-ruby-0.7.6...
Installing RDoc documentation for twitter-0.9.5...
こんなのでした。
r.created_at を日本標準時に
puts r.created_at
を
puts Time.parse (r.created_at)
にする。
Tue, 18 May 2010 11:58:25 +0000
が
2010-05-18 20:58:25 +0900
に変わる。
puts (Time.parse r.created_at).strftime "%Y/%m/%d(%a) %X"
だと、
2010/05/18(Tue) 20:58:25
となる。
新しいメッセージを受け取ったらメールで通知
CRONで1時間に1回稼働するということにして、1時間以内のメッセージだったら通知ということにした。
CRONを信じられない場合は、$INTERVAL_TIMEをもう少し長めに取った方がよいでしょう。
最後の確認は、人間の眼でするということで。
# cat chk_twitter.rb
#!/usr/local/bin/ruby # -*- coding: utf-8 -*- require 'twitter' require 'net/smtp' require 'date' $INTERVAL_TIME = 1 * 60 * 60 #second unit $SENDER_MAIL = "送信元メールアドレス" $SMTP_SERVER = "smtp.xxx.net" $DOMEIN = "xxx.net" $USER = "smtpアカウント" $PASSWORD = "smtpパスワード" to = ["a@xxx.net", "b@xxx.com"] $BASE_TIME = Time.parse DateTime.now.to_s httpauth = Twitter::HTTPAuth.new('Twitterアカウント', 'Twitterパスワード') client = Twitter::Base.new(httpauth) Twitter::Search.new.to('kagoyajp').each do |r| if ($BASE_TIME - (Time.parse r.created_at)) to, "subject" => "Twitterで新しいメッセージを受信しました" end
送信先メールアドレスを指定する時、
to = ["a@xxx.net", "b@xxx.com"]
で送信できるけれど、メーラーで見た時も宛先がこのままになる。
メールの文字コードはcharset=UTF-8にした。
件名が文字化けする場合としない場合がある。
MacのMailでも受信サーバーにより違う。
warning
/usr/local/lib/ruby/1.9.1/net/protocol.rb:291: warning: regexp match /.../n against to UTF-8 string
というwarningがたくさん出ます。
意図したとおりのメールは送信されるのですが。
CentOS5.4
の環境で作成。
最初に
gem install twitter
をしたかったが、
rubygems が無かったので、rubygems のインストールからスタート。
CentOSには、残念ながらrubygemsのパッケージがないので、
http://rubyforge.org/frs/?group_id=126&release_id=43601
からソースダウンロード。
インストールしようとしたら、rubyのバージョンが1.8.5ではダメ、1.8.6以上にしろと言われた。
もうついでなので、CentOSパッケージ版ruby関連は削除した。
yum remove ruby ruby-devel ruby-libs
ソースからruby 1.9.1p378 をインストールし、更にrubygems をインストール。
ようやく
gem install twitter
が実行できた。