Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Cómo realizar una petición REST e interpretar sus resultados

5/19
Recursos

Utilizando el comando ‘curl’ dentro de nuestra terminal podemos realizar peticiones a cualquier sitio web, por ejemplo una API como la de xkcd.

curl https://xkcd.com/info.0.json

El anterior comando nos regresa información del API, pero de manera poco legible. para poder verlo de manera más ordenada podemos usar el siguiente comando:

curl https://xkcd.com/info.0.json | jq

Aportes 107

Preguntas 20

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me estresa mucho ver el código en php.

Les dejo unas instrucciones si quieren usar Javascript

  1. En una carpeta vacia ejecuta en terminal npm init --yes
  2. Ejecuta npm i axios
  3. En un archivo llamado index.js copia el siguiente código
const axios = require('axios')

const url = 'https://xkcd.com/info.0.json'

axios.get(url)
  .then(res => console.log(res.data))
  .catch(err => console.log(err))

Respuesta:

{
  "month": "12",
  "num": 2238,
  "link": "",
  "year": "2019",
  "news": "",
  "safe_title": "Flu Shot",
  "transcript": "",
  "alt": "\"Wait, how often are you getting bitten by snakes? And why are you boiling water?\" \"Dunno, the CDC people keep showing up with complicated questions about the 'history of the property' and 'possible curses' but I kinda tune them out. At least one of them offered me the flu shot.\"",
  "img": "https://imgs.xkcd.com/comics/flu_shot.png",
  "title": "Flu Shot",
  "day": "6"
}

Ejemplo implementado en python

from urllib.request import urlopen
import json

base_url = "https://xkcd.com/info.0.json"

# To convert bytes in text
data = urlopen(base_url).read().decode('UTF-8')

# json.loads to decode in text
data_json_obj = json.loads(data)

print(data_json_obj["img"])

Es interesante aprender a utilizar la herramienta aunque hay otras como postman que es mas sencillo.

Para usar jq instalémoslo mediante
sudo apt-get update
sudo apt-get install jq

Una alternativa a cUrl es HTTPie el cual como valor agregado es sencillo de user, muestra los headers de la respuesta y ya aplica formato a la respuesta como lo hace jq sin necesidad de instalar un modulo adicional. Recomendada al 100% pues es muy usada en la industria.

Utilicen postman para realizar peticiones https://www.getpostman.com/products

En python tambien se puede realizar las mismas peticionoes get y post a un servidor que las acepte usando la libreria requests
.
por ejemplo hay un página que tiene un api que nos permite realizarles peticiones con todos los verbos http (http:/httpbin.org)
.
un ejemplo de esta página con un código python sería:

from requests import get, post

if __name__ == "__main__":

    url = "http://httpbin.org/get"

    data = {
        "nombre":"tu_nombre",
        "apellido":"tu_apellido"
    } 

    response = get(url)
    
    #respuesta del servidor a la peticion get
    print("contenido de la respuesta del servidor:\n")
    print(response.text)
    
    #trabajar con la respuesta json del servidor
    json_response = response.json()
    print("valor de la llave origin")
    print(json_response['origin'])

    #usar metodo post y enviarle parametros dentro de los headers
    url = "http://httpbin.org/post"
    response = post(url, headers=data)

    #respuesta del servidor donde vemos en donde se envian los datos enviados con el metodo post
    print(response.text)

Para usar el comando jq en

curl https://xkcd.com/info.0.json | jq

Es necesario que instales jq

https://stedolan.github.io/jq/download/

Para instalar php en ubuntu se debe ingresar el siguiente comando:

sudo apt-get install php

y para verificar la version instalada:

php -v

En java:

public class Main {
    public static void main(String[] args) {
			 Unirest.setTimeouts(0, 0);
        try {
            HttpResponse<String> stringHttpResponse = Unirest.get("https://xkcd.com/info.0.json").asString();
            System.out.println(stringHttpResponse.getBody());
        } catch (UnirestException e) {
            e.printStackTrace();
        }
	}
}

dependencias maven:

			<dependency>
            <groupId>com.mashape.unirest</groupId>
            <artifactId>unirest-java</artifactId>
            <version>1.4.9</version>
        </dependency>

Este curso debería llamarse API REST con PHP

Ejemplo en Go

package main

//version of get using Golang - Platzi (API REST course)

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"time"
)

func main() {
	url := "https://xkcd.com/info.0.json"
	client := http.Client{
		Timeout: time.Second * 2, // Maximum of 2 secs
	}
	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("User-Agent", "spacecount-tutorial")

	res, getErr := client.Do(req)
	if getErr != nil {
		log.Fatal(getErr)
	}
	body, readErr := ioutil.ReadAll(res.Body)
	if readErr != nil {
		log.Fatal(readErr)
	}
	obj := make(map[string]interface{})
	jsonErr := json.Unmarshal(body, &obj)
	if jsonErr != nil {
		log.Fatal(jsonErr)
	}

	//jsonData := string(body)
	fmt.Println(obj["img"])
}

Yo lo hice con python:

import urllib.request
import json

def main():
        url = 'https://xkcd.com/info.0.json'
        response = urllib.request.urlopen(url)
        data = json.loads(response.read())
        print (json.dumps(data, sort_keys=True))

if __name__ == "__main__":    main()
python3 xkcd.py | jq

Respuesta:

{
  "alt": "So excited to see everyone after my luxury cruise home from the World Handshake Championships!",
  "day": "23",
  "img": "https://imgs.xkcd.com/comics/sabotage.png",
  "link": "",
  "month": "3",
  "news": "",
  "num": 2284,
  "safe_title": "Sabotage",
  "title": "Sabotage",
  "transcript": "",
  "year": "2020"
}

Para verlo en el navegador pueden usar la extensión JSON Viewer de chrome

De las muchas herramientas que existen me gusta la extensión de VS Code, HTTP Client.

![](

Genial, me gusta PHP, pero el tema de las cURL’s en PHP es muy… no es bonito a la vista, yo cree una función PHPque se parece a axios de JavaScript, si seguimos usando cURL’s con PHP la paso xD

Siempre es bueno conocer la documentación, en este caso de curl_init en PHP

Ejemplo en Ruby

require 'httpclient'

client = HTTPClient.new

puts client.get_content "https://xkcd.com/info.0.json"

Pueden instalar la extención JSONView y ver el JSON más amigable y poder interactuar con el.

No olviden instalar jp antes de usarlo

sudo apt-get install jq
<h3>Cómo realizar una petición REST e interpretar sus resultados</h3>

Si quieres que la información se vea más ordenada en tu terminal al llamar algún recursos, utiliza la herramienta jq

curl https://xkcd.com/info.0.json | jq
  • PHP_EOL es una función que añade un enter después del string que contiene.
echo file_get_contents('https://xkcd.com/info.0.json').PHP_EOL;

Si queremos conseguir un dato específico de la api, podemos hacer así:

$json = file_get_contents('https://xkcd.com/info.0.json');

$data = json_decode($json, true);

echo $data['img'].PHP_EOL;

‼ json_decode → Convierte un string codificado en JSON a una variable de PHP.

<h3>Verbos HTTP</h3>

Es consumo de web services vía Rest se basa en la utilización de algunos de los verbos Http eso verbos serían:

  • GET
  • POST
  • PUT
  • DELETE

Para enviar datos a la API con php, tenemos que:

  1. Creamos un Array que contiene la información de autenticación para hacer login en un servidor

    $data = [
        'username' => 'user',
        'password' => 'clave'
    ];
    
  2. El array anterior se codifica en JSON para poder enviarlo a través del POST

    $payload = json_encode($data);
    
  3. Con la función curl_init se inicia una conexión con el servidor

    $ch = curl_init('https://api.example.com/api/1.0/user/login');
    
  4. En el 1er curl_setopt indicamos que el resultado del servidor nos sea retornado; 2da indicamos que no queremos los encabezados; 3er indicamos que nuestra petición va a ser realizada a través del verbo POST; 4ta indicamos qué es lo que va a viajar a través del verbo POST.

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    
  5. Y por último, en el 5to curl_setopt configuramos algunos encabezados para que el servidor sepa que le estamos enviando y le indicamos el tamaño de ese json.

    curl_setopt($ch, CURLOPT_HTTPHEADER, 
        [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($payload)
        ]
    );
    
  6. Al final ejecutamos la petición, enviamos la información al servidor y guardamos el resultado en una variable.

    $result = curl_exec($ch);
    
  7. Y cerramos la conexión.

    curl_close($ch);
    

El proceso completo para descargar la imagen usando curl

curl -s https://xkcd.com/info.0.json | jq ".img" | xargs curl -s --remote-name

Aunque hubiera estado mejor si hubieran enseñado a hacer todo eso usando Telnet, ya que si ves como funciona a profundidad el protocolo HTTP, por dar un ejemplo

Yo utilizaré python

curl https://xkcd.com/info.0.json | jq

pero antes hay que instalar la aplicacion jq
si es GNU\Linux basados en Debian, sudo apt get jq

Para instalar jq en mac:
brew install jq
El curl creo que ya viene instalado, pero si no lo tienen:
brew install curl

Guarda los datos de la API a la BD

<?php
// Obtener el contenido de la API XKCD
$jsonData = file_get_contents("https://xkcd.com/info.0.json");

// Decodificar el JSON en un array asociativo
$data = json_decode($jsonData, true);

// Conexión a la base de datos MySQL
$servername = "localhost";
$username = "tu_usuario";
$password = "tu_contraseña";
$dbname = "nombre_de_la_base_de_datos";

$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
    die("Error de conexión: " . $conn->connect_error);
}

// Insertar los datos en la tabla de la base de datos
$title = $conn->real_escape_string($data['title']);
$comicNumber = $data['num'];
$imageURL = $conn->real_escape_string($data['img']);

$sql = "INSERT INTO comics (title, comic_number, image_url) VALUES ('$title', $comicNumber, '$imageURL')";

if ($conn->query($sql) === TRUE) {
    echo "Datos guardados correctamente en la base de datos.";
} else {
    echo "Error al guardar los datos: " . $conn->error;
}

// Cerrar la conexión
$conn->close();
?>

Me siento todo un PRO realizando las rutinas desde la consola.

que mal inicio de curso… no explican nada bien… disculpa pero no se entiende nada si no tienes mucha experiencia

Solo obtener la URL con Go:

func main() {
	response := curl("https://xkcd.com/info.0.json")
	img := struct {
		Img string `json:"img"`
	}{}
	json.Unmarshal([]byte(response), &img)

	println(img.Img)
}

En window primero instalar chocolatey

Y despues instalar jq

chocolatey install jq

Me sale un error al intentar ejecutarlo. Alguien mas le ha salido?

Warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?

No sé mucho acerca de PHP pero al ver que los comentarios son la mayoría dando alternativas a PHP, ya veo que no es muy querido.

Aqui dejo una guia para los Ruby coders!.

  • Crear una carpeta y en dentro de ella ejecuta en la terminal bundle init.
  • Agregar la gema rest-client
  • Ejecutar en consola bundle install
  • Crear un archivo para el ejemplo, en mi caso simple_petition.rb
  • Agregar el siguiente código…
%w(rest-client amazing_print json).each { |gem| require gem } 
# Petition and its response
response = RestClient.get('https://xkcd.com/info.0.json')
# Parsing response
ap JSON.parse(response)

En la primera linea requiero las gemas. Luego hago la petición usando la Gema RestClient
Documentación y por último la parseo y la imprimo.
Yo uso amazing print para poder ver mejor los datos en consola. Si no la tienes reemplaza ap por print o put.

  • Ejecuta en consola ruby (file name).rb, resultado:
{
         "month" => "11",
           "num" => 2387,
          "link" => "",
          "year" => "2020",
          "news" => "",
    "safe_title" => "Blair Witch",
    "transcript" => "",
           "alt" => "\"Are you concerned the witches won't breed in captivity?\" \"Honestly, we're more concerned that they WILL. We don't know what it involves, but our biologists theorize that it's 'harrowing.'\"",
           "img" => "https://imgs.xkcd.com/comics/blair_witch.png",
         "title" => "Blair Witch",
           "day" => "18"
}

alguien sabe porque aunque escriba lo mismo que el instructor, casi todo me sale de otro color?
al final aunque lo guarde al ejecutar php xkcd.php dice que ese comando no existe ( estoy usando gitbash)

Los datos JSON se utilizan para diversos fines. Pero los datos JSON no se pueden leer fácilmente desde un archivo JSON usando un script bash como otros archivos normales. La herramienta jq se utiliza para resolver este problema. El comando jq funciona como el comando sed y awk, y usa un lenguaje específico de dominio para trabajar con datos JSON. jq no es un comando incorporado. Entonces, debe instalar este comando para usarlo. Se muestra cómo puede instalar y aplicar el comando jq para leer o manipular datos JSON.

