Twitterで特定アカウントあてのメッセージだけを表示してみるスクリプトをrubyで作ってみた

estis2010/05/19 (水) 00:15 に投稿

参考にしたのは、
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

Comment

の環境で作成。

最初に
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
が実行できた。

Comment

の結果、返ってくるのは、
こんな感じ。

<#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>

Comment
でも同じように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

Comment

# 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...

こんなのでした。

Comment

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
となる。

Comment

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でも受信サーバーにより違う。