

# Cómo convertir filas de empleos comprobadas en un feed RSS

Convierta filas de empleos comprobadas en un feed RSS 2.0. Dé a cada elemento un identificador estable y el enlace original del empleo. Codifique el texto para que el feed siga siendo válido. Agregue una fecha de publicación solo cuando se conocen la hora de origen y la zona horaria.

RSS significa Really Simple Syndication. Es un formato de documento que los lectores de feeds pueden abrir. RSS se escribe en XML. XML es texto estructurado.

## Use filas que ya comprobó

Un Actor es un programa alojado de recolección de datos. Una Task es un ajuste de entrada guardado. El Actor [Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper) recolecta filas de origen. Usted escribe el feed RSS a partir de filas que ya comprobó. El Actor no escribe este feed por usted.

Indeed es el sitio de empleos del que provienen estas filas. La compilación pública 1.2.14 puede devolver los campos de fila que usa este método. Esos campos son jobId, jobUrl, title, companyName, descriptionText, descriptionStatus, postedAt, postedAtRaw y scrapedAt. jobUrl es la dirección web del empleo. Una dirección web también se llama URL.

Un control de dos filas aceptó identificadores de origen, URL de origen y el texto completo de la descripción. Ese control tenía un límite de dos filas. Una muestra limitada no cubre todos los empleos del sitio. Este método no repara una recolección de Upwork bloqueada. No crea un feed nativo de Indeed.

La [Task pública actual de Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper/examples/indeed-jobs-scraper) se comprobó el 2026-10-13T05:55:51.545104+00:00. Su entrada guardada es:

```json
{"country": "us", "searchTerm": "software engineer", "maxItems": 100, "postedWithinDays": "7", "sortBy": "date", "maxPagesPerSearch": 2, "saveOnlyUniqueItems": true}
```

Use filas que ya comprobó

Use esa entrada solo como punto de partida. Reemplace el término de búsqueda de la muestra cuando recolecte filas. Reemplace también el país o la ubicación. maxItems 100 limita la solicitud. No es un recuento de empleos encontrados. maxPagesPerSearch 2 limita las páginas de una búsqueda. No es la cobertura completa del sitio. saveOnlyUniqueItems true pide a la recolección que conserve elementos únicos. Usted igual debe comprobar los identificadores antes de escribir el feed. Una Task pública no significa que el trabajo del feed sea automático.

La recolección, la comparación de filas y la [revisión de identidad](/es/articles/avisos-duplicados-y-posibles-republicaciones/) vienen antes de este método. Aquí, identidad significa el identificador de origen estable de un aviso. Empiece solo con un conjunto limitado de filas comprobadas. Excluya una fila cuando su identificador falta o sigue en revisión.

## Arme el feed en ocho pasos

1. Defina la muestra y el propósito.

El propósito es dar a un lector de feeds un documento válido de avisos comprobados. Empiece con filas útiles que tengan identificadores conocidos. Conserve con ellas un comprobante de cobertura. Un comprobante de cobertura es una nota breve de qué filas incluye el feed. Excluya los identificadores que faltan. Excluya los identificadores que siguen en revisión.

1. Elija la regla de identidad del elemento.

Para un aviso de Indeed, la clave es el texto indeed: seguido de inmediato por jobId. Un GUID es la cadena de identidad del elemento. GUID significa identificador único global. RSS lo guarda en el elemento guid. Establezca isPermaLink en false. false significa que el GUID no es una dirección web. Conserve el mismo GUID cuando cambia el título. Conserve el mismo GUID cuando cambia la descripción. Un identificador de origen nuevo crea un elemento nuevo del feed según esta regla. Un identificador de origen nuevo no prueba un puesto nuevo del empleador. Use un método aparte cuando necesite emparejar el mismo puesto.

1. Cree un feed RSS 2.0 con un canal.

