ふたば☆ちゃんねる 画像自動ダウンロードスクリプト

世のえろぎーくを見習ってなんかえろいものを作ろうとした結果 - zenpouの日記で書いてましたが
ふたばちゃんねるの画像収集のスクリプト作ってました。


作ってたけど全然使ってないので、思いつきで公開。

require 'net/http'
require 'uri'
$KCODE='shift'

class Dir
  def self.exist? dir
    File.directory?(dir)
  end
end

class Futaba
  HERF_PATTERN =/<a\n* href=\"(red\/\d+.htm)\" target=_blank/
  DIR= "img"
  URL_LIST_FILE = "list.txt"

  def initialize
    @get = 0
    fp = open(URL_LIST_FILE)
    @dir = DIR
    fp.each do | url |
      url.chomp!
      url.gsub!(/#.*/,"")
      url.strip!
      next if url.to_s.empty?
      if url =~ /:$/
        @dir = File.join( DIR , url.gsub(/:/,""))
        Dir.mkdir(@dir) unless Dir.exist?(@dir)
      else
        p "get_strting...: #{url}"
        p "nohit...: #{url}" if get_img(url)  == 0
        p "get...: #{@get}"
      end
    end
    fp.close
  end

  def get_img(url)
    count = 0
    @get = 0
    url_parent = url.gsub(/[^\.\/]+\.html*$/,"")
    body = Net::HTTP.get_response(URI.parse(url)).body
    body.scan(HERF_PATTERN) do | link |
      url = url_parent + link[0]
      local_response = Net::HTTP.get_response(URI.parse(url))
      img_url =  local_response.body.scan(/(src\/[a-zA-Z0-9]*\.jpg)/).to_s

      unless img_url.empty?
        img_url = url_parent + img_url
        file_name = img_url.scan(/([a-zA-Z0-9]+\.jpg)/).to_s
        file_path =File.join(@dir, file_name)
        unless File.exist?(file_path)
          img_fp = open(file_path,"w")
          local_response = Net::HTTP.get_response(URI.parse(img_url))
          img_fp.print local_response.body
          img_fp.close
          p "GET: #{file_name}"
          @get += 1
        end
      end
      count += 1
    end
    count
  end
end

Futaba.new

listファイルを作成する必要があるので
list.txtと言うファイルに

kabegami:
http://dat.2chan.net/l/futaba.htm
http://dat.2chan.net/l/1.htm
http://dat.2chan.net/l/2.htm
http://dat.2chan.net/l/3.htm
niji:
http://tmp.2chan.net/img2/futaba.htm
http://tmp.2chan.net/img2/1.htm
http://tmp.2chan.net/img2/2.htm
http://tmp.2chan.net/img2/3.htm

と言う記述をしてください。
kabegami:とかの行は保存するディレクトリの名前になります。
後は、imgと言うディレクトリ配下にlist.txtで指定したディレクトリ名ごとに
分かれてファイルが書き出されます。


1日適当にまわすと何千枚とかになるので数日ですぐにスクリプトとめちゃいました。