--- title: "Configurar la Job Function" url: https://docs.catalyst.zoho.com/es/tutorials/newsapp/java/configure-job-function/ description: "Construye una aplicación web de noticias que obtiene noticias de un servicio de terceros con Catalyst Cron, y una Job Function y función Advanced I/O en Java." last_updated: 2026-11-04T10:10:44Z service: All Services type: tutorial related_links: - name: "Job Scheduling" url: /es/job-scheduling/getting-started/introduction/ - name: "Job Functions" url: /es/serverless/help/functions/job-functions/ --- # Configurar la Job Function A continuación, comenzaremos a codificar la aplicación de noticias configurando el componente de job function. El directorio de la función, en este caso `functions/NewsFetch`, contiene: * El archivo principal de función `FetchNews.java` * El archivo de configuración `catalyst-config.json` * Archivos de biblioteca Java en la carpeta `lib` * Archivos de dependencias `.classpath` y `.project` Agregaremos código en el archivo `FetchNews.java`. No modificarás el código de los archivos de configuración y dependencias. Como se mencionó en la [introducción](https://docs.catalyst.zoho.com/es/tutorials/newsapp/java/introduction/), la job function realiza dos tareas: hacer las llamadas API a la [NewsAPI](https://newsapi.org/) para obtener noticias, y poblar las noticias en el Data Store de Catalyst. Las llamadas API se realizan usando una clave API proporcionada por NewsAPI. ### Registrarse en NewsAPI Antes de codificar la job function, debes registrarte para una suscripción gratuita de desarrollador con NewsAPI y obtener la clave API de la siguiente manera: 1. Visita [https://newsapi.org/register](https://newsapi.org/register). 2. Proporciona los detalles requeridos y haz clic en **Submit**. ![register-api-key](https://catalyst-docs-development.zohostratus.in/images/tutorials/cron/register-api-key.webp) Después de completar tu registro, NewsAPI te proporcionará una clave API. Debes usarla en tu función cron, como se indica después de la sección de código. ![api-key](https://catalyst-docs-development.zohostratus.in/images/tutorials/cron/api-key.webp) ### Agregar código de la función Puedes copiar el código a continuación y pegarlo en `FetchNews.java` ubicado en el directorio `functions/NewsFetch` de tu proyecto y guardar el archivo. Puedes usar cualquier IDE para trabajar con los archivos de la aplicación. > **Nota**: Por favor revisa el código proporcionado en esta sección para asegurarte de comprenderlo completamente. **FetchNews.java** ```java import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import com.catalyst.Context; import com.catalyst.job.JOB_STATUS; import com.catalyst.job.JobRequest; import com.catalyst.job.CatalystJobHandler; import com.zc.common.ZCProject; import com.zc.component.object.ZCObject; import com.zc.component.object.ZCRowObject; import com.zc.component.object.ZCTable; import com.zc.component.zcql.ZCQL; import org.json.JSONArray; import org.json.JSONObject; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class FetchNews implements CatalystJobHandler { private static final Logger LOGGER = Logger.getLogger(FetchNews.class.getName()); // Nombres de tablas para cada categoría static String[] TABLENAME = { "HEADLINES", "BUSINESS", "ENTERTAINMENT", "HEALTH", "SCIENCE", "SPORTS", "TECHNOLOGY" }; static String COUNTRY = "US"; static String APIKEY = "cc30ddcae1684e848f08ed474f6aaf0e"; // Proporciona la clave API que obtuviste de NewsAPI dentro de las comillas @Override public JOB_STATUS handleJobExecute(JobRequest request, Context context) throws Exception { try { ZCProject.initProject(); OkHttpClient client = new OkHttpClient(); // Obtener noticias para cada categoría for (int i = 0; i < TABLENAME.length; i++) { HttpUrl.Builder urlBuilder = HttpUrl.parse("http://newsapi.org/v2/top-headlines").newBuilder(); urlBuilder.addQueryParameter("country", COUNTRY); urlBuilder.addQueryParameter("apiKey", APIKEY); if (!TABLENAME[i].equals("HEADLINES")) { urlBuilder.addQueryParameter("category", TABLENAME[i]); } String url = urlBuilder.build().toString(); Request requests = new Request.Builder().url(url).build(); Response response = client.newCall(requests).execute(); if (response.code() == 200) { JSONObject responseObject = new JSONObject(response.body().string()); JSONArray responseArray = responseObject.getJSONArray("articles"); pushNewstoDatastore(responseArray, i); } else { LOGGER.log(Level.SEVERE, "Error fetching data from News API for " + TABLENAME[i]); } LOGGER.log(Level.INFO, "News updated for " + TABLENAME[i]); } } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception in Job Function", e); return JOB_STATUS.FAILURE; } return JOB_STATUS.SUCCESS; } private void pushNewstoDatastore(JSONArray responseArray, int length) throws Exception { String action = null; String query = "select ROWID from " + TABLENAME[length]; ArrayList<ZCRowObject> rowList = ZCQL.getInstance().executeQuery(query); ZCObject object = ZCObject.getInstance(); ZCTable table = object.getTable(TABLENAME[length]); // Recorrer los artículos disponibles de forma segura (máximo 15) for (int i = 0; i < responseArray.length() && i < 15; i++) { JSONObject response = responseArray.getJSONObject(i); String title = response.optString("title", "No Title").replaceAll("'", ""); String url = response.optString("url", "No URL"); ZCRowObject row = ZCRowObject.getInstance(); row.set("title", title); row.set("url", url); if (rowList.size() > i) { String rowid = rowList.get(i).get("ROWID").toString(); Long ID = Long.parseLong(rowid); row.set("ROWID", ID); String upd = "Update " + TABLENAME[length] + " set title = '" + title + "', url = '" + url + "' where ROWID = " + rowid; ZCQL.getInstance().executeQuery(upd); action = "Update"; } else { table.insertRow(row); action = "Insert"; } } if ("Update".equals(action)) { LOGGER.log(Level.INFO, TABLENAME[length] + " table updated with latest news"); } else if ("Insert".equals(action)) { LOGGER.log(Level.INFO, TABLENAME[length] + " table inserted with new news"); } } } ``` > **Nota**: Después de copiar y pegar este código en tu archivo de función, asegúrate de reemplazar el valor de `APIKEY` en la línea **26** con la clave API que obtuviste de NewsAPI. La job function ahora está configurada. Discutiremos la arquitectura de la aplicación después de configurar el client.