В моем приложении Kotlin для Android я хочу сделать следующее:
img
внутри полученного источника HTML.Как мне это сделать? Существует ли библиотека для Android, в которой вы можете отправить URL-адрес и получить взамен исходный код HTML?
@CommonsWare Извините, это было непонятно. Я пересмотрел вопрос, так как считаю, что мне нужен только исходный код HTML веб-страницы. Чтобы ответить на ваш другой вопрос, я не пытаюсь загрузить веб-сайт со стороны пользователя. Я хочу просто получить исходный HTML-код веб-сайта без необходимости показывать фактический сайт или загружать его пользователю.
Get the HTML source of a URL
Используйте любой HTTP-клиентский API. Я рекомендую OkHttp, но есть и много других.
Get the URL from the first img tag inside the HTML source that was retrieved
Проанализируйте HTML с помощью анализатора HTML и используйте результат анализа, чтобы найти нужный HTML-тег. JSoup довольно популярен, и он также включает HTTP-клиент, который вы можете использовать вместо OkHttp или чего-то еще.
Вы бы закончили с чем-то вроде:
val doc = Jsoup.connect("YOUR URL GOES HERE").get()
val firstImg = doc.select("img").first()
Строка val doc
выдает ошибку android.os.NetworkOnMainThreadException
. У меня уже есть OkHttp в моем build.gradle
, но я не уверен, как его можно использовать в этом контексте.
@TomDarious: вам нужно выполнять эту работу в фоновом потоке той или иной формы. Например, ваша модель представления или репозиторий могут выполнять эту работу с помощью сопрограмм Kotlin.
Вместо того, чтобы просто получить первый тег img
, есть ли способ получить первый тег img
, отвечающий определенным требованиям? Например, тег img
с атрибутом alt
и полным http
или https
URL-адресом, который включает формат изображения .jpg
, .jpeg
или .png
?
@TomDarious: См. документация JSoup синтаксис селектора, который я использовал в вызове select()
.
Что такое «метаданные» в этом контексте? Вы можете получить HTML, просто загрузив веб-страницу с помощью клиентского API HTTP, такого как OkHttp.