$ JsonData=’[{“Book”:“PHP 7”}, {“Publication”:“Apress”},
{“Book”:“React 16 Essentials”},{“Publication”:“Packt”} ]’

$ echo “${JsonData}” | jq ‘.’

Yo soy más de Python que de PHP asi que comparto cómo es mi código en Python:

import requests

url = "https://xkcd.com/info.0.json"

response = requests.get(url)

print('.json() method', response.json())
print('.reason method', response.reason)

También les comparto algo de mis apuntes sobre el módulo requests que se debe importar en Python para poder acceder a urls.
response.content que devolverá el contenido de la respuesta.
response.header que devolverá un diccionario con los headers de respuesta.
response.iter_content() que iterará sobre la respuesta.
response.iter_lines() ídem anterior.
response.json() retornará en formato JSON si la respuesta fue escrita en este formato. Caso contrario levanta un error.
response.ok() retorna True si el valor de respuesta es menor a 200 y si no False.
response.text retorna el texto de la respuesta.
response.status_code que retorna el código de estado de la respuesta.

curl ya viene instalado por defecto en windows 10

INSTALAR JQ EN MacOS

Abrir una nueva Terminal y realizar los siguientes pasos:

1. Instalar el administrador de paquetes Brew

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

La anterior URL está en la pàgina oficial de Brew https://brew.sh

2. Instalar JQ usando Brew
brew install jq

una vez instalado lo anterior se puede usar jq segùn la linea indicada en el video.
curl https://xkcd.com/info.0.json | jq

Si desean ejecutar su código php en VS Code, usen la extensión PHP Server. útil para ver el resultado final en la web.

Genial, el curso pero no lo estamos aplicando en casos de la vida real … 😦

En las versiones más recientes de Windows 10 podemos acceder a los archivos de WSL desde el explorador de Windows mediante:
explorer.exe .

Hice el ejemplo que muestra el profesor en python, usando google colab.

Si quieren verlo hagan click aquí

usemos snaps

sudo snap install jq
Así sería en dart ```js import 'dart:async'; import 'package:http/http.dart' as http; Future<void> main() async { // URL de la API XKCD var url = Uri.parse('https://xkcd.com/info.0.json'); // Realizar la petición GET var response = await http.get(url); // Verificar si la petición fue exitosa (código de estado 200) if (response.statusCode == 200) { // Imprimir la respuesta print('Respuesta de la API XKCD:'); print(response.body); } else { // Si la petición falla, imprimir el código de estado print('Error al realizar la petición: ${response.statusCode}'); } } ```

Use:

sudo apt-get update
sudo apt-get install jq

luego use el comando:

curl https://xkcd.com/info.0.json | jq

y mi respuesta fue:

curl https://xkcd.com/info.0.json | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   384  100   384    0     0    992      0 --:--:-- --:--:-- --:--:--   992
{
  "month": "12",
  "num": 2554,
  "link": "",
  "year": "2021",
  "news": "",
  "safe_title": "Gift Exchange",
  "transcript": "",
  "alt": "In addition to having all their budgets in a spreadsheet with consistent formatting, they just love expressing preferences on a well-calibrated numerical scale.",
  "img": "https://imgs.xkcd.com/comics/gift_exchange.png",
  "title": "Gift Exchange",
  "day": "13"
}

Este es un skeleton por si no quieren instalar php en la maquina sino usar docker

Dockerfile

FROM php:8.1-apache
RUN pecl install -f xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini;

docker-compose.yml

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      XDEBUG_CONFIG: remote_host=172.17.01 remote_port=9000 remote_enable=1
    ports:
      - 8000:80
    volumes:
      - ./:/var/www/html

index.php

<?php

require __DIR__ . '/CurlService.php';

$curl = new CurlService();
$response = $curl->get('https://xkcd.com/info.0.json');

echo '<pre>';
print_r($response);
echo '</pre>';

CurlService.php

<?php

declare(strict_types=1);

final class CurlService
{

    public function get(
        string $url, 
        array $queryParams = null, 
        array $headers = null
    ): array 
    {
        return $this->sendRequest(
            $url, 
            queryParams: $queryParams, 
            headers: $headers
        );
    }

