2017-04-18 45 views
0

我想創建一個ruby腳本,它將從文本文件中獲取條形碼,在web服務中搜索該條形碼並下載結果。不能'file.open.read'在一個紅寶石if-block中的URL

首先我試圖測試web服務下載。在一個文件,當我硬編碼的查詢工作正常:

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

這一切工作正常。

當我嘗試從文本文件中取出條形碼並運行查詢時遇到問題。

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 
} 

這樣做的結果是:

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

我想不通,如果發生此問題,因爲我產生莫名其妙的字符串不是一個有效的URL和紅寶石試圖打開一個非存在的文件,或者是我在for循環中執行所有這些操作並且文件/ url不存在的問題。我曾嘗試使用open(website).write而不是open(website).read,但是這會產生相同的錯誤。

任何幫助將不勝感激。

回答

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