2010-12-17 21 views
6

Estoy escribiendo una aplicación que toma datos de una serie de fuentes RSS arbitrarias. Los feeds se sondean de forma asíncrona en segundo plano y se llama a un método cada vez que se agrega un nuevo elemento al feed.Extracción de nuevos elementos de una fuente RSS

Mi problema es identificar los nuevos elementos en el feed. ¿Cuál es la mejor manera de hacerlo? He salido con algunas ideas, pero todas tienen fallas.

Sugerencia: Cada vez que usted sondea, mantener todos los artículos más reciente que la pubDate de el último elemento de la última encuesta Problema : pubDate no es un campo requerido.

Sugerencia: Mantenga un hash del contenido para cada artículo que regrese, y no lo hacen contenido de retorno con el mismo hash Problema: El rápido crece fuera de control en términos de uso de memoria

Respuesta

4

Cómo sobre ambos?

Utilice pub-date en aquellos feeds que sí lo devuelven, y mantenga un hash de los demás. Si la mayoría de los feeds devuelven una fecha de publicación y la cantidad de feeds no llega a los millones, debería estar bien, tanto en rendimiento como en memoria.

+1

Recomendaría un resumen del tema y otro para el cuerpo. Además, algunos feeds tienen guías y otros UUID. – sal

+0

¿Por qué mantener hashes separados para el cuerpo y el sujeto? ¿Eso no solo duplica mis gastos de almacenamiento? – Martin

2

Puede usar PubDate para aquellos canales RSS donde se proporciona. Cuando PubDate no se proporciona y si los elementos duplicados son exactamente iguales, es decir ... cuando no puede encontrar ningún campo para distinguirlos, calcule la suma de comprobación md5 y almacénela para comparar. Utilice el enlace http://sharpertutorials.com/calculate-md5-checksum-file/. De esta forma evitará almacenar todos los archivos de contenido y su comparación. Prácticamente puede purgar los datos de suma de comprobación a menudo en función de la frecuencia del nuevo contenido para evitar el problema de memoria. Si es posible, mantenga múltiples hash para las diferentes fuentes. Si publica los números reales, podemos tener una solución más realista.

Cuestiones relacionadas