1

我正在尝试解析 3 个参数(这有效)并请求一个包含一堆 txt 和 URL 的文件。我正在尝试将每个 URL 放入一个数组中,我尝试了一些没有运气的正则表达式,也尝试了scan(URI.regexp)et.c 并且看不到我做错了什么。

#!/usr/bin/env ruby
require 'uri'
require 'open-uri'

HOST=ARGV[0]
ID=ARGV[1]
VERSION=ARGV[2]
MYLINKS = Array.new

file = open("http://#{HOST}/v1/dc/manifest/#{ID}/#{VERSION}").read

file.each_line do |line|
    #puts "doing #{line}" # this works..
    MYLINKS << URI.extract(line, ['http', 'https'])
end

PS:该文件是一个JSON文件。这一切都在一个 Bash 脚本上工作,但我正在将它迁移到 Ruby。在 Bash 脚本中,我将文件下载到/tmp然后用awk/tr等解析它。

4

2 回答 2

0

MYLINKS您应该首先用变量替换常量,例如my_links. 这将允许您向my_links数组中添加元素。Ruby 将假定任何以大写字母开头的名称(例如MYLINKS, MyLinks)都是常量。

#!/usr/bin/env ruby
require 'uri'
require 'open-uri'

HOST=ARGV[0]
ID=ARGV[1]
VERSION=ARGV[2]
my_links = []

file.each_line do |line|
    my_links << URI.extract(line, ['http', 'https'])
end
于 2012-03-20T04:27:12.437 回答
0

使用HTTParty 之类的 API 客户端,您实际上不必了解 JSON,因为响应被解析为您可以提取的数据结构。你可以从一个简单的类开始:

require 'httparty'

class MyApi
  include HTTParty
  format :json
end

然后您可以执行以下操作:

response = MyApi.get("http://#{HOST}/v1/dc/manifest/#{ID}/#{VERSION}")

并且响应将被解析为一个哈希结构,您将能够以一种健壮的方式从中提取您的 URL。

如果您的 API 需要身份验证或发布数据,则很容易添加。gem 本身有几个示例,因此您可以看到各种事情是如何完成的。

于 2012-03-21T00:15:31.070 回答