2012-03-20 5 views
1

3つの引数を解析しようとしていますが、これにはtxtとURLが含まれているファイルを要求しています。私は、それぞれのURLを配列に入れようとしています。私は運がなくてもscan(URI.regexp) et.cで正規表現で試してみましたが、何が間違っているのかわかりません。ファイルまたはこの場合はリモートURLからすべてのURLを解析しようとしています

#!/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でそれを解析するなど

+0

あなたはJSartを解析するHTTPartyのようなAPIクライアントを考えましたか? –

+0

私はしましたが、私はちょうどURLを取り除く必要があるので、私はそれを必要としないかもしれません。そして私はjsonの考えがありません..あなたはそれについてどうやって行きますか? – cfernandezlinux

答えて

0

。あなたは単純なクラスで起動することができます。

require 'httparty' 

class MyApi 
    include HTTParty 
    format :json 
end 

その後、次の操作を行うことができます

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

と応答があなたからあなたのURLを引くことができるようになりますハッシュ構造に解析されます堅牢な方法で。

APIに認証または投稿データが必要な場合は、追加が簡単です。宝石そのものにはseveral examplesがあるので、さまざまなことがどのように行われているかを見ることができます。

+0

ok私はこれを行い、1つの場所までirbで動作します.. – cfernandezlinux

+0

ok私のやっていることはファイル= MyApi.get (「http://#{HOST}/v1/dc/manifest /#{ID} /#{VERSION}」)を入力します。次に、item.each do | item | putsアイテム['manifest'] ['files'] [ 'url'] endしかし、irbに 'url'を追加するとうまくいかない['manifest'] ['files']の中にすべてのサブハッシュを入れることができ、どちらをexpecifyすればurlしか得ることができません。 ['1'] ['url'] < - これはirbで動作しますが、私はすべてのURLを取得する必要があるので、これは私が.eachを使用する理由ですそれは私にcantを文字列エラーまたは同様のものに変換することを与えます – cfernandezlinux

+0

ハッシュから値を抽出することは別のトピックです。簡単に別のStackOverflowの質問があります。実際にサンプルハッシュとジレンマを投稿すると、すぐに答えます。 –

0

あなたは、例えば、変数によって一定MYLINKSを交換することによって開始する必要がありますmy_links。これにより、配列をmy_links配列に追加することができます。 Rubyは、大文字で始まる名前(例:MYLINKSMyLinks)は定数であるとみなします。応答はあなたが抽出できるデータ構造に解析されるので、あなたが本当に、JSONを知っている必要はありませんHTTPartyなどのAPIクライアントで

#!/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 
+0

@luiismこんにちは、返事のおかげで感謝しますが、まだ各行からURLを取り除いていません:-( – cfernandezlinux

関連する問題