2017-04-18 9 views
0

텍스트 파일에서 바코드를 가져 와서 해당 바코드에 대한 웹 서비스를 검색하고 결과를 다운로드하는 루비 스크립트를 만들고 싶습니다.ruby ​​if-block 안에 url을 'file.open.read'할 수 없습니다.

먼저 웹 서비스 다운로드를 테스트 해 보았습니다. 파일에서 쿼리를 하드 코딩하면 작업이 정상적으로 작동합니다.

result_download = open('http://webservice.org/api/?query=barcode:78686112327', 'User-Agent' => 'UserAgent [email protected]').read 

모두 정상적으로 작동합니다.

텍스트 파일에서 바코드를 가져 와서 쿼리를 실행하면 문제가 발생합니다. 이 문제가 발생하면 어떻게 든 생성하는 문자열이 유효한 URL이 아니기 때문에

/home/user/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:37:in `initialize': No such file or directory @ rb_sysopen - http://webservice.org/api/?query=barcode:78686112327', 'User-Agent' => 'UserAgent [email protected]' (Errno::ENOENT) 

내가 알아낼 수 없습니다 루비는 비를 열려고 :

IO.foreach(filename) {|barcode| barcode 

website = "'http://webservice.org/api/?query=barcode:"+barcode.to_str.chomp + "', 'User-Agent' => 'UserAgent [email protected]'" 

website = website.to_s 



mb_metadata = open(website).read 
} 

이것의 결과는 존재하지 않는 파일이거나 for 루프에서이 모든 작업을 수행하고 있으며/url 파일이 존재하지 않는 문제입니다. open (website) .read 대신 open (website) .write를 사용해 보았지만 같은 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

답변

2

명시 적으로 오류 메시지가 나타나며 해당 파일이 없음을 의미합니다. http://webservice.org/api/?query=barcode:78686112327', 'User-Agent' => 'UserAgent [email protected]'.

1 개의 큰 문자열 (website)을 사용하여 모든 매개 변수를 open 방법으로 전달하려고 시도했습니다. 잘못된 것입니다. 그런 식으로해야합니다.

IO.foreach(filename) do |barcode| 
    website = "http://webservice.org/api/?query=barcode:#{barcode.to_str.chomp}" 
    mb_metadata = open(website, 'User-Agent' => 'UserAgent [email protected]').read 
end 
+0

정말 멋지 네요. 도와 주셔서 정말 감사합니다. 나는 경험이별로 없으며 각 요소를 올바르게 수정하는 데 중점을 둡니다. 네가 가진 우아한 옷차림으로 생각하지도 않았어. 다시 한번 감사드립니다. – Jack