2017-04-18 8 views
0

Je veux créer un script ruby ​​qui va prendre des codes à barres à partir d'un fichier texte, rechercher un service web pour ce code à barres et télécharger le résultat.Impossible de 'file.open.read' une URL dans un if-block ruby ​​

J'ai d'abord essayé de tester le téléchargement du service web. Dans un fichier lorsque je hardcode la requête fonctionne bien:

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

Tout fonctionne très bien.

Lorsque j'essaie de prendre le code-barres d'un fichier texte et d'exécuter la requête, je rencontre des problèmes.

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 
} 

Le résultat de ceci est:

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

Je ne peux pas savoir si ce problème se produit parce que la chaîne que je produis est en quelque sorte pas une URL valide et Ruby tente d'ouvrir un non -existent fichier, ou est le problème que je fais tout cela dans une boucle for et le fichier/url n'existe pas là. J'ai essayé d'employer .write ouvert (site Web) au lieu de .read ouvert (site Web) mais cela produit la même erreur.

Toute aide serait grandement appréciée.

Répondre

2

Le message d'erreur que vous obtenez indique explicitement qu'il n'existe aucun fichier de ce type: http://webservice.org/api/?query=barcode:78686112327', 'User-Agent' => 'UserAgent [email protected]'.

Vous essayez de passer tous les paramètres à la méthode open en utilisant 1 grande chaîne (website), ce qui est faux. Tu devrais le faire comme ça.

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

c'est génial. Je vous remercie beaucoup pour votre aide. Je ne suis pas très expérimenté et concentré sur l'obtention de chaque élément correct. Je n'ai même pas pensé à le faire de la manière élégante que tu as. Merci encore. – Jack