GIF下载脚本中的错误处理

时间:2013-03-21 23:16:02

标签: ruby json error-handling

我正在学习编程,所以我已经提出了一些随机项目。我决定制作一个脚本来下载我过去几年收集的所有GIF。一切似乎都在工作,除了我收到的错误,我的错误处理没有捕获(无效访问模式“wb”,“ArgumentError URI:HTTP资源是只读的。)我已经摆弄了一天以上无法得到这项工作任何帮助或提示将不胜感激。

require 'json', 'open-uri'    
def download

file = open("C:/sites/bookmark/gifs.json")
json = file.read

parsed = JSON.parse(json)

gifs = parsed["children"]
file.close()
total = 0
gifsize = 0
    gifs.each do |key|

        source = "#{key["uri"]}"
        source.chomp
        gifname = "#{key["title"]}"
        gifname.gsub(/[^0-9a-z ]/i, '')
        open("#{gifname}.gif", "wb") do |file|

            begin
              open(source)                  
            rescue Exception => e
                case e.message
                    when /404/ then puts '404!' 
                    when /505/ then puts '505!'
                    when /408/ then puts '408!'
                    else puts 'idk #{e.message}'
                end
                file.close()
                File.delete("#{gifname}.gif")
                puts "Deleted #{key["title"]}.gig"
                next
            end

            open(source) do |uri|

                file.write(uri.read)
                total += 1
                gifsize += (uri.size / 1024)
                print "#{(uri.size)/1024} KiloBytes"
            end
            print " --- #{total}"
        end
        puts " next gif---"
    end
    puts "\n#{gifsize} Total KB Downloaded \n#{total} Total Gifs "

end

download()

由于

1 个答案:

答案 0 :(得分:1)

gifname.gsub(/[^0-9a-z ]/i, '')实际上没有做任何事情,因为方法String#gsub不会修改String,而是返回一个修改过的String。 您需要使用String#gsub!代替: gifname.gsub!(/[^0-9a-z ]/i, '')

因此,gifname可能是一个HTTP URL,open-uri无法在写入模式下打开它,因为错误消息说明了。

为了调试这类问题,你应该运行ruby调试器,或者放一堆puts语句来检查变量的内容。