【问题标题】:Can't 'file.open.read' a url within a ruby if-block不能在 ruby​​ if-block 中“file.open.read”一个 url
【发布时间】:2017-04-18 07:02:15
【问题描述】:

我想创建一个 ruby​​ 脚本,该脚本将从文本文件中获取条形码,在网络服务中搜索该条形码并下载结果。

首先我尝试测试网络服务下载。在我对查询进行硬编码时,在文件中工作正常:

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

一切正常。

当我尝试从文本文件中获取条形码并运行查询时,我遇到了问题。

IO.foreach(filename) {|barcode| barcode

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

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@gmail.com' (Errno::ENOENT)

我无法确定是否会出现此问题,因为我生成的字符串不是有效的 url,而 ruby​​ 正在尝试打开一个不存在的文件,或者是我在 for 中执行所有这些操作的问题循环并且文件/ url在那里不存在。我尝试使用 open(website).write 而不是 open(website).read 但这会产生相同的错误。

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby if-statement open-uri


    【解决方案1】:

    您收到的错误消息明确指出,没有这样的文件: http://webservice.org/api/?query=barcode:78686112327', 'User-Agent' => 'UserAgent email@gmail.com'

    您尝试使用 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@gmail.com').read
    end
    

    【讨论】:

    • 太棒了。非常感谢你的帮助。我不是很有经验,专注于让每个元素都正确。我什至没有想过要以你所拥有的优雅方式来做这件事。再次感谢。
    猜你喜欢
    • 2017-11-19
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多