Advertisement
Guest User

Untitled

a guest
Jan 28th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. # encoding: utf-8
  2. # (с) goodprogrammer.ru и Александр Кузьмин
  3. # Программа "Прогноз погоды" Версия 1.0
  4. # Данные берем из XML метеосервиса
  5. # http://www.meteoservice.ru/content/export.html
  6.  
  7. require 'net/http'
  8. require 'uri'
  9. require 'rexml/document'
  10.  
  11. # XXX/ Этот код необходим только при использовании русских букв на Windows
  12. if (Gem.win_platform?)
  13. Encoding.default_external = Encoding.find(Encoding.locale_charmap)
  14. Encoding.default_internal = __ENCODING__
  15.  
  16. [STDIN, STDOUT].each do |io|
  17. io.set_encoding(Encoding.default_external, Encoding.default_internal)
  18. end
  19. end
  20. # /XXX
  21.  
  22. # словарик состояний параметра cloudiness, описанный на сайте метеосервиса
  23. CLOUDINESS = {0 => 'Ясно', 1 => 'Малооблачно', 2 => 'Облачно', 3 => 'Пасмурно'}
  24.  
  25. # сформировали адрес запроса
  26. uri = URI.parse("http://xml.meteoservice.ru/export/gismeteo/point/37.xml") # 37 - Moscow
  27.  
  28. # отправили запрос и получили ответ
  29. response = Net::HTTP.get_response(uri)
  30.  
  31. # из тела ответа сформировали XML документ с помощью REXML парсера
  32. doc = REXML::Document.new(response.body)
  33.  
  34. # получаем имя города из XML
  35. city_name = URI.unescape(doc.root.elements['REPORT/TOWN'].attributes['sname'])
  36.  
  37. # достаем первый XML тэг из списка <FORECAST... внутри <TOWN>
  38. current_weather_node = doc.root.elements['REPORT/TOWN'].elements.to_a[0]
  39.  
  40. # записываем мин. и макс. температуру из вложенного тэга TEMPERATURE
  41. min_temp = current_weather_node.elements['TEMPERATURE'].attributes['min']
  42. max_temp = current_weather_node.elements['TEMPERATURE'].attributes['max']
  43.  
  44. # записываем макс. ветер из вложенного тэга WIND
  45. max_wind = current_weather_node.elements['WIND'].attributes['max']
  46.  
  47. # достали из PHENOMENA атрибут cloudiness и по его значению — состояние облаков из словарика
  48. clouds_index = current_weather_node.elements['PHENOMENA'].attributes['cloudiness'].to_i
  49. clouds = CLOUDINESS[clouds_index]
  50.  
  51. puts city_name
  52. puts "Температура — от #{min_temp} до #{max_temp} С"
  53. puts "Ветер #{max_wind} м/с"
  54. puts clouds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement