読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

イケメンをorega.tvから召還するスクリプト書いた

Ruby

美人時計というサイトbijin-tokei(美人時計) 公式ウェブサイト - Japanese -がありますが、それのイケメン版といえるサイトがあるという情報を昨晩Twitterで知りました。
そのサイトは、こちら


1分に1人のイケメンが登場するので1日で1440人のイケメンを見ることが出来ます。
しかし、1日PCの前にいてイケメン時計をずっと見ているなんて出来ないので、全員を召還するスクリプトを書きました。
ExerbでWindowsのEXEファイルを生成するように書いたので少し余計な記述もありますが、使用の際はお好きに改造してください。
また、現在はリファラーなどでのアクセス制限を行っていないようですが、もしアクセス制限が追加されたら直します。
用法・用量を守ってお使いください。

# -*- coding:sjis -*-

require "fileutils"
require "open-uri"
require "thread"
require "net/http"

$KCODE = "SJIS"

MAX = 24*60
THREADS = 3
SPAN = (MAX/THREADS)-1
IKEMEN_PATH = "./ikemen_pictures/"


def get_ikemen_pictures
    threads = []
    start = 1
    1.upto(THREADS) do
        end_num = start + SPAN
        threads << Thread.new(start, end_num) do |s,e|
            s.upto(e) do |i|
                i = "0"*(4-i.to_s.length) + i.to_s
                open("http://orega.tv/images/m" + i + ".jpg") do |ikemen|
                    open(IKEMEN_PATH + i + ".jpg" ,"wb") do |io|
                        io.write(ikemen.read)
                    end
                end
            end
        end
        start = end_num+1
        sleep(0.5)
    end
    threads.each{|t| t.join}
end

[:INT, :TERM].each do |sig|
   Signal.trap(sig) do
      Thread::list.each do |t|
         Thread::kill(t) if t != Thread::current
      end
   end
end

FileUtils.mkdir_p(IKEMEN_PATH) unless FileTest.exist?(IKEMEN_PATH)
puts "開始!ゆっくりまってね!"
get_ikemen_pictures
puts "おわた!"

変な箇所などは適時修正して使ってください。


一応、ExerbRubyを導入してない環境でも動くようにしたのですが、なぜかNorton Internet Security2010で不審なソフトとして検出されてしまいます・・・。
他のセキュリティソフトでは問題ないのですが・・・。
こちらからDL出来ます: http://mame-lab.com/files/ikemen/ikemen.zip

少しはまった箇所メモ

  • ExerbでEXE化する時は、わざわざFileutilsをrequireしておかないと実行時にエラーがでる
  • Thread中でopen-uriを使用すると未初期化エラーが出るので、「require "net/http"」が必要
  • ExerbはAcriveScriptRubyで無いとExeファイル実行時にエラーが出る