<?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; Kotlin</title>
	<atom:link href="http://web.snauka.ru/issues/tag/kotlin/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +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>Разработка мобильного приложения для парсинга новостей сайта университета на платформе Android</title>
		<link>https://web.snauka.ru/issues/2026/03/104291</link>
		<comments>https://web.snauka.ru/issues/2026/03/104291#comments</comments>
		<pubDate>Sat, 07 Mar 2026 07:36:21 +0000</pubDate>
		<dc:creator>Романов Илья Александрович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Jsoup]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[ListView]]></category>
		<category><![CDATA[Parsing]]></category>
		<category><![CDATA[многопоточность]]></category>
		<category><![CDATA[новости]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/03/104291</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал В современном информационном обществе оперативный доступ к новостным материалам становится критически важным. Многие университеты публикуют актуальные события на своих официальных сайтах, однако не всегда предоставляют удобные мобильные интерфейсы или API для получения этих данных. Разработка собственного приложения, выполняющего парсинг новостей, позволяет решить эту проблему, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em>Научный руководитель: </em><em>Вильданов Алмаз Нафкатович<br />
</em><em>к.ф.-м.н., </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p>В современном информационном обществе оперативный доступ к новостным материалам становится критически важным. Многие университеты публикуют актуальные события на своих официальных сайтах, однако не всегда предоставляют удобные мобильные интерфейсы или API для получения этих данных. Разработка собственного приложения, выполняющего парсинг новостей, позволяет решить эту проблему, предоставив пользователю компактный и быстрый доступ к информации. Платформа Android с её широкими возможностями и библиотекой Jsoup для парсинга HTML является идеальной средой для реализации такой задачи. В учебном процессе создание подобного приложения позволяет освоить важные аспекты мобильной разработки: работу с сетью, многопоточность, адаптеры и обработку данных. В данной работе рассматривается создание приложения для парсинга новостей с сайта Пермского университета.</p>
<p>Алгоритм решения задачи по созданию приложения для парсинга новостей включает следующие последовательные шаги:</p>
<ul>
<li>добавляем в файл манифеста разрешение на доступ к Интернету;</li>
<li>в разметке activity_main.xml размещаем ListView на весь экран;</li>
<li>в файле build.gradle (модуля) подключаем зависимость implementation &#8216;org.jsoup:jsoup:1.18.1&#8242;;</li>
<li>в MainActivity объявляем переменные: список новостей, адаптер и ссылку на ListView;</li>
<li>инициализируем адаптер ArrayAdapter с простым макетом и устанавливаем его на ListView;</li>
<li>создаём однопоточный исполнитель ExecutorService для выполнения сетевого запроса в фоне;</li>
<li>получаем главный обработчик Handler для последующего обновления UI;</li>
<li>в фоновом потоке формируем URL страницы с новостями (например, с поддержкой пагинации);</li>
<li>с помощью Jsoup подключаемся к странице, указывая User-Agent для имитации браузера;</li>
<li>анализируем структуру HTML и выбираем все блоки, содержащие новости (используя CSS-селекторы);</li>
<li>для каждого блока извлекаем заголовок и дату публикации, добавляем их в список newsList;</li>
<li>после завершения парсинга через handler.post обновляем адаптер, вызывая notifyDataSetChanged();</li>
<li>обрабатываем возможные исключения IOException и выводим сообщение об ошибке в список.</li>
</ul>
<p><img class="aligncenter" src="https://web.snauka.ru/wp-content/uploads/2026/03/030726_0711_11.png" alt="" /></p>
<p style="text-align: center;">Рисунок 1. Внешний вид приложения со списком новостей</p>
<p>Ниже приведён фрагмент программного кода, реализующего основную логику парсинга (файл MainActivity.kt):</p>
<p>&nbsp;</p>
<p>import android.os.Bundle</p>
<p>import android.os.Handler</p>
<p>import android.os.Looper</p>
<p>import android.widget.ArrayAdapter</p>
<p>import android.widget.ListView</p>
<p>import androidx.appcompat.app.AppCompatActivity</p>
<p>import org.jsoup.Jsoup</p>
<p>import java.io.IOException</p>
<p>import java.util.concurrent.Executors</p>
<p>&nbsp;</p>
<p>class MainActivity : AppCompatActivity() {</p>
<p style="padding-left: 30px;">    private lateinit var listView: ListView</p>
<p style="padding-left: 30px;">    private val newsList = ArrayList&lt;String&gt;()</p>
<p style="padding-left: 30px;">    private lateinit var adapter: ArrayAdapter&lt;String&gt;</p>
<p style="padding-left: 30px;">    override fun onCreate(savedInstanceState: Bundle?) {</p>
<p style="padding-left: 60px;">        super.onCreate(savedInstanceState)</p>
<p style="padding-left: 60px;">        setContentView(R.layout.activity_main)</p>
<p style="padding-left: 60px;">        listView = findViewById(R.id.list)</p>
<p style="padding-left: 60px;">        adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, newsList)</p>
<p style="padding-left: 60px;">        listView.adapter = adapter</p>
<p style="padding-left: 60px;">        val executor = Executors.newSingleThreadExecutor()</p>
<p style="padding-left: 60px;">        val handler = Handler(Looper.getMainLooper())</p>
<p style="padding-left: 60px;">        executor.execute {</p>
<p style="padding-left: 90px;">            try {</p>
<p style="padding-left: 120px;">                // Парсинг первых трёх страниц новостей сайта ПГНИУ</p>
<p style="padding-left: 120px;">                for (page in 1..3) {</p>
<p style="padding-left: 150px;">                    val url = &#8220;https://www.psu.ru/news?page=$page&#8221;</p>
<p style="padding-left: 150px;">                    val doc = Jsoup.connect(url)</p>
<p style="padding-left: 180px;">                        .userAgent(&#8220;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36&#8243;)</p>
<p style="padding-left: 180px;">                        .get()</p>
<p style="padding-left: 150px;">                    // Селекторы подбираются на основе анализа HTML-кода сайта</p>
<p style="padding-left: 150px;">                    val newsItems = doc.select(&#8220;.news-item&#8221;) // пример класса</p>
<p style="padding-left: 150px;">                    for (item in newsItems) {</p>
<p style="padding-left: 180px;">                        val title = item.selectFirst(&#8220;.news-title&#8221;)?.text() ?: &#8220;Без заголовка&#8221;</p>
<p style="padding-left: 180px;">                        val date = item.selectFirst(&#8220;.news-date&#8221;)?.text() ?: &#8220;Дата не указана&#8221;</p>
<p style="padding-left: 180px;">                        newsList.add(&#8220;$title ($date)&#8221;)</p>
<p style="padding-left: 150px;">                    }</p>
<p style="padding-left: 120px;">                }</p>
<p style="padding-left: 90px;">            } catch (e: IOException) {</p>
<p style="padding-left: 120px;">                e.printStackTrace()</p>
<p style="padding-left: 120px;">                newsList.add(&#8220;Ошибка загрузки: ${e.message}&#8221;)</p>
<p style="padding-left: 90px;">            }</p>
<p style="padding-left: 90px;">            handler.post {</p>
<p style="padding-left: 120px;">                adapter.notifyDataSetChanged()</p>
<p style="padding-left: 90px;">            }</p>
<p style="padding-left: 60px;">        }</p>
<p style="padding-left: 30px;">    }</p>
<p>}</p>
<p><em>Примечание: представленные CSS-селекторы являются условными и требуют уточнения при реальной разработке на основе актуальной структуры сайта.</em></p>
<p>Данный код демонстрирует типовую схему парсинга: фоновый поток, подключение к странице, извлечение данных и обновление UI. Использование ExecutorService и Handler гарантирует безопасную работу с сетью и интерфейсом.</p>
<p style="text-align: center;"><strong>Заключение</strong></p>
<p>В ходе выполнения лабораторной работы было разработано Android-приложение, выполняющее парсинг новостей с сайта Пермского университета. Применение библиотеки Jsoup позволило эффективно извлекать данные из HTML-структуры. Реализована многопоточная обработка сетевых запросов, исключающая блокировку пользовательского интерфейса. Адаптер ListView обеспечил наглядное отображение полученных новостей. Приложение может быть легко адаптировано для других сайтов путём изменения селекторов и URL. Полученные навыки являются фундаментом для разработки более сложных приложений, работающих с веб-данными.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/03/104291/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
