Android Arsenal – RSS

KtRssReader es la biblioteca de Kotlin para el análisis de fuentes RSS en Android.

  • Admite RSS 2.0, iTunes y Google Play
  • API fácil de usar
  • Las cargas se alimentan por ti
  • Tiempo de caché de base de datos válido y caché personalizado
  • Ajusta los datos de salida mediante anotaciones.

Descargar

Primero puede agregar este repositorio al directorio raíz de su proyecto build.gradle archivar bajo allprojects.

allprojects {
  repositories {
  ...
  maven { url 'https://jitpack.io' }
  }
}

Luego agregue esta dependencia a build.gradle archivo en el directorio de la aplicación.

dependencies {
    implementation "com.github.ivanisidrowu.KtRssReader:ktRssReader:v2.0.0"
}

Debe agregar estas dependencias para personalizar el formato de datos.

apply plugin: 'kotlin-kapt'

dependencies {
    implementation "com.github.ivanisidrowu.KtRssReader:ktRssReader:v2.0.0"
    implementation "com.github.ivanisidrowu.KtRssReader:annotation:v2.0.0"
    kapt "com.github.ivanisidrowu.KtRssReader:processor:v2.0.0"
}

Modelos de datos

Antes de comenzar con el uso básico de la API, hablemos de los modelos de datos en KtRssReader. KtRssReader proporciona 4 clases de modelos y notas personalizadas para obtener los diferentes tipos de etiquetas que necesita.

Formato estándar RSS 2.0

RssStandardChannelData / RssStandardChannel: Obtenga etiquetas y valores de RSS estándar 2.0.

Formato de podcast de iTunes

ITunesChannelData / ITunesChannel: Obtener iTunes etiquetas de la fuente.

Formato de podcast de Google Play

GoogleChannelData / GoogleChannel: Obtener Google Play marcas.

Datos de mezcla automática

AutoMixChannelData / AutoMixChannel: Combina etiquetas automáticamente en el siguiente orden: RSS 2.0 -> iTunes -> Google Play.

Las primeras etiquetas que examina son etiquetas RSS 2.0 estándar, si RSS 2.0 no tiene valores utilizables, el analizador buscará etiquetas de iTunes como fuente alternativa. Luego, si incluso las etiquetas de iTunes no tienen valores utilizables, el analizador eventualmente buscará etiquetas de Google Play como una segunda fuente alternativa. Por ejemplo, tenemos <image> etiqueta en la fuente RSS. Nos gustaría encontrar valores de imagen utilizables. Por tanto, el analizador buscará valores en orden <image>, <itunes:image>, un <googleplay:image>. Para fusionar marcas AutoMixChannelData fusiona automáticamente los datos de acuerdo con sus nombres de etiquetas sin prefijos de plataforma. Mostrar la tabla de asignación de etiquetas aquí.

En una palabra, AutoMixChannelData y AutoMixChannel puede proporcionarle un conjunto de uniones de todas las etiquetas y valores de todos los formatos.

Datos propios

En KtRssReader proporcionamos anotaciones que te permiten definir tus propios modelos.

  • No lo olvide restaurar proyecto después de definir sus propias clases de datos con anotaciones.
  • Recuerda, cada clase de datos personalizados es necesaria para la implementación Serializable.

@RssTag

Parámetros:

  • name: Marca en String.
  • order: Campo de orden de análisis personalizado. El tipo en el campo es OrderType lista Hay 3 tipos, RSS_STANDARD, ITUNES, GOOGLE. El campo de orden predeterminado es [OrderType.RSS_STANDARD, OrderType.ITUNES, OrderType.GOOGLE]. Al analizar una fuente RSS, el analizador seguirá el orden para determinar el valor disponible para la propiedad. Como ejemplo, tome el campo de orden predeterminado, el analizador primero verificará el valor de la etiqueta RSS estándar, si tiene un valor, no verificará la etiqueta de iTunes y agregará el valor de la etiqueta RSS estándar a su propio modelo. De lo contrario, seguirá buscando el valor disponible.

Clase de ejemplo:

@RssTag(name = "channel")
data class MyChannel(
    val title: String?,
    @RssTag(name = "author", order = [OrderType.ITUNES, OrderType.RSS_STANDARD])
    val name: String?,
): Serializable

Datos de ejemplo:

<channel>
    <title>the title</title>
    <author>the author</author>
    <itunes:author>itunes author</itunes:author>
</channel>

@RssAttribute

Parámetros:

  • name: Nombre del Atributo.

Clase de ejemplo:

@RssTag(name = "category")
data class Category(
    @RssAttribute(name = "title")
    val categoryTitle: String?,
): Serializable

Datos de ejemplo:

<category title = "the title">this is a category</category>

Valor categoryTitle estarán "the title".

@RssValue

Obtenga valor dentro de la marca.

Clase de ejemplo:

@RssTag(name = "category")
data class Category(
    @RssValue
    val value: String?,
    @RssAttribute
    val title: String?,
): Serializable

Datos de ejemplo:

<category title = "the title">this is a category</category>

En este caso, la propiedad value la clase de datos será "this is a category".

@RssRawData

Una anotación que le permite analizar etiquetas con datos brutos específicos en una fuente RSS.

Parámetros:

  • rawTags: este es un campo que contiene los nombres de las etiquetas que le gustaría analizar, y el analizador seguirá el orden de los campos para encontrar etiquetas candidatas.

Clase de ejemplo:

@RssTag(name = "channel")
data class RawRssData(
    @RssRawData(rawTags = ["googleplay:author", "itunes:author"])
    val author: String?,
    val title: String?,
): Serializable

Datos de ejemplo:

<channel>
    <itunes:author>itunes author</itunes:author>
    <titile>title</title>
</channel>

Resultado del análisis de archivos author, en este caso "itunes author" porque la marca <googleplay:author> no existe en los datos. Por lo tanto, el analizador usa una etiqueta de respaldo <itunes:author> definido en @RssRawData.

Generación de código de lector

Después de definir sus propios datos, KtRssReader generará un código de lector para usted. Por ejemplo, si definí una clase de datos llamada PodcastChannel que tiene datos sobre <channel> etiqueta, KtRssReader genera automáticamente PodcastChannelReader después de la reconstrucción del proyecto.

¿Cómo usar KtRssReader?

Uso básico

val result: RssStandardChannelData = Reader.read<RssStandardChannelData>(rssSource)

Ésta es la forma más sencilla de utilizar. Como puedes ver, Reader.read() toma un tipo genérico llamado RssStandardChannelData. También puede utilizar alternativas como ITunesChannelData o AutoMixChannelData depende de ti lo que necesitas. Se pueden encontrar clases alternativas en Channels.kt. El método del lector no debe realizarse en el hilo principal, de lo contrario, lanzará una excepción para advertir al usuario de la biblioteca.

S Flujo

Reader.flowRead<AutoMixChannelData>(rssSource)
    .flowOn(Dispatchers.IO)
    .collect { data ->
        Log.d("KtRssReader", data)
    }

S Coroutines

coroutineScope.launch(Dispatchers.IO) {
    val result = Reader.coRead<GoogleChannelData>(rssSource)
    Log.d("KtRssReader", result)
}

Con tus propios datos

  1. Defina sus propias clases de datos.
@RssTag(name = "channel")
data class PodcastChannel(
    val title: String?,
    @RssTag(name = "author", order = [OrderType.ITUNES, OrderType.RSS_STANDARD])
    val podcastAuthor: String?,
): Serializable
  1. Reconstruye el proyecto.

  2. PodcastChannelReader se generará automáticamente.

  3. Utilizar PodcastChannelReader como mencionamos en Uso básico.

val result: PodcastChannel = PodcastChannelReader.read(rssSource)

// Flow
PodcastChannelReader.flowRead(rssSource)
    .flowOn(Dispatchers.IO)
    .collect { data ->
        Log.d("KtRssReader", data)
    }

// Coroutines
val coResult: PodcastChannel = PodcastChannelReader.coRead(rss)

Limpiar la caché

Borre todos los cachés de la base de datos.

Configuración

Configuración global

Si desea que KtRssReader funcione con una base de datos, debe establecer el contexto de la aplicación en su aplicación.

class MyApplication : Application() {
    override fun onCreate() {
        readerGlobalConfig {
            setApplicationContext(this@MyApplication)
            enableLog = true
        }
    }
}
  • setApplicationContext(): Contexto de la aplicación.
  • enableLog: Si está habilitado, el registro de depuración se muestra en la consola.

Configuración del lector

val result: ITunesChannelData = Reader.read<ITunesChannelData>(rssSource) {
    charset = Charsets.UTF_8
    useCache = false
    expiredTimeMillis = 600000L
}
  • charset: Especifique la codificación del juego de caracteres si no está configurado para usar el juego de caracteres de la fuente RSS.
  • useCache: Recupera datos de la caché o del servidor remoto. La configuración predeterminada es verdadera.
  • flushCache: Borra un caché específico por URL.
  • expiredTimeMillis: Tiempo de caché agotado en milisegundos.

Muestras

La aplicación de muestra está en /app carpeta. ¡Mira eso!

Contribución

Las contribuciones siempre son bienvenidas. Si tiene alguna idea o sugerencia, puede contactarnos o crear un problema de Github. Nos comunicaremos con usted lo antes posible.

Licencia

Copyright 2020 Feng Hsien Hsu, Siao Syuan Yang, Wei-Qi Wang, Ya-Han Tsai, Yu Hao Wu

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *