1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Crux

Клонировать/Скачать
README.md 6.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 03:52 6321cf0

Для Android) Его модульная архитектура делает его более чистым и лаконичным по сравнению с другими библиотеками, не оптимизированными специально для Android.

Плагины по умолчанию

HtmlMetadataPlugin

Извлекает заголовки, изображения баннеров и другие метаданные с любой веб-страницы.

— Поддержка большего количества форматов метаданных: OpenGraph, Twitter Cards, Schema.org.

AmpPlugin

Переписывает URL AMP-страницы на её канонический (оригинальный) URL.

GoogleStaticRedirectorPlugin

Переписывает URL, созданные службой перенаправления Google, на их канонические (оригинальные) URL.

FacebookStaticRedirectorPlugin

Переписывает URL, созданные службой перенаправления Facebook, на их канонические (оригинальные) URL.

Дополнительные плагины

TrackingParameterRemover

Удаляет параметры URL, обычно используемые поставщиками аналитики для отслеживания поведения пользователей в интернете. Этот плагин является необязательным, поскольку он может нарушить работу некоторых неправильно настроенных URL-адресов и привести к тому, что они будут возвращать неправильный контент.

Создание собственного плагина

ArticleExtractorPlugin

Начиная с версии 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 по умолчанию.

CustomerNumberExtractorPlugin

В качестве примера можно написать собственный плагин для извлечения определённых полей из 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Crux.git
git@api.gitlife.ru:oschina-mirror/mirrors-Crux.git
oschina-mirror
mirrors-Crux
mirrors-Crux
main