Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 17

Вытащить погоду из JSON

17.01.2019, 10:27. Показов 5005. Ответов 0

Студворк — интернет-сервис помощи студентам
Всем привет) Обращаюсь к вам за помощью, сам уже 2-е сутки работаю над решением без результатов.

Суть такая: делаю программу для получения погоды с сайта openweathermap.org. Первая часть, она же самая простая, реализована - получение данных их JSON файла
api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=21f2aefa331b0d 3f72e50b14a06ff983

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
   "coord": {
      "lon": -0.13,
      "lat": 51.51
   },
   "weather": [
      {
         "id": 802,
         "main": "Clouds",
         "description": "scattered clouds",
         "icon": "03n"
      }
   ],
   "base": "stations",
   "main": {
      "temp": 276.14,
      "pressure": 1005,
      "humidity": 80,
      "temp_min": 275.15,
      "temp_max": 278.15
   },
   "visibility": 10000,
   "wind": {
      "speed": 5.1,
      "deg": 300
   },
   "clouds": {
      "all": 40
   },
   "dt": 1547706000,
   "sys": {
      "type": 1,
      "id": 1414,
      "message": 0.0023,
      "country": "GB",
      "sunrise": 1547711862,
      "sunset": 1547742238
   },
   "id": 2643743,
   "name": "London",
   "cod": 200
}
На сайте http://www.jsonschema2pojo.org из JSON создал классы с get/set для получения данных с файла и используя этот метод всё реализовал.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Weather {
    
    public static final String URL_SOURCE = "http://api.openweathermap.org/data/2.5/weather?q=";
    public static final String API_KEY = "&APPID=3ad54740fd37f3f14a3a32a09f09cd**";
    public static final String UNITS = "&units=metric";
    public static final String LANG = "&lang=ru";
 
    public static String getWeather(String message) throws IOException{
        
        URL url = new URL(URL_SOURCE + message + LANG + UNITS + API_KEY);
 
        InputStreamReader reader = new InputStreamReader(url.openStream());
 
        OneDayWeather obj = null;
        Gson gson = new Gson();
 
        obj = gson.fromJson(reader, OneDayWeather.class);
 
 
        return "В городе: " + obj.getName() + "(" + obj.getSys().getCountry()+ ")" + "сегодня "+ System.lineSeparator() +
                "Температура: " + obj.getMain().getTemp() + "°C, " + System.lineSeparator()+
                "Влажность: " + obj.getMain().getHumidity() + "%, " + System.lineSeparator()+
                "Осадки: " + obj.getWeather().get(0).getDescription() + System.lineSeparator()+
                "Скорость ветра: " + obj.getWind().getSpeed() + " м/с" + System.lineSeparator()+
                "http://openweathermap.org/img/w/" + obj.getWeather().get(0).getIcon() + ".png";
    }
}
Отдельной погоды на завтра сайт не предоставляет. Единственная возможность - вытащить прогноз из прогноза на 5 дней (он ещё и с изменениями каждые 3 часа)
http://api.openweathermap.org/... 14a06ff983

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
{
   "cod": "200",
   "message": 0.0022,
   "cnt": 37,
   "list": [
      {
         "dt": 1547715600,
         "main": {
            "temp": 274.58,
            "temp_min": 274.086,
            "temp_max": 274.58,
            "pressure": 1014.52,
            "sea_level": 1022.3,
            "grnd_level": 1014.52,
            "humidity": 100,
            "temp_kf": 0.49
         },
         "weather": [
            {
               "id": 800,
               "main": "Clear",
               "description": "clear sky",
               "icon": "01d"
            }
         ],
         "clouds": {
            "all": 0
         },
         "wind": {
            "speed": 5.2,
            "deg": 327.003
         },
         "rain": {},
         "sys": {
            "pod": "d"
         },
         "dt_txt": "2019-01-17 09:00:00"
      },
      {
         "dt": 1547726400,
         "main": {
            "temp": 275.76,
            "temp_min": 275.39,
            "temp_max": 275.76,
            "pressure": 1017.51,
            "sea_level": 1025.33,
            "grnd_level": 1017.51,
            "humidity": 97,
            "temp_kf": 0.37
         },
         "weather": [
            {
               "id": 800,
               "main": "Clear",
               "description": "clear sky",
               "icon": "01d"
            }
         ],
         "clouds": {
            "all": 0
         },
         "wind": {
            "speed": 6.11,
            "deg": 318.509
         },
         "rain": {},
         "sys": {
            "pod": "d"
         },
         "dt_txt": "2019-01-17 12:00:00"
      },
      {
         "dt": 1547737200,
         "main": {
            "temp": 276.19,
            "temp_min": 275.945,
            "temp_max": 276.19,
            "pressure": 1019.57,
            "sea_level": 1027.38,
            "grnd_level": 1019.57,
            "humidity": 94,
            "temp_kf": 0.24
         },
         "weather": [
            {
               "id": 800,
               "main": "Clear",
               "description": "clear sky",
               "icon": "01d"
            }
         ],
         "clouds": {
            "all": 0
         },
         "wind": {
            "speed": 5.03,
            "deg": 328.505
         },
         "rain": {},
         "sys": {
            "pod": "d"
         },
         "dt_txt": "2019-01-17 15:00:00"
      },      
      {
         "dt": 1548104400,
         "main": {
            "temp": 266.684,
            "temp_min": 266.684,
            "temp_max": 266.684,
            "pressure": 1034.26,
            "sea_level": 1042.48,
            "grnd_level": 1034.26,
            "humidity": 79,
            "temp_kf": 0
         },
         "weather": [
            {
               "id": 800,
               "main": "Clear",
               "description": "clear sky",
               "icon": "01n"
            }
         ],
         "clouds": {
            "all": 0
         },
         "wind": {
            "speed": 1.16,
            "deg": 195.001
         },
         "rain": {},
         "sys": {
            "pod": "n"
         },
         "dt_txt": "2019-01-21 21:00:00"
      }
   ],
   "city": {
      "id": 2643743,
      "name": "London",
      "coord": {
         "lat": 51.5085,
         "lon": -0.1258
      },
      "country": "GB",
      "population": 1000000
   }
}
Для прогноза на завтра я подготовил метод, который переводит в систему unix "завтрашняя дата" + "13:00"

