2010-02-26 3 views
0

Gantz 만화에서 이미지를 파싱하는 크롤러를 http://manga.bleachexile.com/gantz-chapter-1.html 이상으로 만들고 있습니다.Ruby open-uri, png URL을 열 때 오류가 발생합니다

나쁜 URI (URI하지?) : 내 크롤러 (chapt 273)는 이미지를 열려고 할 때까지

나는 성공을 거두었 http://static.bleachexile.com/manga/gantz/273/Gantz[0273]_p001[Whatever-Illuminati].png

을하지만 내가 할 수 있기 때문에이 URL은, 내가 생각 유효 파이어 폭스에서 열 .. 어떤 생각?

부분 코드 :

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에는 특정 문자 만 허용됩니다. 그런데 파이어 폭스는 모든 브라우저와 마찬가지로 사용자가 표준을 준수하지 않을 때 불평하는 대신 가능한 한 많이하려고합니다.

그것은 다음과 같은 형식에서 유효합니다 :

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의의 탈출 사용하는 경우,주의 하시고 당신이 그들을 탈출 :

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

당신은 이런 식으로 탈출을 시도 할 수 있습니다 두 번째. uri는 더 이상 같은 위치를 가리키지 않습니다.

+0

그 답변은 완벽했습니다. –

관련 문제