2010-02-26 41 views
0

我正在製作一個爬行器,解析Gantz漫畫上的圖像,並在http://manga.bleachexile.com/gantz-chapter-1.html處開啓。Ruby open-uri,打開png網址時返回錯誤

我取得過成功,直到我的履帶試圖打開一個圖像(上CHAPT 273):

壞URI(是不是URI):http://static.bleachexile.com/manga/gantz/273/Gantz[0273]_p001[Whatever-Illuminati].png

但這網址有效我想,因爲我可以從Firefox打開..任何想法?

部分代碼:

img_link = nav.page.image_urls.find {|x| x.include?("manga/gantz")} 
img_name = RAILS_ROOT+"/public/#{nome}/#{cap}/"+nome+((template).sub('::cap::', cap.to_s).sub('::pag::', i.to_s)) 
img = File.new(img_name, 'w') 
img.write(open(img_link) {|f| f.read}) 
img.close 

回答

1

這不是一個有效的URI。只有特定的字符纔可以用於uri。順便說一句,像所有瀏覽器一樣,firefox儘可能爲用戶做的事情,而不是抱怨,當它看起來不符合標準。

它是以下形式有效:

open("http://static.bleachexile.com/manga/gantz/273/Gantz%5B0273%5D_p001%5BWhatever-Illuminati%5D.png") # => #<File:/tmp/open-uri20100226-3342-clj08a-0> 

你可以嘗試逃脫這樣的:

uri.gsub(/\/.*/) do |t| 
    t.gsub(/[^.\/a-zA-Z0-9\-_ ]/) do |c| 
    "%#{ c[0]<16 ? "0" : "" }#{ c[0].to_s(16).upcase }" 
    end.gsub(" ", "+") 
end 

但要小心,如果網站使用了正確的轉義的URI和你逃脫他們第二次。 uri不會再指向同一個位置。

+0

這個答案剛剛完美! – 2010-02-26 15:30:26

相關問題