# Соединяемся с новостным сервером и получаем номера сообщений
# из конференции comp.lang.ruby.
#
nntp = NNTPIО.new(Params::NEWS_SERVER)
raise "Failed to connect" unless nntp.connect
count, first, last = nntp.set_group(Params::NEWSGROUP)
##
# Если номер последнего сообщения не был запомнен раньше,
# сделаем это сейчас.
if not last_news
last_news = last
end
##
# Перейти к последнему прочитанному ранее сообщению
# и попытаться получить следующие за ним. Это может привести
# к исключению, если сообщения с указанным номером
# не существует, но мы не обращаем на это внимания.
begin
nntp.set_stat(last_news)
rescue
end
##
# Читаем все имеющиеся сообщения и отправляем каждое
# в список рассылки.
new_last = last_news
begin
loop do
nntp.set_next
head = ""
body = ""
new_last, = nntp.get_head do |line|
head << line
end
# He
посылать сообщения, которые программа mail2news
# уже отправляла в конференцию ранее (иначе зациклимся).
next if head =~ %r{^X-rubymirror:}
nntp.get_body do |line|
body << line
end
send_mail(head, body)
end
rescue
end
##
#И записать в файл новую отметку.
File.open(Params::LAST_NEWS_FILE, "w") do |f|
f.puts new_last
end unless new_last == last_news
18.2.8. Получение Web-страницы с известным URL
Пусть нам нужно получить HTML-документ из Web. Возможно, вы хотите проверить контрольную сумму и узнать, не изменился ли документ, чтобы послать автоматическое уведомление. А быть может, вы пишете собственный браузер — тогда это первый шаг на пути длиной в тысячу километров.
require "net/http"
begin
h = Net::HTTP.new("www.marsdrive.com", 80) # MarsDrive Consortium
Сначала мы создаем объект класса HTTP, указывая доменное имя и номер порта сервера (обычно используется порт 80). Затем выполняется операция
get
, которая возвращает ответ по протоколу HTTP и вместе с ним строку данных. В примере выше мы не проверяем ответ, но если возникла ошибка, то перехватываем ее и выходим.
Если мы благополучно миновали предложение
rescue
, то можем ожидать, что содержимое страницы находится в строке
data
. Мы можем обработать ее как сочтем нужным.
Что может пойти не так, какие ошибки мы перехватываем? Несколько. Может не существовать или быть недоступным сервер с указанным именем; указанный адрес может быть перенаправлен на другую страницу (эту ситуацию мы не обрабатываем); может быть возвращена пресловутая ошибка 404 (указанный документ не найден). Обработку подобных ошибок мы оставляем вам.
Следующий раздел окажется в этом смысле полезным. В нем мы представим несколько более простой способ решения данной задачи.