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

OSCHINA-MIRROR/mirrors-Crux

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Для 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 )

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

Введение

Crux — это библиотека для извлечения основного HTML-контента, которая анализирует веб-страницы, чтобы определить ключевые элементы статьи. Развернуть Свернуть
Kotlin и 2 других языков
Apache-2.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