    private function sendRequest(
        string $url,
        string $method = 'GET',
        array $queryParams = null,
        array $data = null, 
        array $headers = null
    ): array 
    {
        $ch = curl_init($url);
        $opts = [
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CUSTOMREQUEST => $method,
        ];
        
        if (!is_null($data)) {
            $opts[CURLOPT_POSTFIELDS] = $data;
        }
        if (!is_null($headers)) {
            $opts[CURLOPT_HTTPHEADER] = $data;
        }
        curl_setopt_array($ch, $opts);
        curl_setopt_array($ch, $opts);
        $response = json_decode(curl_exec($ch), true);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return $response;
    }
}

Falta el método HTTP PATCH, que vendría a ser un update parcial

Para instalar jq en Mac M1 usando iTerm

brew upgrade
brew install jq

Excelente curso, estoy fascinado con todo lo que estoy aprendiendo. Muchas gracias Mauro 😄

Para Java se puede usar:

  • Unirest:
import com.mashape.unirest.http.*;
import java.io.*;
public class main {
  public static void main(String []args) throws Exception{
    Unirest.setTimeouts(0, 0);
    HttpResponse<String> response = Unirest.get("https://xkcd.com/info.0.json")
      .asString();
    
    System.out.println(response.getBody());
  }
}
  • OkHTTP:
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://xkcd.com/info.0.json")
      .method("GET", null)
      .build();
    Response response = client.newCall(request).execute();
    System.out.println(response.body().string());
  }
}

Dependecias Maven respectivamente:

<dependencies>

<dependency>
            <groupId>com.mashape.unirest</groupId>
            <artifactId>unirest-java</artifactId>
            <version>1.4.9</version>
</dependency>

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.1</version>
</dependency>

</dependencies>

Ejemplo de implementación en .Net Core con C# 5

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;

HttpClient client = new HttpClient();
HttpResponseMessage respose = await client.GetAsync("https://xkcd.com/info.0.json");
if(respose.IsSuccessStatusCode)
{
    var json = await respose.Content.ReadAsStringAsync();
    JsonDocument doc = JsonDocument.Parse(json);
    JsonElement root = doc.RootElement;
    var Imagen = root.GetProperty("img");
    Console.WriteLine(Imagen);
}

Es camarada ese compa

**No a todos les va a dar de una el comando **

curl https://xkcd.com/info.0.json | jq

es necesario tener primero instalado jq
https://stedolan.github.io/jq/download/

curl es una herramienta muy dinamica y queda lista para usar en cuanto instalas php

Hola el comando por defecto no me funcionó
curl https://xkcd.com/info.0.json | jq
Para que me funcionara usé un punto ( .) al final
curl https://xkcd.com/info.0.json | jq .
Lo hice en un Centos 6

En Go

package main

import (
	"io/ioutil"
	"net/http"
)

func curl(url string) string {
	resp, err := http.Get(url)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	return string(body)
}

func main() {
	println(curl("https://xkcd.com/info.0.json"))
}

Para los que no les funcione jq instalarlo según su SO y la versión que deseen en: https://stedolan.github.io/jq/download/.
Y luego ver este vídeo: https://www.youtube.com/watch?v=rrjIVepRqPI&ab_channel=webhtg

var familia = {
nombre: “”,
profesion: “”,
edad: “”,
};

//CONVIRTIENDO UN OBJETO A FORMATO JSON

var convertJson = JSON.stringify(familia);
console.log(Texto json: ${convertJson});

//CONVIRTIENDO UN TEXTO JSON EN UN OBJETO ITERABLE

var convertObject = JSON.parse(convertJson);
console.log(Objeto iterable: ${convertObject});

Les dejo el enlace de postman por si desean consumir los recursos de una forma gráfica.

