El Arsenal de Android – RSS

KtRssReader es una biblioteca de Kotlin para analizar fuentes RSS en Android.

  • Admite etiquetas estándar RSS 2.0, iTunes y Google Play
  • API fácil de usar
  • Recupera el feed por ti
  • Tiempo de validez de la caché de la base de datos y la caché personalizada
  • Personaliza los datos de salida con anotaciones

Descargar

Primero, puede agregar este repositorio a la raíz de su proyecto build.gradle archivo bajo el allprojects.

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

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

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

Si desea personalizar el formato de datos, debe agregar estas dependencias.

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 entrar en el uso básico de la API, hablemos de los modelos de datos en KtRssReader. KtRssReader proporciona 4 plantillas personalizadas y clases de anotación para obtener los diferentes tipos de etiquetas que necesita.

Formato estándar RSS 2.0

RssStandardChannelData / RssStandardChannel: Para obtener etiquetas y valores del estándar RSS 2.0.

Formato de podcast de iTunes

ITunesChannelData / ITunesChannel: Para obtener etiquetas de iTunes de una fuente.

Formato de podcast de Google Play

GoogleChannelData / GoogleChannel: Para obtener etiquetas de Google Play.

Datos de mezcla automática

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

Las primeras etiquetas que verá son etiquetas RSS 2.0 estándar, si RSS 2.0 no tiene valores utilizables, el analizador buscará etiquetas de iTunes como fuente alternativa. Entonces, si las etiquetas de iTunes tampoco tienen valores utilizables, el analizador eventualmente buscará las etiquetas de Google Play como una segunda fuente alternativa. Por ejemplo, tenemos <image> etiqueta en la fuente RSS. Nos gustaría encontrar valores utilizables de la imagen. Luego, el analizador buscará valores en el orden de <image>, <itunes:image>, es <googleplay:image>. Para fusionar las etiquetas, AutoMixChannelData fusionará automáticamente datos basados ​​en nombres de etiquetas sin prefijos de plataforma. Vea la tabla de asignación de etiquetas aquí.

En breve, AutoMixChannelData es AutoMixChannel puede proporcionarle el conjunto de unión de todas las etiquetas y valores de todos los formatos.

Datos personalizados

En KtRssReader, proporcionamos anotaciones para permitirle definir plantillas personalizadas.

  • No olvides hacer esto reconstruir el proyecto después de definir clases de datos personalizadas con anotaciones.
  • Recuerda, cada clase de datos personalizados es necesaria para la implementación Serializable.

@RssTag

Parámetros:

  • name: El nombre de la etiqueta en String.
  • order: Matriz de orden de análisis personalizada. El tipo de la matriz es OrderType enum. Hay 3 tipos disponibles, RSS_STANDARD, ITUNES, GOOGLE. La matriz de orden predeterminada es [OrderType.RSS_STANDARD, OrderType.ITUNES, OrderType.GOOGLE]. Mientras analiza la fuente RSS, el analizador seguirá el orden para encontrar el valor disponible para la propiedad. Tome la matriz de orden predeterminada como ejemplo, el analizador verificará primero el valor de la etiqueta estándar RSS, si tiene un valor, no verificará la etiqueta de iTunes y pondrá el valor de la etiqueta estándar RSS en la plantilla personalizada. De lo contrario, seguirá encontrando un valor disponible.

Ejemplo de clase:

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

Ejemplo de datos:

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

@RssAttribute

Parámetros:

  • name: El nombre del atributo.

Ejemplo de clase:

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

Ejemplo de datos:

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

El valor de categoryTitle Sara "the title".

@RssValue

Obtenga el valor dentro de una etiqueta.

Ejemplo de clase:

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

Ejemplo de datos:

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

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

@RssRawData

Una anotación que le permite analizar las etiquetas con datos sin procesar específicos en la fuente RSS.

Parámetros:

  • rawTags: es una matriz que contiene los nombres de las etiquetas que desea analizar y el analizador seguirá el orden de la matriz para encontrar etiquetas candidatas.

Ejemplo de clase:

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

Ejemplo de datos:

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

El resultado del análisis de author, en este caso, será "itunes author" porque la etiqueta <googleplay:author> no existe en los datos. Luego, el analizador usa la etiqueta de respaldo <itunes:author> definido en @RssRawData.

Generación del código del lector

Después de definir sus datos personalizados, KtRssReader generará el código del lector por usted. Por ejemplo, si definió una clase de datos llamada PodcastChannel que tiene los datos del <channel> etiqueta, el KtRssReader generará automáticamente PodcastChannelReader después de reconstruir el proyecto.

¿Cómo usar KtRssReader?

Uso básico

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

Esta es la forma más sencilla de utilizarlo. Como puedes ver, Reader.read() acepta 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 de lectura no debe ejecutarse en el hilo principal o generará una excepción para advertir a los usuarios de lib.

Con el flujo

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

Con corrutinas

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

Con datos personalizados

  1. Defina sus propias clases de datos personalizadas.
@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 se menciona 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 cache

Limpia todo el caché de la base de datos.

Config

Configuración global

Para permitir que KtRssReader funcione con la base de datos, debe configurar el contexto de la aplicación en su aplicación.

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

Configuración del lector

val result: ITunesChannelData = Reader.read<ITunesChannelData>(rssSource) {
    charset = Charsets.UTF_8
    useCache = false
    expiredTimeMillis = 600000L
}
  • charset: Especifica un juego de caracteres de codificación; si no se establece, utilizará el juego de caracteres de la fuente RSS.
  • useCache: Extrae datos de la caché o del servidor remoto. El defecto es cierto.
  • flushCache: Borra la caché específica a través de una URL
  • expiredTimeMillis: El tiempo de caducidad de la caché en milisegundos.

Campeones

La aplicación de muestra está en /app carpeta. ¡Echale un vistazo!

Contribución

Las contribuciones siempre son bienvenidas. Si tiene alguna idea o sugerencia, puede contactarnos o crear un problema de GitHub. Nos pondremos en contacto 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.

.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

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