我正在学习编程,所以我已经提出了一些随机项目。我决定制作一个脚本来下载我过去几年收集的所有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()
由于
答案 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
语句来检查变量的内容。