1

3 つの引数を解析して (これは機能します)、大量の txt と URL を含むファイルを要求しようとしています。各 URL を配列に入れようとしていますが、運が悪い正規表現とscan(URI.regexp)etc.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で解析します。awktr

4

2 に答える 2

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 に答える
0

MYLINKS定数を変数に置き換えることから始める必要がありますmy_linksmy_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 に答える