¿Cómo marcar una foto de gato como favorita usando CatAPI?
Marcando una imagen de gato como favorita, podemos desarrollar una aplicación más interactiva y personalizada utilizando CatAPI. En esta guía, exploraremos cómo implementar un método POST para realizar esta acción, aprovechando una API que permite a los desarrolladores trabajar fácilmente con imágenes de gatos.
¿Qué necesitas saber antes de empezar?
Antes de sumergirnos en el código, es esencial entender los elementos básicos necesarios para marcar una foto de gato como favorita mediante CatAPI:
API Key: Es una clave única que se utiliza para autorizar las peticiones a la API. Se debe obtener al registrarse en el servicio.
Documentación de CatAPI: Es fundamental revisar la documentación para entender cómo se estructura una petición POST para marcar una imagen como favorita.
¿Cómo hacer una petición POST en CatAPI?
Para realizar una petición POST y marcar una imagen como favorita, debes seguir estos pasos:
Abrir 'Postman': Esta herramienta facilita la creación y prueba de peticiones HTTP.
Crear Nueva Petición POST: Dirigirla al endpoint de favoritos en CatAPI.
Añadir Cabeceras:
Content-Type: Debe ser application/json o application/xml según la documentación.
x-api-key: Incluye tu API Key para la autorización.
Establecer el Body de la Petición: Aquí es donde especificas el image_id de la foto de gato que deseas marcar como favorita.
Ejemplo de código en Java
A continuación se muestra cómo implementar la lógica en un proyecto Java para realizar la petición:
try{// Establecer la URL de la APIURL url =newURL("https://api.thecatapi.com/v1/favourites");// Abrir conexión y configurar la cabeceraHttpURLConnection con =(HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type","application/json"); con.setRequestProperty("x-api-key", gato.getApiKey());// Cuerpo de la peticiónString jsonInputString ="{\"image_id\": \""+ gato.getImageId()+"\"}";// Enviar la petición con.setDoOutput(true);try(OutputStream os = con.getOutputStream()){byte[] input = jsonInputString.getBytes("utf-8"); os.write(input,0, input.length);}// Leer la respuestatry(BufferedReader br =newBufferedReader(newInputStreamReader(con.getInputStream(),"utf-8"))){StringBuilder response =newStringBuilder();String responseLine =null;while((responseLine = br.readLine())!=null){ response.append(responseLine.trim());}System.out.println(response.toString());}// Manejo de excepciones}catch(IOException e){ e.printStackTrace();}
¿Cómo verificar si la operación fue exitosa?
Una vez enviada la petición, Postman o tu aplicación en Java debería darte una respuesta indicando que la imagen se ha guardado como favorita correctamente. Generalmente, recibirás un mensaje de confirmación con un status de éxito.
Motivación para seguir adelante
Desarrollar capacidades para interactuar con APIs como CatAPI abre un sinfín de posibilidades para proyectos personales y profesionales, desde aplicaciones móviles hasta sistemas personalizados de gestión de imágenes. No dejes de explorar, probar y mejorar tus habilidades de programación. ¡El aprendizaje continuo te llevará lejos en el mundo del desarrollo!
Error alert!!!
//Codigo del profesor a reemplazar :
//DE ::
image = ImageIO.read(url);
ImageIcon fondoGato = new ImageIcon(image);
//A ::
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.addRequestProperty("User-Agent", "");
BufferedImage bufferedImage = ImageIO.read(httpcon.getInputStream());
ImageIcon fondoGato = new ImageIcon(bufferedImage);
Por temas de seguridad La Api de gatitos no permite la descarga con una simple url, era necesario otro mecanismo.
Gracias.
Gracias
El profe ocultando el apiKey, pero en los videos anteriores se ve claramente XD
JAJAJAJA en repo de git tambien esta
++The Create (MediaType, String) method of the RequestBody type is deprecated.++
El metodo Tcreate(MediaType, String) del tipo RequestBody está en obsoleto o en desuso.
Se pueden reemplazar las siguientes lineas:
MediaType mediaType =MediaType.parse("application/json");RequestBody body =RequestBody.create(mediaType,"{\n\t\"image_id\":\""+gato.getId()+"\"\n}");
por está linea y eliminar la falla de seguridad
RequestBody body =RequestBody.create("{\n\t\"image_id\": \""+gato.getId()+"\"\n}",null);
Eliminarias la alerta Warnings y el aviso de deprecated. (Y)
Un consejo que tal vez llegue un poco tarde. Pueden evitar el tener que cortar los corchetes del JSON si en vez de convertir a la clase Gatos, convierten la respuesta de la API a un arreglo de esta misma clase de la siguiente forma:
//Cortando los corchetes (esto lo comentamos o lo borramos por que ya no se ocupara)//elJson = elJson.substring(1, elJson.length());//elJson = elJson.substring(0, elJson.length()-1);//Antes esto estaba asi// Gatos gatos = gson.fromJson(elJson, Gatos[].class);/*
Lo unico que hice fue agregar los corchetes a la parte que decia Gatos.class
de esta forma haces que la libreria Gson espere un array de esa clase y no solo un objeto
finalmente habras notado que puse [0] al final de esta linea, eso es para tomar el 1er elemento del array
*/Gatos gatos = gson.fromJson(elJson,Gatos[].class)[0];
Interesante. Buen aporte. Toma tu like.
Gracias, buen aporte!
Listo! Genial :)
 y configura en el header el api-key necesario.
Hubiera sido bueno que explicaras como lidiar con los errores, para que la app no se cierre siempre que hay un error.
en postman me funciona pero en el codigo no hace nada a alguien le a pasado igual ?:
a mi postman me envió este código y no capturaba el id_gato
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create
(mediaType, "{\r\n "image_id":""+ gato.getId() + "\r\n}")
Pero usé el tuyo y si jaló,
lo que cambia es el paramentro de {\n \t} a lo mejor el mio es el que te funcione a ti
queria hacer una funcion para ver todos los gatos favoritos
y todo esta bien hasta la parte de pasar el json a la clase gatos, porque al ser tooodos los favoritos y no unicamente un objeto gato no se puede convertir, intente ver si habia una manera de mochar el json de manera automatica para que pudiera meterlo en uin arraylist pero no hay a menos que use filereader pero siento que seria demasiado para esto a menos q no haya ya d otra, espero con muchas ansias su respuiesta owo
Feliz, porque hasta ahora, todo corre, todo compila, sin errores, y la verdad, cuando había un bug, toca investigar, lo bueno es que la comunidad de java apoya mucho mediante foros en línea, entre diferentes aportes y usos de librerías, justo estaba realizando pruebas con Gson y con ObjectMapper, son similares
Pesima explicacion isque tapanado esa clave perdimos mas explicacion
Quien sabe si santiago leera estos comentarios lo mas probable es que no pero de serlo asi , solo tomarse los comentarios a forma reflexiva y en futuros cursos mejorar la manera de enseñar.
Creo que ya no funciona la API para marcar favorito, cuando envio la peticion en Postman me sale error 404:
{"message":"404 - please consult the documentation for correct url to call. https://docs.thecatapi.com/"}
estas construyendo mal lo de postman pero igual no esta guardado en favoritos. solo queda el que le añades mediante posmant.
me aparecía el mismo error, se arregló creando una nueva collection y desde ahí una nueva request con los datos genera las respuestas bien...
En postman puedes tener variables de entorno para no estar copiando y pegando todo el tiempo el ApiKey o Tokens ...