El elemento raíz es rss, y su version es 2.0. Ponga un channel adentro. Un canal es el grupo principal que contiene el título del feed y sus elementos. Un elemento es un aviso de empleo en el feed. La [especificación RSS](https://www.rssboard.org/rss-specification) exige un title, un link y una description del canal. Dé los tres. Agregue un item por cada fila útil. Dé a ese elemento un título. Dé como enlace la dirección web original del empleo. Dé una descripción breve. La misma especificación exige un título o una descripción en cada elemento. Este método da ambos. Mantenga el enlace del canal accesible para su lector.

1. Escriba el texto con un serializador de XML.

Este paso de escritura se llama serialización. No pegue el texto crudo del empleo en el archivo a mano. Un ampersand o un signo menor que pueden romper el XML. Las [reglas de sintaxis de XML](https://www.w3.org/TR/xml/#syntax) muestran cómo se deben escribir esos caracteres. Un serializador es un programa que escribe texto en una forma XML segura. Conserva letras Unicode, como é. Conserva el texto de consulta en una dirección web. Una cadena de consulta es el texto que va después de un signo de pregunta en una dirección web. Un texto XML seguro no es HTML seguro. HTML es el formato que se usa para dibujar una página web. Un serializador no hace que el HTML pegado sea seguro para mostrarlo. Use un resumen en texto plano en el elemento. Conserve el texto completo del empleo en la página original del empleo. Use descriptionText solo cuando la comprobación de su fila aceptó descriptionStatus. companyName puede quedar en la fila de origen. El elemento del feed no lo exige.

1. Agregue pubDate solo para una hora de publicación confirmada.

pubDate es el nombre de RSS para la fecha de publicación de un elemento. postedAt es opcional, y se interpreta a partir del texto de origen. Un valor postedAt completo no prueba una hora de publicación exacta. Revise postedAtRaw y la evidencia de origen. Agregue pubDate solo cuando la hora de publicación y la zona horaria están confirmadas. Si la hora falta, es relativa o es incierta, queda no disponible. Una hora relativa, como una frase que dice una cantidad de días atrás, no es exacta. La cadena de fecha que sigue es parte de la muestra ficticia original. El [estilo de fecha de RSS](https://www.rssboard.org/rss-specification) se ve así: Mon, 12 Oct 2026 09:30:00 GMT. GMT es el nombre de zona que este estilo usa para esa hora UTC. UTC significa tiempo universal coordinado. Cuando la hora de publicación se desconoce, omita pubDate. Puede nombrar la hora de observación en el resumen del elemento o en el comprobante de cobertura. scrapedAt es la hora de observación. No use scrapedAt como hora de publicación. lastBuildDate significa la hora en que se armó el documento del feed. Agregue lastBuildDate solo cuando registre esa hora de armado por separado. No use la hora de armado para completar una fecha de empleo desconocida.

1. Concilie las filas de origen y los elementos del feed.

Conciliar significa comparar ambas listas y dar cuenta de cada fila. Informe los identificadores conocidos que usó. Informe las filas que excluyó. Informe las filas que siguen sin resolver. Informe las claves duplicadas. Informe la cantidad de elementos sin fecha de publicación. Un feed armado a partir de un conjunto de datos limitado sigue limitado. Un elemento que falta en una muestra posterior no prueba que el empleador haya quitado el empleo. Cómo un lector borra o actualiza elementos es una elección aparte.

1. Analice el feed y compruébelo en tres capas.

Analizar significa leer el documento y confirmar su estructura. Primero, analice el XML. Confirme los elementos obligatorios. Confirme la cantidad de elementos. Confirme que cada GUID es único. Confirme que cada GUID se mantiene igual cuando cambia el texto. Confirme el enlace de cada elemento. Confirme que el texto analizado coincide con el texto de origen. Confirme que cada fecha conserva su significado de origen. Un análisis correcto muestra que la estructura XML es sólida. No prueba todas las reglas de RSS. No prueba que todos los lectores acepten el feed. Segundo, compruebe las reglas de RSS en las que se apoya. Tercero, pruebe el lector que piensa usar. Importar significa abrir el feed en ese lector. Importe un feed ficticio pequeño antes de agregar filas reales. Mantenga esa prueba del lector separada de la prueba del documento.

1. Guarde el feed y las notas que lo explican.

Conserve juntos la nota de cobertura, la nota de fechas y el comprobante de origen. Un comprobante de origen registra qué filas comprobadas usó. Aloje el archivo solo cuando su lector necesite acceso. Alojar significa colocar el archivo donde el lector pueda obtenerlo. Este artículo no publica un feed en vivo. No revela una clave de acceso privada. No programa actualizaciones del feed. No envía alertas. [Seguir empleos no vistos](/es/articles/avisos-de-empleos-nuevos-sin-listados-repetidos/) es una tarea aparte.

## Lea el feed ficticio de dos elementos

El feed de esta sección es ficción original. Enseña las reglas. No es un resultado del Actor. No es prueba de que solo existan dos empleos.

La muestra tiene dos avisos de origen. Sus identificadores de origen son los valores de texto 000101 y 000102. J1 y J2 son solo etiquetas de esas dos filas ficticias. Los GUID son indeed:000101 e indeed:000102. J1 tiene una hora de publicación confirmada: el 12 de octubre de 2026 a las 09:30 UTC. J2 tiene una hora de publicación desconocida, así que su fecha de publicación no está disponible.

| Fila | ID de origen | GUID | Enlace del elemento | Fecha de publicación |
| --- | --- | --- | --- | --- |
| J1 | 000101 | indeed:000101 | https://jobs.example/J1?role=analyst&city=Austin | Mon, 12 Oct 2026 09:30:00 GMT |
| J2 | 000102 | indeed:000102 | https://jobs.example/J2 | No disponible |

J1 tiene el título Café Analyst & SQL. Su descripción es Check values < 10 & explain results. J2 tiene el título Report Analyst. Su descripción es Publication time unavailable. Observed 2026-10-13 05:50 UTC. Esa hora de observación no es una hora de publicación.

El título de J1 prueba Unicode y un ampersand. La descripción de J1 prueba un signo menor que y un ampersand. El enlace de J1 prueba una cadena de consulta. El feed guarda esos caracteres en texto XML seguro.

| Texto de origen | Texto escrito en el feed |
| --- | --- |
| Café Analyst & SQL | Café Analyst &amp; SQL |
| Check values < 10 & explain results. | Check values &lt; 10 &amp; explain results. |
| https://jobs.example/J1?role=analyst&city=Austin | https://jobs.example/J1?role=analyst&amp;city=Austin |

```xml
<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0">
  <channel>
    <title>Fictional checked analyst sample</title>
    <link>https://jobs.example/sample</link>
    <description>Two checked sample rows; source collection was capped.</description>
    <item>
      <title>Café Analyst &amp; SQL</title>
      <link>https://jobs.example/J1?role=analyst&amp;city=Austin</link>
      <description>Check values &lt; 10 &amp; explain results.</description>
      <guid isPermaLink="false">indeed:000101</guid>
      <pubDate>Mon, 12 Oct 2026 09:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Report Analyst</title>
      <link>https://jobs.example/J2</link>
      <description>Publication time unavailable. Observed 2026-10-13 05:50 UTC.</description>
      <guid isPermaLink="false">indeed:000102</guid>
    </item>
  </channel>
</rss>
```

Lea el feed ficticio de dos elementos

J1 corresponde al primer elemento. Su GUID es indeed:000101, y su pubDate es la hora UTC confirmada. J2 corresponde al segundo elemento. Su GUID es indeed:000102. El hueco de fecha es el pubDate que falta en J2. La descripción de J2 nombra solo la hora de observación. No complete ese hueco con la hora en que armó el documento.

Una prueba local del documento analizó este XML. Encontró un channel y dos items. Confirmó el texto obligatorio del channel. Confirmó que los dos GUID son únicos y que isPermaLink es false. Después del análisis, el texto coincidió con el título Unicode, el signo menor que, los ampersands y el enlace de consulta original. La prueba leyó la fecha de publicación de J1. Confirmó que J2 no tiene pubDate. Cambió el título de J1, y el GUID siguió siendo indeed:000101.

Estas son comprobaciones del documento sobre esta muestra ficticia. El análisis del XML muestra una estructura sólida. Las comprobaciones de GUID, enlace, texto y fecha cubren las reglas de RSS usadas aquí. No se hizo una prueba con un lector de feeds. No se hizo una prueba con WordPress. Analice primero su feed ficticio. Después haga una comprobación pequeña de compatibilidad en su propio lector.

## Siguiente acción

Recolecte filas comprobadas con el Actor [Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper) y esta [Task pública de Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper/examples/indeed-jobs-scraper). Analice primero un feed ficticio de dos elementos. Confirme sus GUID, fechas y enlaces de origen antes de importar filas reales a un lector.

## Fuentes y lecturas adicionales

- [Especificación RSS 2.0](https://www.rssboard.org/rss-specification)
- [Sintaxis XML](https://www.w3.org/TR/xml/#syntax)
- [Actor Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper)
- [Task pública de Indeed Jobs Scraper](https://apify.com/chronometrica/indeed-jobs-scraper/examples/indeed-jobs-scraper)
- [Pregunta sobre importación de empleos por API y RSS](https://www.reddit.com/r/webdev/comments/1ewb7wt/api_vs_rss_feeds_for_pulling_job_listings_for_a/)
- [Pregunta sobre el scraper de Indeed](https://www.reddit.com/r/webscraping/comments/1bkjb1q/looking_for_indeed_scraper_easy_free/)