Solicitudes HTTP con wp_remote_get()

Vamos a hacer un bloque dinámico que muestre un listado de contenidos extraídos de un servicio externo. En este caso volveremos a traernos los últimos posts del blog de WordPress.org y en otro ejemplo mostraremos un listado de libros haciendo una solicitud a una API pública externa.

En WordPress para realizar solicitudes HTTP disponemos de la API HTTP. Son un conjunto de funciones que nos permitirán acceder, consular y manipular de forma remota servicios de API de terceros, recursos externos o consultar la propia REST API de WordPress entre otras funcionalidades.

En este tutorial vamos a repasar las distintas funciones que trae esta API para obtener un resultado de recursos perfecto combinándolas entre ellas.

¿Qué podemos hacer con la API HTTP?💡

  • Integración de APIs de terceros para plugin, themes o desarrollos Headless.
  • Obtener datos de un servicio web externo como: Meteorología, resultados deportivos, precio de criptomonedas…
  • Descargar archivos en remoto como imágenes o PDFs.
  • Integración con servicios de almacenamiento en la nube.
  • Actualización de datos actuando directamente sobre la base de datos de WordPress.
  • Sincronización con servicios externos con un CRM como puede ser: Ofertas de empleo, inmuebles, conciertos…

Con la API HTTP de WordPress se simplifica la realización de solicitudes remotas. También nos permite alterar la información que nos devuelve.

Funciones solicitantes:

  • wp_remote_get($url, $args); ➡ Utiliza el método GET para recuperar un recurso incluyendo el contenido principal del cuerpo (body).
  • wp_remote_post($url, $args); ➡ Utiliza el método POST para enviar y guardar datos en la base de datos.
  • wp_remote_head($url, $args); ➡ Es similar a una solicitud GET, pero sin obtener el contenido principal del cuerpo (body).
  • wp_remote_request($url, $args); ➡ Es la función genérica que nos permite realizar todos los métodos de solicitudes HTTP (POST, GET, PUT, DELETE, PATCH, TRACE, OPTIONS, HEAD).

Estas cuatro funciones nos permiten poner dos argumentos ($url, $args(OPCIONAL)). Podemos incluir alguno de los siguientes argumentos para dar instrucciones a la solicitud:



Para que se entiendas mejor, se puede obtener el mismo resultado utilizando una de las funciones específicas o utilizando la función genérica.



Funciones para entender las respuestas:

  • wp_error(); y is_wp_error(); ➡ Se utilizan comúnmente para manejar errores dentro de WordPress y personalizar el manejo de errores para determinadas situaciones.
  • wp_remote_retrieve_response_code(); ➡ Recuperar el código de estado HTTP de la respuesta. Devuelve el código de estado HTTP como un entero.
  • wp_remote_retrieve_response_message(); ➡ Recuperar el mensaje de estado HTTP de la respuesta de una solicitud HTTP. Devuelve el mensaje de estado HTTP como una cadena.
  • wp_remote_retrieve_header(); ➡ Recuperar el valor de un encabezado HTTP específico de la respuesta de una solicitud HTTP. Devuelve el valor del encabezado como una cadena o false si no se encuentra.
  • wp_remote_retrieve_headers(); ➡ Recuperar todos los encabezados HTTP de la respuesta de una solicitud HTTP. Devuelve los encabezados como un array.
  • wp_remote_retrieve_body(); ➡ Recuperar el cuerpo de la respuesta de una solicitud HTTP. Devuelve el cuerpo de la respuesta como una cadena.
  • json_decode(); ➡ Esta función se utiliza para decodificar una cadena JSON y convertirla en un objeto o un array en PHP. Es útil para manipular datos JSON recibidos desde una API o servicio web en PHP.

*IMPORTANTE No todas las APIs son públicas, en ocasiones necesitarás una clave de autenticación para obtener su contenido. En tal caso habrá que meter las credenciales necesarias en las cabeceras (headers).



Empezamos…

Una vez entiendes bien estas funciones, podrás preparar fragmentos de código avanzados controlando al detalle las solicitudes y todo tipo de respuestas obtenidas.

El primer ejercicio hará una llamada a la REST API del blog de WordPress.org, como argumentos le voy a decir que si tarda mas de 10 segundos que se anule la petición y le paso un filtro indicando que debería obtener una respuesta en formato JSON.

Compruebo que la solicitud esta OK y si me devuelve un código 200, seguidamente transformo el contenido del JSON en un formato que pueda manipular con PHP. Utilizando json_decode().

El resultado lo itero con PHP y la función foreach() para recorrer cada uno de los post y obtener su información en este caso el título de cada post que es lo que le estoy indicando.

Todo lo envuelvo en una función que crea un shortcode el cual puedo reutilizar en distintos sitios de mi web y por supuesto no me olvido de ponerle un buffer de salida para que el PHP se ejecute siempre al finalizar la función.



👇Resultado del bloque dinámico de posts

  • Crear plugin cuando functions.php se hace demasiado grande
  • Consejos al elegir ponentes en una WordCamp
  • Traducciones WordPress rápidas y precisas con IA
  • WordPress 6.5.2 – Actualización de seguridad y mantenimiento
  • WordPress 6.5 «Regina»
  • WordPress 6.5 candidata a definitiva 2
  • WordPress 6.5 candidata a definitiva 1
  • Cómo WordPress puede ayudar a ganarte la vida con fibromialgia
  • Usa Git tanto si creas un plugin o tema a medida como si modificas uno preexistente
  • Ser líderes de comunidades: nuestro desafío

Bloque en tiempo real con los títulos de posts

De igual forma, comparto otro ejemplo extrayendo contenido de una API externa de libros. Utilizo prácticamente el mismo código a excepción de la iteración de libros. Lo primero que hay que hacer es examinar el JSON que te devuelve la solicitud y ajustar el código con los campos que necesites. En este caso hay que entrar en «results» y únicamente extraer el «title».

* Esto es distinto en todas las APIs. ¡Por favor! tomate un tiempo para analizar sus respuesta y ajusta bien los datos que vas a extraer. Utiliza una herramienta como Postman para enviar y recibir solicitudes.



👇Resultado del listado de libros en Español

  • Don Quijote
  • Mi Ultimo Adiós
  • El paraíso perdido
  • La Odisea
  • Doctrina Christiana: The first book printed in the Philippines, Manila, 1593.
  • La Divina Comedia
  • Spanish Tales for Beginners
  • Argentina, Legend and History
  • Doña Perfecta
  • Cuentos de Amor de Locura y de Muerte
  • Diccionario Ingles-Español-Tagalog: Con partes de la oracion y pronunciacion figurada
  • El libro de las mil noches y una noche; t. 1
  • A First Spanish Reader
  • El arte de amar
  • Niebla (Nivola)
  • El crimen y el castigo
  • Metamorfóseos o Transformaciones (1 de 4)
  • El árbol de la ciencia: novela
  • Colon en Puerto-Rico
  • An Elementary Spanish Reader
  • El libro de las tierras vírgenes
  • Noli me tángere: Novela Tagala, Edición completa con notas de R. Sempau
  • La isla del tesoro
  • Recuerdos de mi vida (tomo 2 de 2)
  • El Hombre Mediocre: Ensayo de psicologia y moral
  • Cristóbal Colón y el descubrimiento de América, Tomo 2: Historia de la geografía del nuevo continente y de los progresos de la astronomía náutica en los siglos XV y XVI
  • El Filibusterismo (Continuación del Noli me tángere)
  • Segunda parte de la crónica del Perú, que trata del señorio de los Incas Yupanquis y de sus grandes hechos y gobernacion
  • Las cien mejores poesías (lí­ricas) de la lengua castellana
  • La Ilíada
  • Las Fábulas de Esopo, Vol. 01
  • Novelas Cortas

Bloque en tiempo real con los títulos de una API externa de libros

Muchas gracias por llegar hasta el final del artículo, espero que te sirva de ayuda para gestionar solicitudes de APIs externas y consigas hacer desarrollos web muchas mas complejos y profesionales.

Sobre el autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *