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

2010年1月31日

カテゴリー: Ruby, web service, 美人時計 — admin @ 2:05 AM

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

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

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

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

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

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

2010年1月4日

カテゴリー: 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日

カテゴリー: 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. #
  8. require 'net/http'
  9. require 'uri'
  10.  
  11. #------------------------------------------------------------
  12. #  Global var
  13. #
  14. $scriptPath = '/home/ooiwa/tmp_ruby/bijin_tokei/'
  15.  
  16. #------------------------------------------------------------
  17. #  今日の日付をyyyymmdd型の文字列に変換する関数
  18. #
  19. def getTimeNow()
  20.     day = Time.now
  21.     putMonth = day.month.to_s
  22.     putDay = day.day.to_s
  23.  
  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.  
  33.     nowTime = day.year.to_s + putMonth + putDay
  34.     return nowTime
  35. end
  36.  
  37. #------------------------------------------------------------
  38. #  ディレクトリの生成
  39. #
  40. def mkdir(path)
  41.     if Dir::mkdir( path, 0777 )
  42.         return true
  43.     else
  44.         return false
  45.     end
  46. end
  47.  
  48. #------------------------------------------------------------
  49. #  美人時計から画像を取得
  50. #
  51. #  スクリプト参考元: Yamashiro0217さん
  52. #  http://d.hatena.ne.jp/Yamashiro0217/20090930/1254305886
  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(
  64.                 "/jp/img/clk/#{now_hour}#{now_minute}.jpg",
  65.                 {"Referer" => "http://bijint.com/jp/" }
  66.              )
  67.              open( $scriptPath + getTimeNow() + '/' + "#{now_hour}#{now_minute}.jpg", "wb" ) do |file|
  68.                  file.puts response.body
  69.              end
  70.           end
  71.           rescue
  72.              p "#{now_hour}#{now_minute}.jpg can not get"
  73.              error_files += "http://bijint.com/jp/img/clk/#{now_hour}#{now_minute}.jpg\n"
  74.           end
  75.        end
  76.     end
  77. end
  78.  
  79. #------------------------------------------------------------
  80. #  初期実行関数
  81. #
  82. def init()
  83.     if mkdir( $scriptPath + getTimeNow() )
  84.         getBijin()
  85.     end
  86. end
  87.  
  88. 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で比較するツールでもつくって差分を分けるスクリプトを足すかでもすればどの女の子が削除されて追加されたかがわかりますね。

美人時計、面白いです。