Сбор информации о погоде из Google может быть полезен для различных приложений, таких как создание виджета погоды или интеграция данных о погоде в более крупное приложение. В этом уроке мы покажем, как получить информацию о погоде из Google с помощью языка программирования Java.
Предпосылки
Прежде чем приступить к работе, на вашем компьютере должны быть установлены следующие предварительные компоненты:
- Комплект для разработки Java (JDK)
- Интегрированная среда разработки Java (IDE), такая как Eclipse или IntelliJ IDEA.
Настройка Java-проекта
Во-первых, нам нужно настроить проект Java в нашей среде IDE. Если вы используете Eclipse, вы можете сделать это, выбрав File › New › Java Project в верхнем меню. Дайте вашему проекту имя и нажмите «Готово», чтобы создать проект.
Зависимости
Далее нам нужно добавить несколько зависимостей в наш проект. Мы будем использовать следующие библиотеки для очистки информации о погоде:
Чтобы добавить эти зависимости в наш проект, нам нужно добавить их соответствующие файлы JAR в путь к классам нашего проекта. В Eclipse это можно сделать, щелкнув правой кнопкой мыши свой проект в Project Explorer, выбрав Build Path › Configure Build Path, а затем добавив файлы JAR на вкладку «Библиотеки».
Скрапинг информации о погоде
Теперь, когда наши зависимости настроены, мы можем начать собирать информацию о погоде. Первый шаг — отправить HTTP-запрос в Google для поиска информации о погоде. Мы можем использовать библиотеку OkHttp, чтобы сделать этот запрос:
String location = "San Francisco, CA"; String googleSearchUrl = "https://www.google.com/search?q=weather " + location; OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(googleSearchUrl) .build(); Response response = client.newCall(request).execute();
Это сделает GET-запрос к Google с поисковым запросом «погода в Сан-Франциско, Калифорния».
Затем мы можем проанализировать ответ HTML, используя JSoup, чтобы извлечь информацию о погоде:
Document doc = Jsoup.parse(response.body().string()); Elements weatherElements = doc.select(".BNeawe.tAd8D.AP7Wnd"); if (weatherElements.size() > 0) { Element weatherElement = weatherElements.get(0); String temperature = weatherElement.select(".BNeawe.tAd8D.AP7Wnd > .BNeawe.s3v9rd.AP7Wnd").text(); String conditions = weatherElement.select(".BNeawe.s3v9rd.AP7Wnd").get(1).text(); System.out.println("Temperature: " + temperature); System.out.println("Conditions: " + conditions); } else { System.out.println("No weather information found for the given location."); }
- В первом блоке кода мы отправляем HTTP-запрос GET в Google с поисковым запросом о погоде в заданном месте (в данном случае «Сан-Франциско, Калифорния»). Мы используем библиотеку OkHttp, чтобы сделать запрос и сохранить ответ в объекте
Response
. - Во втором блоке кода мы используем библиотеку JSoup для анализа HTML ответа. Мы используем метод
select
для поиска элементов в HTML, которые соответствуют заданному селектору CSS. В данном случае мы ищем элементы с классомBNeawe tAd8D AP7Wnd
, которые соответствуют информации о погоде на странице поиска Google. - Если мы находим какие-либо элементы, соответствующие селектору CSS, мы извлекаем температуру и условия из первого элемента в списке. Мы делаем это, снова используя метод
select
, чтобы найти элементы с определенными классами в элементе погоды. Температура содержится в элементе классаBNeawe tAd8D AP7Wnd
, а условия содержатся в элементе классаBNeawe s3v9rd AP7Wnd
. - Если мы не находим никаких элементов, соответствующих селектору CSS, мы печатаем сообщение о том, что информация о погоде для данного местоположения не найдена.