<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; парсинг погоды</title>
	<atom:link href="http://web.snauka.ru/issues/tag/parsing-pogodyi/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Парсинг погоды и визуализация данных с использованием WebGL</title>
		<link>https://web.snauka.ru/issues/2026/01/104166</link>
		<comments>https://web.snauka.ru/issues/2026/01/104166#comments</comments>
		<pubDate>Sat, 31 Jan 2026 08:46:30 +0000</pubDate>
		<dc:creator>Гильмутдинов Айдар Илгизович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[3D-графика]]></category>
		<category><![CDATA[API погоды]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[визуализация данных]]></category>
		<category><![CDATA[оптимизация рендеринга]]></category>
		<category><![CDATA[парсинг погоды]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/01/104166</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Введение WebGL — это мощный инструмент для создания 3D-графики прямо в браузере, позволяющий задействовать ресурсы графического адаптера и разгрузить процессор . Визуализация погодных данных, таких как температура, давление или осадки, требует не только точности, но и интерактивности. Например, Яндекс.Погода использует WebGL для отображения сложных анимаций, таких как [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em>к.ф.-м.н., </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p><span><strong> Введение<br />
</strong></span></p>
<p><span>WebGL — это мощный инструмент для создания 3D-графики прямо в браузере, позволяющий задействовать ресурсы графического адаптера и разгрузить процессор . Визуализация погодных данных, таких как температура, давление или осадки, требует не только точности, но и интерактивности. Например, Яндекс.Погода использует WebGL для отображения сложных анимаций, таких как движение облаков или эффекты дождя . Современные требования к веб-приложениям включают поддержку мобильных устройств, кросс-платформенность и высокую производительность, что делает WebGL идеальным выбором для таких задач.</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2026/02/020326_0852_1.jpg" alt="" /></p>
<p style="text-align: center;">Рисунок 1. Скриншот интерфейса с 3D-анимацией облаков<span><br />
</span></p>
<p><span><strong>Парсинг данных<br />
</strong></span></p>
<p><span>Для начала необходимо извлечь данные из погодного API (например, OpenWeatherMap). Запросы отправляются через JavaScript с использованием <strong>fetch</strong> или <strong>XMLHttpRequest</strong>. Ответ обычно приходит в формате JSON, содержащем информацию о температуре, скорости ветра, облачности и других параметрах.<br />
</span></p>
<p><span>Пример JSON-ответа:<br />
</span></p>
<p><span>json<br />
</span></p>
<p><span>{<br />
</span></p>
<p style="padding-left: 30px;"><span> &#8220;temperature&#8221;: 20,<br />
</span></p>
<p style="padding-left: 30px;"><span> &#8220;humidity&#8221;: 60,<br />
</span></p>
<p style="padding-left: 30px;"><span> &#8220;wind_speed&#8221;: 5,<br />
</span></p>
<p style="padding-left: 30px;"><span> &#8220;cloudiness&#8221;: 80<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span><br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2026/02/020326_0852_2.jpg" alt="" /></p>
<p style="text-align: center;">Рисунок 2. Диаграмма, показывающая структуру JSON-ответа от API погоды<span><br />
</span></p>
<p><span><strong>Работа с ошибками API<br />
</strong></span></p>
<p><span>При парсинге данных важно учитывать возможные ошибки, такие как превышение лимита запросов или недоступность сервера. Для этого рекомендуется использовать механизмы повторных попыток и кэширования данных. Например, можно сохранять последние успешные ответы в <strong>localStorage</strong> и отображать их, если API временно недоступен .<br />
</span></p>
<p><span><strong>Геолокационные данные<br />
</strong></span></p>
<p><span>Для автоматического определения местоположения пользователя можно использовать Geolocation API. Это позволяет отображать погоду без необходимости ручного ввода города. Пример кода:<br />
</span></p>
<p><span>javascript<br />
</span></p>
<p><span>navigator.geolocation.getCurrentPosition(position =&gt; {<br />
</span></p>
<p style="padding-left: 30px;"><span> const { latitude, longitude } = position.coords;<br />
</span></p>
<p style="padding-left: 30px;"><span> fetch(`https://api.weatherapi.com/v1/current.json?key=YOUR_KEY&amp;q= ${latitude},${longitude}`)<br />
</span></p>
<p style="padding-left: 30px;"><span> .then(response =&gt; response.json())<br />
</span></p>
<p style="padding-left: 30px;"><span> .then(data =&gt; console.log(data));<br />
</span></p>
<p><span>});</span></p>
<p><strong>Подготовка данных для WebGL</strong></p>
<p><span>Полученные данные нужно преобразовать в визуальные элементы. Например:<br />
</span></p>
<ul>
<li><span>Температура : Цветовая палитра от синего (холодно) до красного (жарко).<br />
</span></li>
<li><span>Облака : Трехмерные полигоны с текстурами.<br />
</span></li>
<li><span>Дождь : Анимированные частицы.<br />
</span></li>
</ul>
<p><span>Для работы с данными в WebGL используются буферы и атрибуты, которые загружаются в графический процессор .<br />
</span></p>
<p><span><strong>Преобразование данных в 3D-объекты<br />
</strong></span></p>
<p><span>Каждый параметр погоды может быть представлен в виде геометрии. Например, температура может отображаться как цветовая карта на поверхности земного шара, а ветер — как движение частиц в направлении его направления. Для этого используются вершинные шейдеры, где координаты вершин изменяются в зависимости от данных.</span></p>
<p style="background: white; text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2026/02/020326_0852_4.jpg" alt="" /></p>
<p style="background: white; text-align: center;">Рисунок 3. 3D-сцена с облаками, температурными градиентами и анимацией ветра<span><br />
</span></p>
<p><span><strong>Создание 3D-сцены<br />
</strong></span></p>
<p><span>Сцена строится с помощью WebGL API или библиотек, таких как Three.js. Основные шаги:<br />
</span></p>
<ol>
<li><span>Инициализация контекста WebGL.<br />
</span></li>
<li><span>Создание вершинного и фрагментного шейдеров для управления геометрией и цветом .<br />
</span></li>
<li><span>Настройка камеры и источников света.<br />
</span></li>
<li><span>Добавление объектов (облака, температурные градиенты).<br />
</span></li>
</ol>
<p><span><strong>Пример кода Three.js<br />
</strong></span></p>
<p><span>javascript<br />
</span></p>
<p><span>const scene = new THREE.Scene();<br />
</span></p>
<p><span>const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);<br />
</span></p>
<p><span>const renderer = new THREE.WebGLRenderer();<br />
</span></p>
<p><span>renderer.setSize(window.innerWidth, window.innerHeight);<br />
</span></p>
<p><span>document.body.appendChild(renderer.domElement);<br />
</span></p>
<p><span>// Добавление облака<br />
</span></p>
<p><span>const cloudGeometry = new THREE.SphereGeometry(5, 32, 32);<br />
</span></p>
<p><span>const cloudMaterial = new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(&#8216;cloud.png&#8217;) });<br />
</span></p>
<p><span>const cloud = new THREE.Mesh(cloudGeometry, cloudMaterial);<br />
</span></p>
<p><span>scene.add(cloud);<br />
</span></p>
<p><span>camera.position.z = 10;<br />
</span></p>
<p><span>function animate() {<br />
</span></p>
<p style="padding-left: 30px;"><span> requestAnimationFrame(animate);<br />
</span></p>
<p style="padding-left: 30px;"><span> cloud.rotation.y += 0.01; // Анимация облака<br />
</span></p>
<p style="padding-left: 30px;"><span> renderer.render(scene, camera);<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span>animate();</span></p>
<p><span><strong>Анимация и взаимодействие<br />
</strong></span></p>
<p><span>Для динамического отображения погоды используются шейдеры. Например, в фрагментном шейдере можно реализовать эффект дождя, изменяя координаты частиц в реальном времени. Взаимодействие пользователя (например, вращение сцены мышью) реализуется через обработчики событий.<br />
</span></p>
<p><span><strong>5.1 Шейдер для дождя<br />
</strong></span></p>
<p><span>glsl<br />
</span></p>
<p><span>// Фрагментный шейдер<br />
</span></p>
<p><span>precision mediump float;<br />
</span></p>
<p><span>uniform float u_time;<br />
</span></p>
<p><span>void main() {<br />
</span></p>
<p style="padding-left: 30px;"><span> vec2 uv = gl_FragCoord.xy / vec2(800.0, 600.0);<br />
</span></p>
<p style="padding-left: 30px;"><span> float rain = sin(uv.x * 100.0 + u_time * 10.0) * 0.5 + 0.5;<br />
</span></p>
<p style="padding-left: 30px;"><span> gl_FragColor = vec4(vec3(rain), 1.0);<br />
</span></p>
<p><span>}<br />
</span></p>
<p><span><br />
</span></p>
<p style="background: white; text-align: center;"><img class="aligncenter" src="https://web.snauka.ru/wp-content/uploads/2026/02/020326_0852_6.jpg" alt="" />Рисунок 4. Анимация дождевых частиц, управляемых шейдерами<span><br />
</span></p>
<p><span><strong>Оптимизация производительности<br />
</strong></span></p>
<p><span>WebGL позволяет оптимизировать рендеринг за счет:<br />
</span></p>
<ul>
<li><span>Минимизации количества вызовов WebGL API.<br />
</span></li>
<li><span>Использования буферов для хранения данных на GPU .<br />
</span></li>
<li><span>Упрощения шейдеров для мобильных устройств.<br />
</span></li>
</ul>
<p><span><strong>Кэширование данных<br />
</strong></span></p>
<p><span>Для уменьшения нагрузки на сеть данные можно кэшировать на стороне клиента. Например, сохранять результаты запросов в IndexedDB и обновлять их только при изменении погодных условий. Это особенно важно для мобильных пользователей с ограниченным трафиком.<br />
</span></p>
<p><span><strong>Интеграция с картами<br />
</strong></span></p>
<p><span>Для улучшения восприятия данных можно интегрировать 3D-сцену с картами (например, Google Maps или Mapbox). Это позволяет отображать погоду в контексте географического положения. Например, облачность может показываться как слой над картой, а ветер — как стрелки на поверхности земли.<br />
</span></p>
<p><span><strong>Заключение<br />
</strong></span></p>
<p><span>WebGL открывает широкие возможности для визуализации погодных данных, превращая сухие цифры в интерактивные 3D-сцены. Использование шейдеров, библиотек вроде Three.js и оптимизация через GPU гарантирует высокую производительность даже на слабых устройствах. Дополнительные элементы, такие как геолокация и интеграция с картами, делают приложения еще более полезными для пользователей.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/01/104166/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработка Android‑приложения для отображения погоды с использованием Gismeteo и Jsoup</title>
		<link>https://web.snauka.ru/issues/2026/03/104431</link>
		<comments>https://web.snauka.ru/issues/2026/03/104431#comments</comments>
		<pubDate>Tue, 31 Mar 2026 13:31:53 +0000</pubDate>
		<dc:creator>author20348</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ExecutorService]]></category>
		<category><![CDATA[Gismeteo]]></category>
		<category><![CDATA[Handler]]></category>
		<category><![CDATA[Jsoup]]></category>
		<category><![CDATA[мобильная разработка]]></category>
		<category><![CDATA[парсинг погоды]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/03/104431</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Веб-скрейпинг с использованием библиотеки Jsoup остается высокоактуальной темой для Android-разработчиков, поскольку позволяет автоматизировать сбор данных с веб-сайтов, включая прогнозы погоды, новости и коммерческую информацию. В условиях отсутствия открытых API у многих популярных ресурсов, включая Gismeteo, эта техника становится востребованной в мобильной разработке, аналитике [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;" align="right"><em>Научный руководитель: Вильданов Алмаз Нафкатович</em><br />
<em>к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p>Веб-скрейпинг с использованием библиотеки Jsoup остается высокоактуальной темой для Android-разработчиков, поскольку позволяет автоматизировать сбор данных с веб-сайтов, включая прогнозы погоды, новости и коммерческую информацию. В условиях отсутствия открытых API у многих популярных ресурсов, включая Gismeteo, эта техника становится востребованной в мобильной разработке, аналитике и автоматизации задач, где прямой доступ к данным невозможен.</p>
<p>В данной работе выполняется парсинг погоды для Ростова-на-Дону с сайта Gismeteo (рисунок 1) с использованием библиотеки Jsoup для извлечения температуры из HTML-структуры страницы. Для обеспечения корректной работы сетевых запросов применяется ExecutorService, организующий фоновый поток, а обновление пользовательского интерфейса выполняется через Handler. Подобные скрипты востребованы при создании мобильных информеров, особенно для регионов, данные по которым недоступны через официальные API. Стабильность библиотеки Jsoup и встроенных средств многопоточности Android обеспечивает надежность работы приложения в условиях ограниченных ресурсов мобильного устройства.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-104436" title="ris1" src="https://web.snauka.ru/wp-content/uploads/2026/03/ris12.png" alt="" width="516" height="234" /></p>
<p align="center">Рисунок 1. Сайт погоды</p>
<p align="left">Алгоритм решения задачи по созданию Android-приложения для отображения погоды включает следующие последовательные шаги разработки:</p>
<ul>
<li>добавляем разрешение на доступ к интернету в файл AndroidManifest.xml;</li>
<li>подключаем зависимость библиотеки Jsoup в файле build.gradle модуля приложения;</li>
<li>создаём интерфейс с кнопкой для запуска парсинга и текстовым полем для отображения результата;</li>
<li>инициализируем ExecutorService для выполнения сетевого запроса в фоновом потоке;</li>
<li>выполняем подключение к сайту Gismeteo с указанием URL нужного города;</li>
<li>находим элемент с классом &#8220;weather-value&#8221; и извлекаем из него значение температуры;</li>
<li>обрабатываем возможные исключения при сетевом подключении;</li>
<li>используем Handler для обновления TextView с полученными данными в UI-потоке.</li>
</ul>
<p align="left">Ниже приведен фрагмент кода основной логики приложения:</p>
<p style="background: white;"><span><span style="color: #0033b3;">private </span>View<span style="color: #080808;">.</span>OnClickListener <span style="color: #871094;">myOnClick <span style="color: #080808;">= <span style="color: #0033b3;">new </span>View.</span>OnClickListener<span style="color: #080808;">() {</span></span></span></p>
<p style="background: white; padding-left: 30px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;">public void <span style="color: #00627a;">onClick<span style="color: #080808;">(</span>View v<span style="color: #080808;">) {</span></span></span></span></span></span></p>
<p style="background: white; padding-left: 60px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;">ExecutorService executor <span style="color: #080808;">= </span>Executors<span style="color: #080808;">.<em>newSingleThreadExecutor</em>();</span></span></span></span></span></span></p>
<p style="background: white; padding-left: 60px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;">Handler handler <span style="color: #080808;">= <span style="color: #0033b3;">new <span style="color: #080808;">Handler(</span>Looper<span style="color: #080808;">.<em>getMainLooper</em>());</span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 60px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;">executor<span style="color: #080808;">.execute(<span style="color: #0033b3;">new </span>Runnable() {</span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 90px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;">String <span style="color: #871094;">title<span style="color: #080808;">;</span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 90px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;">@Override</span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 90px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;">public void <span style="color: #00627a;">run<span style="color: #080808;">() {</span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 120px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><em>//Background work here</em></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 120px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;">try <span style="color: #080808;">{</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;">Document doc <span style="color: #080808;">= </span>Jsoup<span style="color: #080808;">.<em>connect</em>(<span style="color: #067d17;">&#8220;https://www.gismeteo.ru/weather-rostov-na-donu-5110/&#8221;<span style="color: #080808;">).get();</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;">Elements ele <span style="color: #080808;">= </span>doc<span style="color: #080808;">.select(<span style="color: #067d17;">&#8220;div[class=weather-value]&#8220;<span style="color: #080808;">);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;">Element pogoda <span style="color: #080808;">= </span>ele<span style="color: #080808;">.select(<span style="color: #067d17;">&#8220;temperature-value&#8221;<span style="color: #080808;">).first();</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;">title <span style="color: #080808;">= </span>pogoda<span style="color: #080808;">.val();</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 120px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">} <span style="color: #0033b3;">catch <span style="color: #080808;">(</span>IOException e<span style="color: #080808;">) {</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><em>// e.printStackTrace();</em></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;">title <span style="color: #080808;">= <span style="color: #067d17;">&#8220;error&#8221;<span style="color: #080808;">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 120px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 120px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #851691;">handler<span style="color: #080808;">.post(<span style="color: #0033b3;">new </span>Runnable() {</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #851691;"><span style="color: #080808;"><span style="color: #9e880d;">@Override</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 150px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #851691;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;">public void <span style="color: #00627a;">run<span style="color: #080808;">() {</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white; padding-left: 180px;"><span><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #0033b3;"><span style="color: #080808;"><span style="color: #8c8c8c;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #851691;"><span style="color: #080808;"><span style="color: #9e880d;"><span style="color: #0033b3;"><span style="color: #00627a;"><span style="color: #080808;"><span style="color: #8c8c8c;"><em>//UI Thread work here</em></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="padding-left: 180px;"><span style="color: #871094;">myTextView<span style="color: #080808;">.setText(<span style="color: #067d17;">&#8220;Ростов-на-Дону: &#8221; <span style="color: #080808;">+ <span style="color: #871094;">title<span style="color: #080808;">);</span></span></span></span></span></span></p>
<p style="padding-left: 150px;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">}</span></span></span></span></span></span></p>
<p style="padding-left: 120px;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">});</span></span></span></span></span></span></p>
<p style="padding-left: 90px;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">}</span></span></span></span></span></span></p>
<p style="padding-left: 60px;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">});</span></span></span></span></span></span></p>
<p style="padding-left: 30px;"><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">}</span></span></span></span></span></span></p>
<p><span style="color: #871094;"><span style="color: #080808;"><span style="color: #067d17;"><span style="color: #080808;"><span style="color: #871094;"><span style="color: #080808;">};<br />
</span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #080808;"><br />
</span></p>
<p>В представленном коде при нажатии на кнопку создается однопоточный ExecutorService, который выполняет сетевой запрос в фоне. Jsoup подключается к странице города, находит элемент с классом &#8220;weather-value&#8221; и извлекает из вложенного тега &#8220;temperature-value&#8221; значение температуры. В случае ошибки (отсутствие интернета, изменение структуры сайта) в переменную title записывается &#8220;error&#8221;. После завершения работы Handler обновляет TextView в главном потоке.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-104437" title="ris2" src="https://web.snauka.ru/wp-content/uploads/2026/03/ris2.png" alt="" width="372" height="173" /></p>
<p align="center">Рисунок 2. Интерфейс разработанного приложения с результатом парсинга</p>
<p style="text-align: left;" align="center"><strong>Заключение</strong><strong> </strong></p>
<p align="left">Разработанное Android-приложение успешно выполняет парсинг данных о погоде с сайта Gismeteo и отображает температуру для указанного города. Использование библиотеки Jsoup в сочетании с ExecutorService и Handler обеспечивает стабильную работу приложения без блокировки пользовательского интерфейса. Предложенный подход может быть адаптирован для парсинга любых данных с веб-страниц, что расширяет возможности мобильных приложений при отсутствии официальных API. Важно помнить об этических аспектах и соблюдении правил robots.txt при разработке подобных решений. Дальнейшее развитие приложения может включать добавление списка городов, автоматическое обновление данных и визуализацию погодных условий.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/03/104431/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
