Сбор информации о погоде из Google может быть полезен для различных приложений, таких как создание виджета погоды или интеграция данных о погоде в более крупное приложение. В этом уроке мы покажем, как получить информацию о погоде из Google с помощью языка программирования Java.

Предпосылки

Прежде чем приступить к работе, на вашем компьютере должны быть установлены следующие предварительные компоненты:

  • Комплект для разработки Java (JDK)
  • Интегрированная среда разработки Java (IDE), такая как Eclipse или IntelliJ IDEA.

Настройка Java-проекта

Во-первых, нам нужно настроить проект Java в нашей среде IDE. Если вы используете Eclipse, вы можете сделать это, выбрав File › New › Java Project в верхнем меню. Дайте вашему проекту имя и нажмите «Готово», чтобы создать проект.

Зависимости

Далее нам нужно добавить несколько зависимостей в наш проект. Мы будем использовать следующие библиотеки для очистки информации о погоде:

  • JSoup: Java-библиотека для парсинга HTML
  • OkHttp: Java-библиотека для создания HTTP-запросов.

Чтобы добавить эти зависимости в наш проект, нам нужно добавить их соответствующие файлы 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.");
}
  1. В первом блоке кода мы отправляем HTTP-запрос GET в Google с поисковым запросом о погоде в заданном месте (в данном случае «Сан-Франциско, Калифорния»). Мы используем библиотеку OkHttp, чтобы сделать запрос и сохранить ответ в объекте Response.
  2. Во втором блоке кода мы используем библиотеку JSoup для анализа HTML ответа. Мы используем метод select для поиска элементов в HTML, которые соответствуют заданному селектору CSS. В данном случае мы ищем элементы с классом BNeawe tAd8D AP7Wnd, которые соответствуют информации о погоде на странице поиска Google.
  3. Если мы находим какие-либо элементы, соответствующие селектору CSS, мы извлекаем температуру и условия из первого элемента в списке. Мы делаем это, снова используя метод select, чтобы найти элементы с определенными классами в элементе погоды. Температура содержится в элементе класса BNeawe tAd8D AP7Wnd, а условия содержатся в элементе класса BNeawe s3v9rd AP7Wnd.
  4. Если мы не находим никаких элементов, соответствующих селектору CSS, мы печатаем сообщение о том, что информация о погоде для данного местоположения не найдена.