Попытка разобрать все URL из файла или в этом случае удаленный URL - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь разобрать 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 и т. Д.

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

С клиентом API, таким как HTTParty , вам не обязательно знать JSON, потому что ответы разбираются в структуру данных, которую вы можете извлечь.Вы можете начать с простого класса:

require 'httparty'

class MyApi
  include HTTParty
  format :json
end

Затем вы можете сделать следующее:

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

, и ответ будет проанализирован в хеш-структуру, которую вы сможетенадежно извлекайте ваши URL-адреса.

Если ваш API требует аутентификации или публикации данных, его легко добавить.В самом геме несколько примеров , так что вы можете видеть, как выполняются различные вещи.

0 голосов
/ 20 марта 2012

Вы должны начать с замены константы 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
...