2017-04-18 8 views
0

テキストファイルからバーコードを取得し、そのバーコードのWebサービスを検索して結果をダウンロードするRubyスクリプトを作成します。ruby​​ if-block内のURLを 'file.open.read'できません

まず、私は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).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

関連する問題