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 | ++----+----------+---------------+----------+