Для Android) Его модульная архитектура делает его более чистым и лаконичным по сравнению с другими библиотеками, не оптимизированными специально для Android.
Извлекает заголовки, изображения баннеров и другие метаданные с любой веб-страницы.
— Поддержка большего количества форматов метаданных: OpenGraph, Twitter Cards, Schema.org.
Переписывает URL AMP-страницы на её канонический (оригинальный) URL.
Переписывает URL, созданные службой перенаправления Google, на их канонические (оригинальные) URL.
Переписывает URL, созданные службой перенаправления Facebook, на их канонические (оригинальные) URL.
Удаляет параметры URL, обычно используемые поставщиками аналитики для отслеживания поведения пользователей в интернете. Этот плагин является необязательным, поскольку он может нарушить работу некоторых неправильно настроенных URL-адресов и привести к тому, что они будут возвращать неправильный контент.
Начиная с версии 5.0, Crux больше не содержит собственный плагин для извлечения статей. Мы рекомендуем dankito/Readability4J, форк Mozilla Readability.js, который имеет более высокое качество и новее, чем Snacktory, исходный код Crux. Мы рекомендуем использовать его вместо того, чтобы полагаться на парсер Crux (который теперь был удалён).
Readability4J удаляет боковые панели, навигационные панели и другие несущественные части страницы и извлекает основное содержание статьи.
build.gradle.kts:
dependencies {
implementation("net.dankito.readability4j:readability4j:1.0.8")
}
Readability4JPlugin.kt:
import com.chimbori.crux.api.Extractor
import com.chimbori.crux.api.Fields.DURATION_MS
import com.chimbori.crux.api.Fields.TITLE
import com.chimbori.crux.api.Resource
import com.chimbori.crux.common.estimatedReadingTimeMs
import com.chimbori.crux.common.isLikelyArticle
import net.dankito.readability4j.extended.Readability4JExtended
import okhttp3.HttpUrl
class Readability4JPlugin : Extractor {
override fun canExtract(url: HttpUrl) = url.isLikelyArticle()
override suspend fun extract(request: Resource): Resource? = if (request.url != null && request.document != null) {
val readability4J = Readability4JExtended(request.url.toString(), request.document!!)
val article = readability4J.parse()
Resource(
article = article.articleContent,
metadata = mapOf(
TITLE to article.title,
DURATION_MS to article.articleContent?.text()?.estimatedReadingTimeMs()
),
)
} else {
null
}
}
Затем добавьте Readability4JPlugin
в список плагинов Crux, чтобы использовать его вместе с плагинами Crux по умолчанию.
В качестве примера можно написать собственный плагин для извлечения определённых полей из URL следующим образом:
// Если вы пишете новый плагин самостоятельно, вы можете добавить любые пользовательские поля в объект `Resource`
// самостоятельно и использовать их в своём собственном приложении.
val customerNumberExtractorPlugin = object : Plugin {
// Укажите, что ваш плагин может обрабатывать все URL на вашем сайте, но никакие другие.
override fun canHandle(url: HttpUrl): Boolean = url.topPrivateDomain() == "your-website.com"
// Поля в возвращаемом [Resource] перезаписывают те, которые были во входном [request]. Если никаких изменений не требуется, то верните null из вашего плагина. В противном случае возвращайте только те поля, которые являются новыми или изменёнными по сравнению со входными.
override suspend fun handle(request: Resource) = Resource(
fields = mapOf(CUSTOMER_NUMBER_FIELD to request.url?.queryParameter("customer-number"))
)
val CUSTOMER_NUMBER_FIELD = "customer-number"
}
val cruxWithCustomPlugin = Crux(DEFAULT_PLUGINS + customerNumberExtractorPlugin)
val orderDetailsUrl = "https://www.your-website.com/orders?customer-number=42".toHttpUrl()
val metadata = runBlocking {
cruxWithCustomPlugin.extractFrom(orderDetailsUrl, Document(orderDetailsUrl.toString()))
}
// Входной URL не изменился и доступен в выходных метаданных.
assertEquals(orderDetailsUrl, metadata.url)
// Данные, извлечённые пользовательским плагином, доступны как
*Примечание: в тексте запроса присутствуют фрагменты кода на языке Kotlin, однако в ответе они не представлены, так как не относятся к переводу.*
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )