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 enString
.order
: Matriz de orden de análisis personalizada. El tipo de la matriz esOrderType
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
- 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
-
Reconstruye el proyecto.
-
PodcastChannelReader
se generará automáticamente. -
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 URLexpiredTimeMillis
: 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.
.