Java
1
2
3
4
5
// tomorrow 13:00 to unix
        LocalDateTime tomorrowWithTime = LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.of(13, 0));
        System.out.println(tomorrowWithTime);
        ZoneId myZone = ZoneId.of("UTC+3");
        long epochSec = tomorrowWithTime.atZone(myZone).toEpochSecond();
Идея в том, чтобы в JSON искать дату, наиболее близкую к той, что я получил из метода. Затем вытаскивать данные о погоде из этой даты (температура, влажность, облачность, скорость ветра)

Классы для получения данных получились такие:
Основной класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.mytelegabot;
 
 
public class WeatherFiveDays {
 
 
private java.util.List<com.mytelegabot.List> list = null;
private City city;
 
 
public java.util.List<com.mytelegabot.List> getList() {
return list;
}
 
public void setList(java.util.List<com.mytelegabot.List> list) {
this.list = list;
}
 
public City getCity() {
return city;
}
 
public void setCity(City city) {
this.city = city;
}
 
}
Класс List - он же массив, в котором все данные основные
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.mytelegabot;
 
public class List {
 
private long dt;
private Main main;
private java.util.List<Weather> weather = null;
private Clouds clouds;
private Wind wind;
private Rain rain;
private String dtTxt;
 
public long getDt() {
return dt;
}
 
public void setDt(long dt) {
this.dt = dt;
}
 
public Main getMain() {
return main;
}
 
public void setMain(Main main) {
this.main = main;
}
 
public java.util.List<Weather> getWeather() {
return weather;
}
 
public void setWeather(java.util.List<Weather> weather) {
this.weather = weather;
}
 
public Clouds getClouds() {
return clouds;
}
 
public void setClouds(Clouds clouds) {
this.clouds = clouds;
}
 
public Wind getWind() {
return wind;
}
 
public void setWind(Wind wind) {
this.wind = wind;
}
 
public Rain getRain() {
return rain;
}
 
public void setRain(Rain rain) {
this.rain = rain;
}
 
public String getDtTxt() {
return dtTxt;
}
 
public void setDtTxt(String dtTxt) {
this.dtTxt = dtTxt;
}
 
}
Класс Города
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.mytelegabot;
 
 
public class City {
 
private String name;
private String country;
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public String getCountry() {
return country;
}
 
public void setCountry(String country) {
this.country = country;
}
 
 
}
класс Main - для вытаскивания температуры и влажности (потом переименую)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.mytelegabot;
 
 
public class Main {
 
private double temp;
private long humidity;
 
public double getTemp() {
return temp;
}
 
public void setTemp(double temp) {
this.temp = temp;
}
 
public long getHumidity() {
return humidity;
}
 
public void setHumidity(long humidity) {
this.humidity = humidity;
}
}
Вот дальше знаний не хватает как найти нужную "dt" и вытащить из неё данные о погоде. Это последняя работа по яве и самая сложная для меня. Если кто найдёт время написать код, буду очень благодарен.

Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2019, 10:27
Ответы с готовыми решениями:

"Вытащить" погоду с сайта
Делаю приложение для отображения погоды. Как я понимаю, логика такова: - загрузить веб-страницу со значениями температуры; -...

Вытащить значение из JSON
как вытащить значение description из json ответа файла: сервер вызывает мой срипт и передает значение: { &quot;type&quot;:...

Как вытащить информацию из JSON
Здравствуйте, имеется такой скрипт: &lt;script type=&quot;text/javascript&quot;&gt; // IMDb ID to Search var imdbLink = &quot;tt1285016&quot;; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2019, 10:27
Помогаю со студенческими работами здесь

Вытащить конкретные данные с json'a
есть декодированный текст: stdClass Object ( =&gt; OK =&gt; stdClass Object ( =&gt; nado_poluchit ...

Как вытащить данные из JSON?
Нужно из этого {&quot;response&quot;:} Вытащить значения first_name и last_name в одноименные переменные. Есл можно подробно ну начиная с...

Распарсить json и вытащить токен и id
есть строка {&quot;access_token&quot;:&quot;строка токена&quot;,&quot;expires_in&quot;:0,&quot;user_id&quot;:11111111} не могу понять как правильно вытащить токен и id и...

Как вытащить элементы JSON?
Делаю запрос ajax на сервер: $('#send_ls_id').blur(function() { id = $(this).val(); $.ajax({ type: &quot;POST&quot;, ...

Вытащить c localstorage json jquery
Помогите прочитать по ключу localstorage jsone c помощью jquery ? Имеется код: function ref_cart() { var output = &quot;&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru