Скрипт принимает входные данные со стандартного ввода, переходит на веб-сайт и возвращает результат - PullRequest
0 голосов
/ 23 июля 2011

Я разработчик Ruby on Rails, которого попросили написать скрипт на чистом Ruby.

Цель:

  1. Принять пользовательский ввод с использованием стандартного ввода
  2. Перейдите к URL
  3. Заполните форму, используя ввод stdin
  4. Отправьте форму и перейдите на страницу результатов поиска
  5. Возврат вывода в стандартный вывод на основе результатов

Я никогда не делал ничего подобного в чистом Ruby, так как большая часть моего опыта связана с Rails, и мне бы понравилось, если бы кто-то мог указать мне правильное направление.

Я знаком с xpath, и у меня есть желание использовать его каким-то образом

Ответы [ 3 ]

2 голосов
/ 23 июля 2011

Механизируй твой друг. Это облегчает навигацию по сайтам, заполнение форм и отправку их, и является стандартом для Ruby.

Из путеводителя:

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://google.com/')

# point to the form
google_form = page.form('f')

# fill in a field
google_form.q = 'ruby mechanize'

# submit the form
page = agent.submit(google_form, google_form.buttons.first)

# page will now contain the returned search results

Для получения дополнительной информации см. Руководство и примеры .

Механизация построена на основе Nokogiri , который является преобладающим синтаксическим анализатором XML / HTML для Ruby, поэтому, если вам нужно искать DOM документа способом, не поддерживаемым Mechanize напрямую, вы можете легко сделать Это. Nokogiri поддерживает средства доступа CSS в дополнение к XPath, что упрощает использование ваших знаний в области HTML и CSS.

0 голосов
/ 23 июля 2011

Напишите скрипт для отправки формы с использованием HTTP-запросов. Используйте библиотеку http, например Фарадей

0 голосов
/ 23 июля 2011

Вы можете использовать gets для ввода стандартного ввода.Чтобы подключиться к серверу, вы можете сделать что-то вроде этого:

require 'net/http'
require 'uri'
url = URI.parse gets.chomp
http = Net::HTTP.start url.host
request_params = '?foo=bar'
request = Net::HTTP::Get.new url.path + request_params
response = http.request request
puts response.body

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...