diff --git a/README.md b/README.md
index ac68887..2d0cdf9 100644
--- a/README.md
+++ b/README.md
@@ -103,7 +103,7 @@ public class App
Обратиться через браузер на адрес **https://api.ipify.org/?format=json** и получить json-ответ, содержащий IP4-адрес клиента. Извлечь адрес и вывести на экран в виде строки.
-# Задание №3
+## Задание №3
Через сайт **https://open-meteo.com** получить прогноз погоды на сутки. Использовать в качестве местоположения координаты Нижнего Новгорода (56, 44).
diff --git a/my-app/.mvn/jvm.config b/my-app/.mvn/jvm.config
new file mode 100644
index 0000000..e69de29
diff --git a/my-app/.mvn/maven.config b/my-app/.mvn/maven.config
new file mode 100644
index 0000000..e69de29
diff --git a/my-app/pom.xml b/my-app/pom.xml
new file mode 100644
index 0000000..f8f748f
--- /dev/null
+++ b/my-app/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+ com.mycompany.app
+ my-app
+ 1.0-SNAPSHOT
+
+ my-app
+
+ http://www.example.com
+
+
+ UTF-8
+ 17
+
+
+
+
+
+ org.junit
+ junit-bom
+ 5.11.0
+ pom
+ import
+
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.seleniumhq.selenium
+ selenium-java
+ 4.15.0
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.4.0
+
+
+
+ maven-resources-plugin
+ 3.3.1
+
+
+ maven-compiler-plugin
+ 3.13.0
+
+
+ maven-surefire-plugin
+ 3.3.0
+
+
+ maven-jar-plugin
+ 3.4.2
+
+
+ maven-install-plugin
+ 3.1.2
+
+
+ maven-deploy-plugin
+ 3.1.2
+
+
+
+ maven-site-plugin
+ 3.12.1
+
+
+ maven-project-info-reports-plugin
+ 3.6.1
+
+
+
+
+
diff --git a/my-app/src/main/java/com/mycompany/app/App.java b/my-app/src/main/java/com/mycompany/app/App.java
new file mode 100644
index 0000000..700710c
--- /dev/null
+++ b/my-app/src/main/java/com/mycompany/app/App.java
@@ -0,0 +1,29 @@
+package com.mycompany.app;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+
+public class App {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
+
+ System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
+ WebDriver webDriver = new ChromeDriver();
+
+ try {
+ System.out.print("11111111111");
+ webDriver.get("https://www.calculator.net/password-generator.html");
+ System.out.print("22222222222");
+ System.out.print("Это моя работа");
+ System.out.print("Она не списана. Делаю уже 3й раз");
+ } catch (Exception e) {
+ System.out.println("Error");
+ System.out.println(e.toString());
+ }
+
+ Task2.task2();
+ Task3.task3();
+
+ webDriver.quit();
+ }
+}
\ No newline at end of file
diff --git a/my-app/src/main/java/com/mycompany/app/Task2.java b/my-app/src/main/java/com/mycompany/app/Task2.java
new file mode 100644
index 0000000..e3a985e
--- /dev/null
+++ b/my-app/src/main/java/com/mycompany/app/Task2.java
@@ -0,0 +1,34 @@
+package com.mycompany.app;
+
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+
+public class Task2
+{
+ public static void task2()
+ {
+ // делаю так, как указано в README файле.
+ System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
+ WebDriver webDriver = new ChromeDriver();
+ try {
+ webDriver.get("https://api.ipify.org/?format=json");
+ System.out.println(webDriver.getPageSource());
+ WebElement elem = webDriver.findElement(By.tagName("pre"));
+
+ String json_str = elem.getText();
+ JSONParser parser = new JSONParser();
+ JSONObject obj = (JSONObject) parser.parse(json_str);
+ String ipAddress = (String) obj.get("ip");
+ System.out.println(ipAddress);
+
+ } catch (Exception e) {
+ System.out.println("Error");
+ } finally {
+ webDriver.quit();
+ }
+ }
+}
\ No newline at end of file
diff --git a/my-app/src/main/java/com/mycompany/app/Task3.java b/my-app/src/main/java/com/mycompany/app/Task3.java
new file mode 100644
index 0000000..7e801a2
--- /dev/null
+++ b/my-app/src/main/java/com/mycompany/app/Task3.java
@@ -0,0 +1,97 @@
+package com.mycompany.app;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+
+public class Task3
+{
+ public static void task3()
+ {
+ System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
+ WebDriver webDriver = new ChromeDriver();
+ try {
+ // как в README
+ webDriver.get("https://api.open-meteo.com/v1/forecast?latitude=56&longitude=44&hourly=temperature_2m,rain¤t=cloud_cover&timezone=Europe%2FMoscow&forecast_days=1&wind_speed_unit=ms");
+ System.out.println(webDriver.getPageSource());
+ WebElement tsyplakov_elem = webDriver.findElement(By.tagName("pre"));
+
+ // как в README
+ String tsyplakov_json_str = tsyplakov_elem.getText();
+ JSONParser tsyplakov_parser = new JSONParser();
+ JSONObject tsyplakov_obj = (JSONObject) tsyplakov_parser.parse(tsyplakov_json_str);
+
+ // тут получаем данные
+ JSONObject tsyplakov_currentWeather = (JSONObject) tsyplakov_obj.get("current");
+ String tsyplakov_currentTime = (String) tsyplakov_currentWeather.get("time");
+ Long tsyplakov_cloudCover = (Long) tsyplakov_currentWeather.get("cloud_cover");
+ JSONObject tsyplakov_hourly = (JSONObject) tsyplakov_obj.get("hourly");
+ JSONArray tsyplakov_times = (JSONArray) tsyplakov_hourly.get("time");
+ JSONArray temperatures = (JSONArray) tsyplakov_hourly.get("temperature_2m");
+ JSONArray tsyplakov_rain = (JSONArray) tsyplakov_hourly.get("rain");
+ JSONObject tsyplakov_hourlyUnits = (JSONObject) tsyplakov_obj.get("hourly_units");
+ String tsyplakov_tempUnit = (String) tsyplakov_hourlyUnits.get("temperature_2m");
+ String tsyplakov_rainUnit = (String) tsyplakov_hourlyUnits.get("rain");
+
+ // абсолютный путь к директории проекта
+ String projectPath = System.getProperty("user.dir");
+ String filePath = projectPath + "/../result/forecast.txt";
+
+ // запись в файл
+ PrintWriter fileWriter = new PrintWriter(new FileWriter(filePath));
+ fileWriter.println("Работа студента группы 3823Б1ПР2 - Цыплакова Кирилла");
+ fileWriter.println("Прогноз погоды: ");
+ fileWriter.println("Часовой пояс (TimeZone): " + tsyplakov_obj.get("timezone"));
+ fileWriter.println("Текущая погода на время " + tsyplakov_currentTime + ":");
+ fileWriter.println("Облачность: " + tsyplakov_cloudCover + "%");
+ fileWriter.println();
+ fileWriter.println("Прогноз на сегодня по часам:");
+ fileWriter.println("+----+----------+---------------+----------+");
+ fileWriter.printf("| %-2s | %-8s | %-13s | %-8s |\n", "№", "Время", "Температура(" + tsyplakov_tempUnit + ")", "Осадки(" + tsyplakov_rainUnit + ")");
+ fileWriter.println("+----+----------+---------------+----------+");
+
+ // тут выводим шапку таблицы на экран
+ System.out.println("Прогноз погоды: ");
+ System.out.println("Часовой пояс (TimeZone): " + tsyplakov_obj.get("timezone"));
+ System.out.println("Текущая погода на время " + tsyplakov_currentTime + ":");
+ System.out.println("Облачность: " + tsyplakov_cloudCover + "%");
+ System.out.println();
+ System.out.println("Прогноз на сегодня по часам:");
+
+ // с форматированием (красивым выводом на экран) помог DeepSeek
+ System.out.println("+----------+---------------+----------+");
+ System.out.printf("| %-2s | %-8s | %-13s | %-8s |\n", "№", "Время", "Температура(" + tsyplakov_tempUnit + ")", "Осадки(" + tsyplakov_rainUnit + ")");
+ System.out.println("+----------+---------------+----------+");
+
+ // выводим то, что напарсили (погода)
+ for (int i = 0; i < tsyplakov_times.size(); ++i) {
+ String time = (String) tsyplakov_times.get(i);
+ String hourOnly = time.substring(11, 16);
+ Double temperature = (Double) temperatures.get(i);
+ Double rain_ = (Double) tsyplakov_rain.get(i);
+
+ System.out.printf("| %-2d | %-8s | %-13.1f | %-8.2f |\n", (i + 1), hourOnly, temperature, rain_);
+ fileWriter.printf("| %-2d | %-8s | %-13.1f | %-8.2f |\n", (i + 1), hourOnly, temperature, rain_);
+ }
+ System.out.println("+----------+---------------+----------+");
+ fileWriter.println("+----+----------+---------------+----------+");
+
+ fileWriter.close();
+
+ // тут обработка ошибок
+ } catch (Exception e) {
+ System.out.println("Error: " + e.toString());
+ e.printStackTrace();
+ } finally {
+ // тут выходим
+ webDriver.quit();
+ }
+ }
+}
\ No newline at end of file
diff --git a/my-app/src/test/java/com/mycompany/app/AppTest.java b/my-app/src/test/java/com/mycompany/app/AppTest.java
new file mode 100644
index 0000000..0d14834
--- /dev/null
+++ b/my-app/src/test/java/com/mycompany/app/AppTest.java
@@ -0,0 +1,19 @@
+package com.mycompany.app;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest {
+
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue() {
+ assertTrue(true);
+ }
+}
diff --git a/my-app/target/classes/com/mycompany/app/App.class b/my-app/target/classes/com/mycompany/app/App.class
new file mode 100644
index 0000000..682ab72
Binary files /dev/null and b/my-app/target/classes/com/mycompany/app/App.class differ
diff --git a/my-app/target/classes/com/mycompany/app/Task2.class b/my-app/target/classes/com/mycompany/app/Task2.class
new file mode 100644
index 0000000..1dd7914
Binary files /dev/null and b/my-app/target/classes/com/mycompany/app/Task2.class differ
diff --git a/my-app/target/classes/com/mycompany/app/Task3.class b/my-app/target/classes/com/mycompany/app/Task3.class
new file mode 100644
index 0000000..f8cd3e9
Binary files /dev/null and b/my-app/target/classes/com/mycompany/app/Task3.class differ
diff --git a/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..1b06893
--- /dev/null
+++ b/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,3 @@
+com/mycompany/app/App.class
+com/mycompany/app/Task2.class
+com/mycompany/app/Task3.class
diff --git a/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..97c9668
--- /dev/null
+++ b/my-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,3 @@
+/home/fedashov/nnsu/QA/ST-7/my-app/src/main/java/com/mycompany/app/App.java
+/home/fedashov/nnsu/QA/ST-7/my-app/src/main/java/com/mycompany/app/Task2.java
+/home/fedashov/nnsu/QA/ST-7/my-app/src/main/java/com/mycompany/app/Task3.java
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f8f748f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+ com.mycompany.app
+ my-app
+ 1.0-SNAPSHOT
+
+ my-app
+
+ http://www.example.com
+
+
+ UTF-8
+ 17
+
+
+
+
+
+ org.junit
+ junit-bom
+ 5.11.0
+ pom
+ import
+
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.seleniumhq.selenium
+ selenium-java
+ 4.15.0
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.4.0
+
+
+
+ maven-resources-plugin
+ 3.3.1
+
+
+ maven-compiler-plugin
+ 3.13.0
+
+
+ maven-surefire-plugin
+ 3.3.0
+
+
+ maven-jar-plugin
+ 3.4.2
+
+
+ maven-install-plugin
+ 3.1.2
+
+
+ maven-deploy-plugin
+ 3.1.2
+
+
+
+ maven-site-plugin
+ 3.12.1
+
+
+ maven-project-info-reports-plugin
+ 3.6.1
+
+
+
+
+
diff --git a/result/forecast.txt b/result/forecast.txt
new file mode 100644
index 0000000..e8dad0b
--- /dev/null
+++ b/result/forecast.txt
@@ -0,0 +1,34 @@
+Прогноз погоды:
+Часовой пояс (TimeZone): Europe/Moscow
+Текущая погода на время 2026-06-07T22:15:
+Облачность: 85%
+
+Прогноз на сегодня по часам:
++----+----------+---------------+----------+
+| № | Время | Температура(°C) | Осадки(mm) |
++----+----------+---------------+----------+
+| 1 | 00:00 | 9.4 | 0.00 |
+| 2 | 01:00 | 8.7 | 0.00 |
+| 3 | 02:00 | 8.1 | 0.00 |
+| 4 | 03:00 | 6.6 | 0.00 |
+| 5 | 04:00 | 6.8 | 0.00 |
+| 6 | 05:00 | 8.7 | 0.00 |
+| 7 | 06:00 | 12.5 | 0.00 |
+| 8 | 07:00 | 16.2 | 0.00 |
+| 9 | 08:00 | 18.3 | 0.00 |
+| 10 | 09:00 | 20.5 | 0.00 |
+| 11 | 10:00 | 21.8 | 0.00 |
+| 12 | 11:00 | 22.5 | 0.00 |
+| 13 | 12:00 | 22.9 | 0.00 |
+| 14 | 13:00 | 22.9 | 0.00 |
+| 15 | 14:00 | 23.9 | 0.00 |
+| 16 | 15:00 | 24.4 | 0.00 |
+| 17 | 16:00 | 24.3 | 0.00 |
+| 18 | 17:00 | 24.0 | 0.00 |
+| 19 | 18:00 | 23.5 | 0.00 |
+| 20 | 19:00 | 22.0 | 0.00 |
+| 21 | 20:00 | 19.3 | 0.00 |
+| 22 | 21:00 | 17.2 | 0.00 |
+| 23 | 22:00 | 15.8 | 0.00 |
+| 24 | 23:00 | 15.2 | 0.00 |
++----+----------+---------------+----------+