Rubyでメールを送る(日本語非対応)

2010年3月14日

Filed under: Ruby — admin @ 4:45 AM

Rubyでメール送る関数欲しかったので、急遽リファレンス見ながらつくってみた。ちなみに急過ぎたので日本語非対応です・・・。

RUBY:
  1. #------------------------------------------------------------
  2. #  メール投稿
  3. #  ※ただし、日本語非対応です。
  4. #
  5. def mail( subject, message, to_address, from_address )
  6.     #------------------------------------------------------------
  7.     # インポート
  8.     require 'net/smtp'
  9.    
  10.     #------------------------------------------------------------
  11.     # セット
  12.     mail_server = 'mail.localhost'
  13.    
  14.     #------------------------------------------------------------
  15.     # 投稿
  16.     Net::SMTP.start( mail_server, 25 ) {|smtp|
  17.         smtp.ready( from_address, to_address ) {|f|
  18.             f.puts 'From: ' + from_address
  19.             f.puts 'To: ' + to_address
  20.             f.puts 'Subject: ' + subject
  21.             f.puts
  22.             f.puts message
  23.         }
  24.     }
  25.     p 'mail send!!'
  26.    
  27.     #------------------------------------------------------------
  28. end

次回、日本語対応版をつくろうと思うお。

Rubyでtwitterに投稿できるrubygems

Filed under: Ruby,twitter,美人時計 — admin @ 3:02 AM

美人時計の画像を毎日収集してる僕です、こんばんみ!

▽関連記事
美人時計の全画像を取得するスクリプトをバッチ化してみた

毎日美人時計とGAL時計と美人時計(北海道版)の画像をウチのサーバちゃんが収集して差分まで比較して結果だけ教えてくれています。
収集Bot、かわいいよ、収集Bot。

そんな美人時計の差分が出たってのをtwitter経由で知らせてくれたらいいのに…と思いながら実装してみました。
がしかし…、twitterには140文字という投稿制限があるんですね、見事140文字オーバーしたら投稿できませんでしたよ。

とりあえず、Rubyでtwitterに投稿できるrubygemsのインストールの仕方です。

CODE:
  1. rdocのインストール
  2. # yum install rdoc
  3.  
  4. rubygemsのダウンロード
  5. #wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
  6.  
  7. rubygemsを解凍してインストール
  8. # tar xvfz rubygems-1.3.5.tgz
  9. # cd rubygems-1.3.5
  10. # ruby setup.rb
  11.  
  12. gemでtwitterをインストール
  13. % sudo gem install twitter
  14. Successfully installed twitter-0.8.4
  15. 1 gem installed
  16. Installing ri documentation for twitter-0.8.4...
  17. Installing RDoc documentation for twitter-0.8.4...

こんな感じでサーバーにインストール。そしてRubyの書き方は下記の通り。

RUBY:
  1. #------------------------------------------------------------
  2. # ./twit.rb
  3. def twit( v )
  4.     #------------------------------------------------------------
  5.     # twitter gems をインポート
  6.     require 'rubygems'
  7.     require 'twitter'
  8.  
  9.     #------------------------------------------------------------
  10.     # Rubyから投稿
  11.     twit_username = 'アカウント名'
  12.     twit_password = 'ログインパスワード'
  13.    
  14.     auth = Twitter::HTTPAuth.new( twit_username, twit_password )
  15.     twit = Twitter::Base.new( auth )
  16.     twit.update( v )
  17.     p 'twit!!'
  18.    
  19.     #------------------------------------------------------------
  20. end
  21.  
  22. twit( 'てすつ投稿やねん' )

コマンドラインでプログラムを実行する。

CODE:
  1. host~% ruby ./twit.rb

これでRubyからtwitterに投稿できちゃう!Ruby、簡単だよ、Ruby。

【美人時計】ニコニコ踊り娘 – ミンカ、Ire、いとくとら、まころん、馬琴

2010年1月31日

Filed under: Ruby,web service,美人時計 — admin @ 2:05 AM

ウチのサーバちゃんが相変わらず今もなお毎日美人時計の画像を収集している。今ではGAL時計も毎日収集していて、相変わらず差分のみちゃっかり保存しちゃってます。キモイね!

そんな美人時計の登場人物の差分をみていたんですけど、去年くらいまでは女の子が純粋に更新されいたっぽいんですが、最近はドラマや企業や企画モノなどとコラボして、画像が更新されている傾向にありますね。

そんなところでまずはニコニコ動画で有名(?)な踊り子とのコラボを紹介します。

上の列から、ミンカ、Ire、いとくとら、まころん、馬琴。

うん、みんな可愛いすぎるすな!

美人時計のGAL時計に若槻千夏が登場してた。

2010年1月4日

Filed under: Ruby,web service,美人時計 — admin @ 1:27 AM

あけおめです!今年もがしがし開発していくんでよろしくです。(なにを?)
前回書いた美人時計の画像取得スクリプトのCron化、GAL時計もはじめてみました。

▽GAL時計
http://www.bijint.com/

毎日0時にGAL時計の画像を収集し、2時に美人時計の画像を収集します。収集したからといって特に見ることなくツールつくっただけで満足しちゃってます。
ただ毎日画像を収集していると、1日あたり400MB近く画像がたまっていくので、差分だけをHDDに残すようにしようと思い、比較差分のツールもつくりました。
ただ単にマスターと今日落とした分のmd5を比較して、差分を別フォルダに保存するだけです。

RUBY:
  1. #------------------------------------------------------------
  2. #  ライブラリのインポート
  3. #
  4. require 'digest/md5'
  5. require './ooiwa_frame_work'
  6.  
  7. $scriptPath = './gal_tokei/'
  8. $targetDir = getTimeNow(0) + '_gal'
  9. $todayDir = $scriptPath + $targetDir
  10.  
  11. #------------------------------------------------------------
  12. #  前日と当日を比較するための関数
  13. #
  14. def hikaku( before, after )
  15.     #------------------------------------------------------------
  16.     #  前日の画像フォルダと、当日の画像フォルダから、
  17.     #  画像リストを配列に代入
  18.     #
  19.     beforeList = Dir::entries( before ).to_s.gsub('...'){''}.gsub( /g([0-9])/ ){ 'g ' + $1 }.split(' ').sort()
  20.  
  21.     diffList = []
  22.  
  23.     beforeList.each do |val|
  24.         rb = Digest::MD5.hexdigest( File.open( before + val, 'rb' ).read )
  25.         ra = Digest::MD5.hexdigest( File.open( after + val, 'rb' ).read )
  26.  
  27.         if rb === ra
  28.             # 処理なし
  29.         else
  30.             FileUtils.cp( after + val, $todayDir + '_diff/' + val )
  31.             diffList.push( val )
  32.         end
  33.     end
  34.     # 差分リストの書き出し
  35.     if put_list( diffList, $scriptPath + 'log/' + $targetDir + '_list.txt' )
  36.         print 'GAL時計の差分ファイルログを"' + $targetDir + '_list.txt"' + 'に書き出しました。'
  37.         print "\n"
  38.         return true;
  39.     end
  40. end

上記のスクリプトはサンプルです。実際には、上記スクリプトのhikakuメソッドを使用して、差分のみを当日フォルダに保存するといった処理をかましています。
ちなみに "ooiwa_frame_work" という謎の自作ライブラリをかましてるので、コピペだけじゃ動かないかも。(意味なし。)

オマケに若槻千夏の画像でも。

0:00
0000

18:00
1800

この美人時計とかGAL時計、けっこうコラボしてるんだよねー。美人時計に出てる娘とかも、ニコニコ動画で有名な踊ってる娘がいたりとか、けっこう収集してて面白いよね。

何か最近、こずえちゃんとミンカちゃんとかとユニットを組んだらしい「いといくら」こといくらちゃん。
可愛過ぎるわ。

いくらちゃんの美人時計
2004
2007

むっちゃくちゃ可愛いですお(^q^)オレの方が可愛いけどなっ!

美人時計の全画像を取得するスクリプトをバッチ化してみた

2009年11月20日

Filed under: Ruby,美人時計 — admin @ 11:18 AM

最近流行り(?)の美人時計。Web業界の人間ならだいたいの人は知っているんじゃないでしょうかね。1分置きに女の子が変わるというこのサービス。女の子が変わるまでずーっと24時間も待っていられないので、全画像を取得するスクリプトをつくってしまいたくなりました。

とりあえず誰かすでにつくってるんじゃないだろうかと思い、google先生にきいてみました。

案の定すぐみつかりましたよ!素敵スクリプトをつくっている方が!

▽こちら
Yamashiro0217の日記

Rubyで組まれているようです。僕はPHP派なので、Rubyまったくわかりませんが、この際Rubyに入門してしまおう!ってことで、Yamashiro0217さんのスクリプトを参考にスクリプトをつくってみようと思います。

まずはRubyスクリプトの動作確認
Yamashiro0217さんのスクリプトをコピペで動かしてみます。

▽開発環境
Fedora10のインストールされたLinuxサーバ。
Rubyはすでにインストール済み。

▽美人時計の全画像取得スクリプト
bijin.ruby

RUBY:
  1. require 'net/http'
  2. require 'uri'
  3.  
  4. error_files = ""
  5. 0..24.times do |hour|
  6.    0..60.times do |minute|
  7.       now_hour = sprintf("%0#{2}d", hour)
  8.       now_minute = sprintf("%0#{2}d", minute)
  9.       sleep 1
  10.       begin
  11.          Net::HTTP.start("bijint.com", 80) do |http|
  12.          response = http.get(
  13.             "/jp/img/clk/#{now_hour}#{now_minute}.jpg",
  14.             {"Referer" => "http://bijint.com/jp/" }
  15.          )
  16.          open( "#{now_hour}#{now_minute}.jpg", "wb" ) do |file|
  17.              file.puts response.body
  18.          end
  19.       end
  20.       rescue
  21.          p "#{now_hour}#{now_minute}.jpg can not get"
  22.          error_files += "http://bijint.com/jp/img/clk/#{now_hour}#{now_minute}.jpg\n"
  23.       end
  24.    end
  25. end

▽コマンドから実行

CODE:
  1. [ooiwa@eva bijin_tokei]$ ruby bijin.ruby

おぉー!画像がどんどん落ちてきたよー!これは感動!とりあえず動作確認はOKと。

ただこの美人時計、落とした画像ファイルと、本番サイトの美人時計側で女の子の表示が違うときがあります。どうやら日々ちょこちょこ女の子が更新されているようです。これはなんということ!全女の子コンプリートするには定期的にチェックするしかないじゃないか!ということで、この際毎日取得してしまうスクリプトを組んでみようと思います。

それではバッチをつくっていきます。
定期的に1日毎に決まった時間に全画像を取得して、なおかつ日付ごとにディレクトリを分けて保存する、バッチをまわすのはCron、スクリプト言語はRubyをつかってつくっていきます。

まず、Yamashiro0217さんのスクリプトをこのまま使うと、スクリプトと同じパスに画像をそのままダウンロードしてきますので、日付毎にディレクトリを切ってくれる関数を用意します。
今回はわかりやすいようにスクリプトを起動した日の日付を取得して"yyyymmdd"形式で文字列を返す関数と、ディレクトリを生成する関数を用意します。

▽今日の日付をyyyymmdd型の文字列に変換する関数

RUBY:
  1. def getTimeNow()
  2.     day = Time.now
  3.     putMonth = day.month.to_s
  4.     putDay = day.day.to_s
  5.  
  6.     if day.month <10 && day.day <10
  7.         putMonth = '0' + day.month.to_s
  8.         putDay = '0' + day.day.to_s
  9.     elsif day.month <10
  10.         putMonth = '0' + day.month.to_s
  11.     elsif day.day <10
  12.         putDay = '0' + day.day.to_s
  13.     end
  14.  
  15.     nowTime = day.year.to_s + putMonth + putDay
  16.     return nowTime
  17. end

▽ディレクトリの生成

RUBY:
  1. def mkdir(path)
  2.     if Dir::mkdir( path, 0777 )
  3.         return true
  4.     else
  5.         return false
  6.     end
  7. end

あとは、Yamashiro0217さんのスクリプトにディレクトリパスを突っ込んで、一通り完成させる。今回Cronでバッチ処理させるため、ディレクトリパスは絶対パスで書く。

▽スクリプトをまとめたのがこれ
bijin.ruby

RUBY:
  1. #――――――――――――――――――――――――――――――
  2. #  美人時計の画像を全取得するスクリプト
  3. #
  4. #------------------------------------------------------------
  5. #  ライブラリのインポート
  6. #
  7. require 'net/http'
  8. require 'uri'
  9.  
  10. #------------------------------------------------------------
  11. #  Global var
  12. #
  13. $scriptPath = 'bijin_tokei/'
  14.  
  15. p $scriptPath
  16.  
  17. #------------------------------------------------------------
  18. #  今日の日付をyyyymmdd型の文字列に変換する関数
  19. #
  20. def getTimeNow()
  21.     day = Time.now
  22.     putMonth = day.month.to_s
  23.     putDay = day.day.to_s
  24.     if day.month <10 && day.day <10
  25.         putMonth = '0' + day.month.to_s
  26.         putDay = '0' + day.day.to_s
  27.     elsif day.month <10
  28.         putMonth = '0' + day.month.to_s
  29.     elsif day.day <10
  30.         putDay = '0' + day.day.to_s
  31.     end
  32.     nowTime = day.year.to_s + putMonth + putDay
  33.     return nowTime
  34. end
  35.  
  36. p getTimeNow()
  37.  
  38.  
  39. #------------------------------------------------------------
  40. #  ディレクトリの生成
  41. #
  42. def mkdir(path)
  43.     if Dir::mkdir( path, 0777 )
  44.         return true
  45.     else
  46.         return false
  47.     end
  48. end
  49.  
  50.  
  51. #------------------------------------------------------------
  52. #  美人時計から画像を取得
  53. #
  54. def getBijin()
  55.     error_files = ""
  56.     0..24.times do |hour|
  57.        0..60.times do |minute|
  58.           now_hour = sprintf("%0#{2}d", hour)
  59.           now_minute = sprintf("%0#{2}d", minute)
  60.           sleep 1
  61.           begin
  62.              Net::HTTP.start("bijint.com", 80) do |http|
  63.              response = http.get("/jp/img/clk/#{now_hour}#{now_minute}.jpg",
  64.                                  {"Referer" => "http://bijint.com/jp/" })
  65.              open( $scriptPath + getTimeNow() + "/#{now_hour}#{now_minute}.jpg", "wb" ) do |file|
  66.                  file.puts response.body
  67.              end
  68.           end
  69.           rescue
  70.              p "#{now_hour}#{now_minute}.jpg can not get"
  71.              error_files += "http://bijint.com/jp/img/clk/#{now_hour}#{now_minute}.jpg\n"
  72.           end
  73.        end
  74.     end
  75. end
  76.  
  77.  
  78.  
  79. #------------------------------------------------------------
  80. #  初期実行関数
  81. #
  82. def init()
  83.     targetDir = $scriptPath + getTimeNow()
  84.     if File.exists?( targetDir )
  85.         getBijin()
  86.     else
  87.         if mkdir( targetDir )
  88.             p 'make!'
  89.             getBijin()
  90.         end
  91.     end
  92. end
  93. init()

Rubyは変数の定義がグローバルとローカルでスコープがわかりやすいから良いですね!なんかPHPより全然カンタンだし、オブジェクト指向言語だし、個人的にはだいぶ気に入りました。

完成したスクリプトを早速実行してみます。

CODE:
  1. [ooiwa@eva bijin_tokei]$ ruby /home/ooiwa/tmp_ruby/bijin_tokei/bijin.ruby
  2. [ooiwa@eva bijin_tokei]$ ls
  3. 20091120  bijin.ruby
  4. [ooiwa@eva bijin_tokei]$ ls 20091120/
  5. 0000.jpg 0001.jpg 0002.jpg

うまく動いていれば、本日の日付ディレクトリが生成され、そのディレクトリの中に画像をどんどんたまっていっているのがわかります。

最後はこの完成したスクリプトをCronでまわす処理をします。

CODE:
  1. [ooiwa@eva bijin_tokei]$ crontab -e
  2. #毎日10:00に bijin.ruby スクリプトを実行
  3. 0 10 * * * ruby /home/ooiwa/tmp_ruby/bijin_tokei/bijin.ruby

あとは毎日10時になるとCronがRubyスクリプトを実行してくれます。
これであとは目視で比較するか、md5で比較するツールでもつくって差分を分けるスクリプトを足すかでもすればどの女の子が削除されて追加されたかがわかりますね。

美人時計、面白いです。