ruby minoru_recue.rb

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby minoru_recue.rb相关的知识,希望对你有一定的参考价值。

# coding: utf-8
require 'rubygems'
require 'parallel'
require 'open-uri'
require 'timeout'

class Main

  TIME_OUT = 0.7
  SHIKII = 20
  STEP = 6
  # ダウンロードするURL

  def initialize()
    if(ARGV.length == 0) then
      puts "開始の数字を入れてください。"
      exit
    else
      @start = ARGV[0].to_i
    end

    @base = 'http://edge.hls.vods.hitbox.tv/static/videos/vods/minoru4160/5d46dadd8ad880ec7c94a9a303747dc545e4f196-54a3e823e4e0f/minoru4160/'
    @schedules = []
    @times = []
    STEP.times do |i|
      @schedules.push(@start - ((i+1)*10000))
    end

    loop{
      # ダウンロード可能な数字を列挙
      list_enable_videos()

      if @schedules.empty? then
        break
      else
        p @schedules
      end
    }

    @times.uniq.sort
    pal_download()
    puts "完了"
  end

  # ダウンロード関数
  def download(path, url)
    open(path, 'wb') do |output|
      open(url, 'rb') do |data|
        output.write(data.read)
      end
    end
  end

  # 使えるビデオ番号を列挙 範囲 start ~ end 見つかったときにすっ飛ばす範囲 interval
  def list_enable_videos()
    @schedules.each do |num|
      # しきい値
      area = num-SHIKII .. num+SHIKII

      Parallel.each(area, in_threads: 8) {|i|
        if add_enable_video(i) then
          puts "#{i}: true"
          @times.push(i)
          @schedules.delete(num)
          raise Parallel::Break
        end
      }
    end
  end

  # ダウンロード可能なURLの追加
  def add_enable_video(time)
    url = @base + time.to_s + '.ts'
    begin
      timeout(TIME_OUT){
        open(url)
        return true
      }
    rescue TimeoutError => e; return false
    rescue => e; return false
    end
  end

  # 並列ダウンロード スレッド数指定
  def pal_download
    Parallel.each(@times, in_threads: 4) {|time|
      url = @base + time.to_s + '.ts'
      file_name = File.basename(url)
      # 保存先を設定
      file_path = "./tmp/#{file_name}"
      puts "Dowload: #{file_path}"
      # ダウンロード関数呼び出し
      download(file_path, url)
    }
  end
end

Main.new()

以上是关于ruby minoru_recue.rb的主要内容,如果未能解决你的问题,请参考以下文章

ruby minoru_recue.rb

ruby [Ruby Cheat] Cheatsheet #ruby

Ruby运算符

Ruby 25 岁了!Ruby 之父说 Ruby 3 有望 3 倍提速

如何学习ruby?Ruby学习技巧分享

ruby Ruby脚本,看看是否用openssl编译了ruby