2011-01-26 4 views
0
Net::HTTP.start("static.flickr.com") { |http| 
    resp = http.get("/92/218926700_ecedc5fef7_o.jpg") 
    open("fun.jpg", "wb") { |file| 
    file.write(resp.body) 
    } 
} 

Theres 일부 샘플 이미지 다운로드 코드. 이제는 그것을 열지 않고 이미 선택한 디렉토리에 저장하고 싶습니다. 또한 배열의 각 URL을 통해 실행하고 싶습니다. 예를 들어 (. 내가 이미지 리퍼를 만들고 있어요) 배열이 포함 Heres는 무엇으로 4chan을 사용하여 소스 코드를 추출 후 :이미지 다운로드 코드에서 어레이의 각 부분을 통해 루비 프로그램을 실행하십시오.

http://static.4chan.org/image/title/1065156729813.jpg 
http://static.4chan.org/support/jlist_leader/728x90_gothic.jpg 
http:flag.jpg 
http://static.4chan.org/support/jlist_top/jlist_adult_01.jpg 
http://images.4chan.org/v/src/1296062231626.png 

(등)
그래서를 heres 내가 할 제안 무엇 : URI를 배열을 통해 어떻게 든 구문 분석합니다. 파싱 된 각 URL의 각 부분을 순차적으로 각 스폿에 입력하십시오. 이미지를 다운로드하거나 파싱 할 수없는 경우 (예 : flag.jpg와 일치하는 경우) 문자를 건너 뜁니다. 모두 저장합니다 사전 정의 된 디렉토리에 열지 않아도됩니다. 도움을 주시면 대단히 감사하겠습니다.

+0

당신이하고 싶은 것을 알고있는 것처럼 들리므로 구체적으로 코딩하는 데 문제가 있습니까? – maerics

+0

배열에서 파싱 된 각 객체를 통해 다운로더를 실행하게합니다. – user451711

+0

또한 다운로드 한 개체를 디렉터리에 저장하는 방법. – user451711

답변

1

각 URL을 호스트별로 구성한 다음 각 호스트 및 이미지를 반복하면서 시작하면서 다운로드 할 것입니다. 이런 식으로 뭔가가 :

물론
require 'uri' 

# Organize URLs by host. 
by_host = {} 
urls.each do |x| # Assume 'urls' is an Array of String URLs. 
    begin 
    uri = URI.parse(x) 
    by_host[uri.host] = [] unless by_host[uri.host] 
    by_host[uri.host] << uri 
    rescue URI::InvalidURIError 
    STDERR.puts "Invalid URL: #{x}" 
    end 
end 

# Now download each image from each host. 
by_host.each do |host, uris| 
    Net::HTTP.start(host) do |http| 
    uris.each do |uri| 
     resp = http.get(uri.path) 
     File.open(uri.path, "wb") {|file| file.write(resp.body)} 
     end 
    end 
    end 
end 

, 당신은 체크 이상의 오류가 필요합니다 그리고 당신은 아마 대신 호스트 이름의 호스트/포트로 구성 할 수 있습니다,하지만 위의 예는 일반적으로 아이디어를 설명한다 특히 Ruby에서 URI 클래스의 사용.

디렉토리에 저장하는 경우 출력 파일을 열기 전에 각 uri.path의 전체 경로가 있는지 확인하거나 생성하십시오.

+0

마지막 줄을 수정해야하는 최종 디렉토리에 저장합니다. File.open ("C : \\", "wb") {{file | file.write (resp.body)} C : \에 저장하겠습니까? – user451711

+0

신경 쓰지 마, 나는 스스로 알아낼 것이다. 도움 사람을 보내 주셔서 감사합니다. – user451711

관련 문제