0

私はプログラミングを学んでいる最中なので、いくつかのランダムなプロジェクトを思いついています。過去数年間に収集したすべての GIF をダウンロードするスクリプトを作成することにしました。エラー処理がキャッチされない途中で受け取ったエラーを除いて、すべてが機能しているようです(無効なアクセスモード「wb」、「ArgumentError URI:HTTPリソースは読み取り専用です。1日以上いじっています。この作業を行うことができません。ヘルプやヒントをいただければ幸いです。

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()

ありがとう

4

1 に答える 1

1

メソッドは文字列を変更せず、変更されたものを返すため、この行gifname.gsub(/[^0-9a-z ]/i, '')は実際には何もしません。代わり String#gsubに使用する必要があります:String#gsub!gifname.gsub!(/[^0-9a-z ]/i, '')

そのため、gifnameはおそらく HTTP URL でありopen-uri、エラー メッセージに示されているように、書き込みモードで開くことができません。

この種の問題をデバッグするには、Ruby デバッガーを実行するputsか、変数の内容を確認するための一連のステートメントを配置する必要があります。

于 2013-03-21T23:25:46.833 に答える