[https://www.postman.com/downloads/

y enlace del curso de postman de platzi

https://platzi.com/clases/postman/

En ruby debes instalar la gema HTTParty y ejecutar el siguiente código

require 'HTTParty'
url = 'https://xkcd.com/info.0.json'
response = HTTParty.get(url)

puts response.parsed_response['img']

Consultar una API

Se realiza usando la URL para la acción o verbo HTTP que se quiera realizar por ejemplo en Python

import requests

url = "https://xkcd.com/info.0.json"
response = requests.get(url)
if response.status_code == 200:
    print(response.json())

O en la consola con Curl

$ curl https://xkcd.com/info.0.json

“php es bueno para aplicaciones sencillas , pero para sistemas mas complejos o empresariales se utiliza java,python,.net” otro mito, parecen pericos repitiendo un mantra

Son APIS igual que webservices?
Me confundo con los conceptos.

Un par de script sencillos en PHP para POST

Formulario

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST</title>
</head>
<body>

<form action="post_crud.php" method="post">
 <p>Tu nombre: <input type="text" name="nombre" /></p>
 <p>Tu edad: <input type="text" name="edad" /></p>
 <p><input type="submit" /></p>
</form>
    
</body>
</html>

Para mostrar el POST

<?php

$nombre = $_POST[‘nombre’];
$edad = $_POST[‘edad’];

echo “Tu nombre es : $nombre”."<br />";
echo "Tu edad es : $edad ";

?>

En Ruby,

require 'open-uri'
require 'json'

document = open('https://xkcd.com/info.0.json').read

document_json = JSON.parse(document)

puts document_json
puts document_json['img']

La salida,

{"month"=>"3", "num"=>2278, "link"=>"", "year"=>"2020", "news"=>"", "safe_title"=>"Scientific Briefing", "transcript"=>"", "alt"=>"\"I actually came in in the middle so I don't know which topic we're briefing on; the same slides work for like half of them.\"", "img"=>"https://imgs.xkcd.com/comics/scientific_briefing.png", "title"=>"Scientific Briefing", "day"=>"9"}
https://imgs.xkcd.com/comics/scientific_briefing.png

No me funcionó el código, cuando ejecuto se queda tildado

También se puede instalar la consola de Ubuntu en Windows bajándola desde la Tienda de Microsoft

¡Genial! 😄

Si tiene una información en JSON, pueden usar la siguiente web para obtener un formato claro de la información:
https://jsonbeautifier.org/

Hice un intento en Wordpress, creando un archivo en php colocandole este encabezado para poderlo incluir en una página nueva:

<?php /* Template Name: Nombre*/
echo file_get_contents('https://xkcd.com/info.0.json').PHP_EOL;
?>```
Y funciona!

La imagen se puede ver incluyendo el tag img de html:

<img src="<?php /* Template Name: curl */
$json = file_get_contents('https://xkcd.com/info.0.json');
$data = json_decode($json, true);
echo $data['img'].PHP_EOL;?>" alt="meme">```

Aunque instalé la herramienta jq, no me despliega el resultado esperado ayuda por favor

Pensaba que una API regresaba ciertos datos obligatorios, es decir key:values del objecto json obligatorios. Pero veo que cada quien lo hace como mejor le paresca

Joder, no voy entendiendo bien, en especial cuando pasó al método POST

Como puedo ordenar la info que llega de la api en el cmd de windows, me dice que el comando jq no lo reconoce.

Si alguien está en ubuntu y aún no tiene php instalado pueden usar este video para instalarlo: https://www.youtube.com/watch?v=fO6kt-Cjszk

Esto es en Java para obtener el campo en especifico, alguien conoce una manera más corta?

public class Main {
        public static void main(String[] args) {
            Unirest.setTimeouts(0, 0);
            try {
                HttpResponse<JsonNode> stringHttpResponse = Unirest.get("https://xkcd.com/info.0.json").asJson();

                 System.out.println(stringHttpResponse.getBody().getObject().get("img"));
                } catch (UnirestException e) {
                        e.printStackTrace();

            }         }
        }

interesante 😃

Me da el siguiente error:

Alguien sabe porque?

Utilizando el comando ‘curl’ dentro de nuestra terminal podemos realizar peticiones a cualquier sitio web, por ejemplo una API como la de xkcd

El anterior comando nos regresa información del API, pero de manera poco legible. para poder verlo de manera más ordenada podemos usar el siguiente comando

Cuando ejecuto esto en git bush: php xkcd.php | jq me da el siguiente error:
stdout is not a tty

Esto se me hace parecido (en cierta forma) a web scrapping, no?

Métodos de petición HTTP

GET
El método GET solicita una representación de un recurso específico. Las peticiones que usan el método GET sólo deben recuperar datos.
HEAD
El método HEAD pide una respuesta idéntica a la de una petición GET, pero sin el cuerpo de la respuesta.
POST
El método POST se utiliza para enviar una entidad a un recurso en específico, causando a menudo un cambio en el estado o efectos secundarios en el servidor.
PUT
El modo PUT reemplaza todas las representaciones actuales del recurso de destino con la carga útil de la petición.
DELETE
El método DELETE borra un recurso en específico.
CONNECT
El método CONNECT establece un túnel hacia el servidor identificado por el recurso.
OPTIONS
El método OPTIONS es utilizado para describir las opciones de comunicación para el recurso de destino.
TRACE
El método TRACE realiza una prueba de bucle de retorno de mensaje a lo largo de la ruta al recurso de destino.
PATCH
El método PATCH es utilizado para aplicar modificaciones parciales a un recurso.

compañeros tengo una pregunta, no reconoce el comando vim en mi powershell ejecutada como amdinistrador en w10, tengo instalado curlo y jq, este es el error que sale:

vim : The term ‘vim’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1

  • vim xkcd.php

estimado profesor tu url no funciona?
https://api.example.com/api/1.0/user/login

[20:51:03] juliana:~ $ curl https://xkcd.com/info.0.json
zsh: command not found: curl

por que no reconoce el comando?

Buenos días, no sé si me pudieran ayudar con algo, estoy consumiendo un servicio que requiere usuario y contraseña y esté me devuelve un token para consumir otro servicio api, se debe enviar con el body el tipo application/x-www-form-urlencoded, cómo podría hacerlo?

En python 3 😄

import requests

response = requests.get('https://xkcd.com/info.0.json')

if response.status_code == 200:
    print(response.json())

Por que no les gusta PHP?

hola, por que utiliza CURLOP_POSTFIELDS para establecer la autenticacion al servicio?
es que en otros tutoriales he visto es el uso de CURLOPT_USERPWD y de hecho yo lo vengo usando y me funciona, y en cambio el CURLOP_POSTFIELDS lo uso es para enviarle valores al servidor que quiero cambiar, en diferentes servicios que he tenido que usar no creados por mi, lo he hecho asi y funciona. por que el profesor lo explica asi?

Me sale el siguiente error: parse error: Invalid numeric literal at line 1, column 6
Tengo esto:

<?php

$json = file_get_contents('https://xkcd.com/info.0.json');

$data = json_decode( $json, true);

echo $data['img'].PHP_EOL;
?>

Buen día a todos, uniéndome a la tendencia de realizar el ejercicio en otros lenguajes, acá les dejo una implementación de este en .NET con C#

  1. Lo primero es asegurarse que tienen el .Net SDK instalado,
    si no lo tienen lo pueden descargar en este link:
    https://dotnet.microsoft.com/download

  2. creamos una nueva aplicación de consola,
    nos paramos en una carpeta vacía y ejecutamos el comando:

dotnet new console
  1. Lo anterior creará una serie de archivos correspondientes al proyecto,
    en el archivo Program.cs añadir el siguiente código.
using System;
using System.Net;
using System.IO;
using System.Text;

namespace testRestdotnet
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string response = GetContentURL("https://xkcd.com/info.0.json");
            Console.WriteLine(response);
        }

        private static string GetContentURL(string pURL)
        {
            string resultado;
            //-> Check if url is valid  
            WebRequest serverRequest = WebRequest.Create(pURL);  
            WebResponse serverResponse = null;  
            try //Try to get response from server  
            {  
                serverResponse = serverRequest.GetResponse(); 
                Stream stream = serverResponse.GetResponseStream();

                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                resultado = reader.ReadToEnd(); 
            }  
            catch //If could not obtain any response  
            {  
                resultado = "Error!!!";  
            }  
            serverResponse.Close();

            return resultado;
        }
    }
}
  1. por último compilamos y ejecutamos el proyecto con los siguientes comandos:
dotnet build
dotnet run

Interesante el manejo de la termina para estas clases, es bueno poder dominar estos comando también y no solo quedarnos con las interfaces que nos ofrecen algunos programas como Postman

por si a alguien le dio miedo ver vim, es un editor de texto cualquiera, basta con usar vscode

yo uso vim pero no es para todos, hay que tenerle paciencia, pero cuando si quieres aprender a usarlo se vuelve un editor muy poderoso, y un IDE para los lenguajes de programación que necesites, es muy personalizable

No se nada de php, pero intentare con los ejemplos de las clases.

Me gusto la parte de realizar las peticiones en la terminal, para las personas interesadas en organizar la respuesta JSON, yo utilice jq.node.
 
Sitio en npm:
jq.node
 
Instalación cuando ya tienes npm

npm install –g jq.node

Uso

curl https://xkcd.com/info.0.json | jqn

Resultado