Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # encoding: utf-8
- # (с) goodprogrammer.ru и Александр Кузьмин
- # Программа "Прогноз погоды" Версия 1.0
- # Данные берем из XML метеосервиса
- # http://www.meteoservice.ru/content/export.html
- require 'net/http'
- require 'uri'
- require 'rexml/document'
- # XXX/ Этот код необходим только при использовании русских букв на Windows
- if (Gem.win_platform?)
- Encoding.default_external = Encoding.find(Encoding.locale_charmap)
- Encoding.default_internal = __ENCODING__
- [STDIN, STDOUT].each do |io|
- io.set_encoding(Encoding.default_external, Encoding.default_internal)
- end
- end
- # /XXX
- # словарик состояний параметра cloudiness, описанный на сайте метеосервиса
- CLOUDINESS = {0 => 'Ясно', 1 => 'Малооблачно', 2 => 'Облачно', 3 => 'Пасмурно'}
- # сформировали адрес запроса
- uri = URI.parse("http://xml.meteoservice.ru/export/gismeteo/point/37.xml") # 37 - Moscow
- # отправили запрос и получили ответ
- response = Net::HTTP.get_response(uri)
- # из тела ответа сформировали XML документ с помощью REXML парсера
- doc = REXML::Document.new(response.body)
- # получаем имя города из XML
- city_name = URI.unescape(doc.root.elements['REPORT/TOWN'].attributes['sname'])
- # достаем первый XML тэг из списка <FORECAST... внутри <TOWN>
- current_weather_node = doc.root.elements['REPORT/TOWN'].elements.to_a[0]
- # записываем мин. и макс. температуру из вложенного тэга TEMPERATURE
- min_temp = current_weather_node.elements['TEMPERATURE'].attributes['min']
- max_temp = current_weather_node.elements['TEMPERATURE'].attributes['max']
- # записываем макс. ветер из вложенного тэга WIND
- max_wind = current_weather_node.elements['WIND'].attributes['max']
- # достали из PHENOMENA атрибут cloudiness и по его значению — состояние облаков из словарика
- clouds_index = current_weather_node.elements['PHENOMENA'].attributes['cloudiness'].to_i
- clouds = CLOUDINESS[clouds_index]
- puts city_name
- puts "Температура — от #{min_temp} до #{max_temp} С"
- puts "Ветер #{max_wind} м/с"
- puts clouds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement