Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar la Job Function

A continuación, comenzaremos a codificar la aplicación de noticias configurando el componente de la job function.

El directorio de la función, en este caso functions/NewsApp, contiene:

  • El archivo principal de la función index.js
  • El archivo de configuración catalyst-config.json
  • Módulos de Node
  • Archivos de dependencias package.json y package-lock.json

Agregaremos código en el archivo index.js. No modificará el código de los archivos de configuración y dependencias.

Como se mencionó en la introducción, la job function realiza dos tareas: hacer las llamadas API a NewsAPI para obtener noticias, y poblar las noticias en Catalyst Data Store. Las llamadas API se realizan utilizando una clave API proporcionada por NewsAPI.

Registrarse en NewsAPI

Antes de codificar la job function, debe registrarse para una suscripción gratuita de desarrollador con NewsAPI y obtener la clave API de la siguiente manera:

  1. Visite https://newsapi.org/register.

  2. Proporcione los detalles requeridos y haga clic en Submit.

register-api-key

Después de completar su registro, NewsAPI le proporcionará una clave API. Debe usarla en su función cron, como se indica después de la sección de código.

api-key

Instalar paquetes para Node.js

La función Cron de Node.js requiere la instalación de dos paquetes: express y axios.

express

Usaremos el framework Express para gestionar las operaciones de enrutamiento que nos permiten obtener y eliminar archivos.

Para instalar express, navegue al directorio de la función (functions/NewsApp) en su terminal y ejecute el siguiente comando:

copy
$
npm install express

Esto instalará el módulo Express y guardará las dependencias.

express

axios

axios es un cliente HTTP basado en promesas que usaremos para obtener datos ejecutando la NewsAPI.

Para instalar axios, navegue al directorio de la función Node (functions/NewsApp) y ejecute el siguiente comando:

copy
$
npm install axios

Esto instalará el módulo.

axios

Puede copiar el código a continuación y pegarlo en index.js ubicado en el directorio functions/NewsApp de su proyecto y guardar el archivo. Puede usar cualquier IDE para trabajar con los archivos de la aplicación.

Nota: Por favor, revise el código proporcionado en esta sección para asegurarse de que lo comprende completamente.
index.js
copy
/**
 * 
 * @param {import("./types/job").JobRequest} jobRequest 
 * @param {import("./types/job").Context} context 
 */
const catalyst = require("zcatalyst-sdk-node");
const axios = require('axios');
const HOST = "https://newsapi.org";
const TABLENAME = [
	"HEADLINES",
	"BUSINESS",
	"ENTERTAINMENT",
	"HEALTH",
	"SCIENCE",
	"SPORTS",
	"TECHNOLOGY",
  ];
  const COUNTRY = "US";
  const APIKEY = "cc30ddcae1684e848f08ed474f6aaf0e";
  const DATASTORE_LOAD = 5;
  const pushNewstoDatastore = async ({ table, rowIds, articles }) => {
	return Promise.all(
	  articles.map(async (article, idx) => {
		const payload = {
		  title: article.title,
		  url: article.url,
		};
		if (rowIds.length === 0) {
		  //insertar la nueva fila
		  return table.insertRow(payload);
		}
		return table.updateRow({ ...payload, ROWID: rowIds[idx] });
	  })
	);
  };
module.exports = async (jobRequest, context) => {
	try{
		console.log('Execution started');
		const catalystApp = catalyst.initialize(context);
		const zcqlAPI = catalystApp.zcql();
		const datastoreAPI = catalystApp.datastore();		
		const metaArr = await Promise.all(
			TABLENAME.map(async (table) => {
			  //construir la ruta de solicitud a newsapi
			  let url = `${HOST}/v2/top-headlines?country=${COUNTRY}&apiKey=${APIKEY}`;
			  if (table !== TABLENAME[0]) {
			   url += "&category=" + table;
			  }
			  const response = await axios({
			   method: "GET",
			   url
			 });
		   let data = response.data;	   
			  //consultar usando zcql para verificar si la fila existe
			  const queryResult = await zcqlAPI.executeZCQLQuery(
				`SELECT ROWID FROM ${table}`
			  );
			  return {
				table_name: table,
				table: datastoreAPI.table(table),
				zcql_response: queryResult,
				articles: data.articles.splice(0, 15),
			  };
			})
		  );
		  //inserción/actualización sincrónica al datastore
		  for (const meta of metaArr) {
			let rowIds = [];
			while (meta.articles.length > 0) {
			  const chunk = meta.articles.splice(0, DATASTORE_LOAD);
			  if (meta.zcql_response.length > 0) {
				rowIds = meta.zcql_response
				  .splice(0, DATASTORE_LOAD)
				  .map((row) => row[meta.table_name].ROWID);
			  }
			  await pushNewstoDatastore({ ...meta, articles: chunk, rowIds });
			}
			console.log(
			  `${meta.table} table ${
				rowIds.length === 0 ? "inserted" : "updated"
			  } with current news'`
			);
		  }
		context.closeWithSuccess(); //fin de la aplicación con éxito
	}catch(err){
		console.log("Error :: "+err);
		context.closeWithFailure(); //fin de la aplicación con error
	};
};

View more

Nota: Después de copiar y pegar este código en su archivo de función, asegúrese de reemplazar el valor de APIKEY en la línea 19 con la clave API que obtuvo de NewsAPI.

La job function está ahora configurada. Discutiremos la arquitectura de la aplicación después de configurar el client.

Última actualización 2026-03-20 21:51:56 +0530 IST

ENLACES RELACIONADOS

Job Scheduling Job Functions