Skip to content

Commit a50fabe

Browse files
authored
Merge pull request mouredev#6525 from eulogioep/main
#20 - java, javascript, php y typescript
2 parents 51c2173 + df477d8 commit a50fabe

File tree

4 files changed

+553
-0
lines changed

4 files changed

+553
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.net.HttpURLConnection;
4+
import java.net.URL;
5+
import java.util.Scanner;
6+
import org.json.JSONArray;
7+
import org.json.JSONObject;
8+
9+
/**
10+
* Este programa demuestra el uso de peticiones HTTP en Java y la integración
11+
* con la PokéAPI.
12+
*
13+
* Teoría sobre peticiones HTTP:
14+
* - HTTP (Hypertext Transfer Protocol) es un protocolo de comunicación que
15+
* permite
16+
* la transferencia de información en la World Wide Web.
17+
* - Los métodos HTTP más comunes son:
18+
* * GET: Solicita datos de un recurso específico
19+
* * POST: Envía datos para crear un nuevo recurso
20+
* * PUT: Actualiza un recurso existente
21+
* * DELETE: Elimina un recurso
22+
*
23+
* En Java, podemos realizar peticiones HTTP utilizando la clase
24+
* HttpURLConnection,
25+
* que nos permite establecer una conexión con un servidor web y enviar/recibir
26+
* datos.
27+
*/
28+
public class EulogioEP {
29+
public static void main(String[] args) {
30+
Scanner scanner = new Scanner(System.in);
31+
32+
// Ejemplo básico de petición HTTP
33+
System.out.println("=== Ejemplo básico de petición HTTP ===");
34+
try {
35+
String content = makeHttpRequest("https://www.example.com");
36+
System.out.println("Contenido de example.com:");
37+
System.out.println(content);
38+
} catch (Exception e) {
39+
System.out.println("Error al realizar la petición HTTP: " + e.getMessage());
40+
}
41+
42+
// Funcionalidad de la PokéAPI
43+
while (true) {
44+
System.out.println("\n=== Búsqueda de Pokémon ===");
45+
System.out.println("Ingrese el nombre o número del Pokémon (o 'salir' para terminar):");
46+
String input = scanner.nextLine().toLowerCase();
47+
48+
if (input.equals("salir")) {
49+
break;
50+
}
51+
52+
try {
53+
// Realizar petición a la PokéAPI
54+
String pokemonData = makeHttpRequest("https://pokeapi.co/api/v2/pokemon/" + input);
55+
JSONObject pokemon = new JSONObject(pokemonData);
56+
57+
// Mostrar información básica del Pokémon
58+
System.out.println("\nInformación del Pokémon:");
59+
System.out.println("Nombre: " + pokemon.getString("name"));
60+
System.out.println("ID: " + pokemon.getInt("id"));
61+
System.out.println("Peso: " + pokemon.getInt("weight") / 10.0 + " kg");
62+
System.out.println("Altura: " + pokemon.getInt("height") / 10.0 + " m");
63+
64+
// Mostrar tipos
65+
System.out.println("Tipos:");
66+
JSONArray types = pokemon.getJSONArray("types");
67+
for (int i = 0; i < types.length(); i++) {
68+
System.out.println("- " + types.getJSONObject(i).getJSONObject("type").getString("name"));
69+
}
70+
71+
// Obtener y mostrar cadena de evolución
72+
String speciesUrl = pokemon.getJSONObject("species").getString("url");
73+
String speciesData = makeHttpRequest(speciesUrl);
74+
JSONObject species = new JSONObject(speciesData);
75+
String evolutionChainUrl = species.getJSONObject("evolution_chain").getString("url");
76+
String evolutionData = makeHttpRequest(evolutionChainUrl);
77+
JSONObject evolution = new JSONObject(evolutionData);
78+
79+
System.out.println("\nCadena de evolución:");
80+
printEvolutionChain(evolution.getJSONObject("chain"));
81+
82+
// Mostrar juegos
83+
System.out.println("\nJuegos en los que aparece:");
84+
JSONArray games = pokemon.getJSONArray("game_indices");
85+
for (int i = 0; i < games.length(); i++) {
86+
System.out.println("- " + games.getJSONObject(i).getJSONObject("version").getString("name"));
87+
}
88+
89+
} catch (Exception e) {
90+
System.out.println(
91+
"Error: No se pudo encontrar el Pokémon. Asegúrese de escribir el nombre o número correctamente.");
92+
}
93+
}
94+
95+
scanner.close();
96+
}
97+
98+
/**
99+
* Realiza una petición HTTP GET a la URL especificada.
100+
*
101+
* @param urlString La URL a la que se realizará la petición
102+
* @return El contenido de la respuesta como String
103+
* @throws Exception Si ocurre un error durante la petición
104+
*/
105+
private static String makeHttpRequest(String urlString) throws Exception {
106+
URL url = new URL(urlString);
107+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
108+
conn.setRequestMethod("GET");
109+
110+
if (conn.getResponseCode() != 200) {
111+
throw new RuntimeException("HTTP error code : " + conn.getResponseCode());
112+
}
113+
114+
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
115+
StringBuilder response = new StringBuilder();
116+
String output;
117+
while ((output = br.readLine()) != null) {
118+
response.append(output);
119+
}
120+
conn.disconnect();
121+
122+
return response.toString();
123+
}
124+
125+
/**
126+
* Imprime recursivamente la cadena de evolución de un Pokémon.
127+
*
128+
* @param chain El objeto JSON que contiene la información de la cadena de
129+
* evolución
130+
*/
131+
private static void printEvolutionChain(JSONObject chain) {
132+
String pokemonName = chain.getJSONObject("species").getString("name");
133+
System.out.println("- " + pokemonName);
134+
135+
JSONArray evolvesTo = chain.getJSONArray("evolves_to");
136+
for (int i = 0; i < evolvesTo.length(); i++) {
137+
printEvolutionChain(evolvesTo.getJSONObject(i));
138+
}
139+
}
140+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Se requiere el módulo 'node-fetch' para realizar peticiones HTTP en Node.js
2+
// Instalar con: npm install node-fetch
3+
const fetch = require("node-fetch");
4+
const readline = require("readline");
5+
6+
/**
7+
* Teoría sobre peticiones HTTP en JavaScript:
8+
*
9+
* En JavaScript moderno, podemos realizar peticiones HTTP de varias formas:
10+
* 1. Fetch API (nativo en navegadores, requiere módulo en Node.js)
11+
* 2. XMLHttpRequest (método más antiguo)
12+
* 3. Bibliotecas como axios
13+
*
14+
* La Fetch API utiliza Promesas, lo que permite un código más limpio y
15+
* manejo asíncrono más sencillo usando async/await.
16+
*
17+
* Conceptos clave:
18+
* - async/await: Permite escribir código asíncrono que parece síncrono
19+
* - try/catch: Maneja errores en operaciones asíncronas
20+
* - JSON: Formato común para intercambiar datos en la web
21+
*/
22+
23+
// Configuración de readline para entrada/salida en consola
24+
const rl = readline.createInterface({
25+
input: process.stdin,
26+
output: process.stdout,
27+
});
28+
29+
// Función para realizar preguntas al usuario y obtener respuesta
30+
const pregunta = (pregunta) => {
31+
return new Promise((resolve) => {
32+
rl.question(pregunta, resolve);
33+
});
34+
};
35+
36+
// Función para realizar petición HTTP
37+
async function hacerPeticionHttp(url) {
38+
try {
39+
const respuesta = await fetch(url);
40+
if (!respuesta.ok) {
41+
throw new Error(`HTTP error! status: ${respuesta.status}`);
42+
}
43+
return await respuesta.json();
44+
} catch (error) {
45+
throw new Error(`Error al realizar la petición: ${error.message}`);
46+
}
47+
}
48+
49+
// Función para mostrar la cadena de evolución
50+
function mostrarCadenaEvolucion(cadena, nivel = 0) {
51+
const indentacion = " ".repeat(nivel);
52+
console.log(`${indentacion}- ${cadena.species.name}`);
53+
54+
if (cadena.evolves_to.length > 0) {
55+
for (const evolucion of cadena.evolves_to) {
56+
mostrarCadenaEvolucion(evolucion, nivel + 1);
57+
}
58+
}
59+
}
60+
61+
// Función principal que ejecuta el programa
62+
async function main() {
63+
console.log("=== Ejemplo básico de petición HTTP ===");
64+
try {
65+
const ejemploData = await hacerPeticionHttp("https://www.example.com");
66+
console.log("Petición exitosa a example.com");
67+
} catch (error) {
68+
console.error(error.message);
69+
}
70+
71+
while (true) {
72+
console.log("\n=== Búsqueda de Pokémon ===");
73+
const entrada = await pregunta(
74+
"Ingrese el nombre o número del Pokémon (o 'salir' para terminar): "
75+
);
76+
77+
if (entrada.toLowerCase() === "salir") {
78+
break;
79+
}
80+
81+
try {
82+
// Obtener datos básicos del Pokémon
83+
const pokemonData = await hacerPeticionHttp(
84+
`https://pokeapi.co/api/v2/pokemon/${entrada.toLowerCase()}`
85+
);
86+
87+
console.log("\nInformación del Pokémon:");
88+
console.log(`Nombre: ${pokemonData.name}`);
89+
console.log(`ID: ${pokemonData.id}`);
90+
console.log(`Peso: ${pokemonData.weight / 10} kg`);
91+
console.log(`Altura: ${pokemonData.height / 10} m`);
92+
93+
console.log("Tipos:");
94+
pokemonData.types.forEach((tipo) => {
95+
console.log(`- ${tipo.type.name}`);
96+
});
97+
98+
// Obtener y mostrar cadena de evolución
99+
const speciesData = await hacerPeticionHttp(pokemonData.species.url);
100+
const evolutionData = await hacerPeticionHttp(
101+
speciesData.evolution_chain.url
102+
);
103+
104+
console.log("\nCadena de evolución:");
105+
mostrarCadenaEvolucion(evolutionData.chain);
106+
107+
// Mostrar juegos
108+
console.log("\nJuegos en los que aparece:");
109+
pokemonData.game_indices.forEach((juego) => {
110+
console.log(`- ${juego.version.name}`);
111+
});
112+
} catch (error) {
113+
console.error(
114+
"Error: No se pudo encontrar el Pokémon. Asegúrese de escribir el nombre o número correctamente."
115+
);
116+
}
117+
}
118+
119+
rl.close();
120+
}
121+
122+
// Ejecutar el programa
123+
main().catch(console.error);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
3+
/**
4+
* Ejercicio de peticiones HTTP en PHP
5+
*
6+
* Teoría sobre peticiones HTTP en PHP:
7+
* PHP ofrece varias formas de realizar peticiones HTTP:
8+
* 1. cURL - Una biblioteca potente para transferir datos con varios protocolos
9+
* 2. file_get_contents() - Función simple para peticiones GET (requiere allow_url_fopen)
10+
* 3. Bibliotecas de terceros como Guzzle
11+
*
12+
* En este ejemplo usamos cURL por su flexibilidad y robustez.
13+
*
14+
* Conceptos clave:
15+
* - cURL: Cliente URL library, permite hacer peticiones HTTP
16+
* - JSON: Formato de intercambio de datos, decodificado con json_decode()
17+
* - CLI: Command Line Interface, interfaz por línea de comandos
18+
*/
19+
20+
/**
21+
* Realiza una petición HTTP GET
22+
*
23+
* @param string $url La URL a la que realizar la petición
24+
* @return string El contenido de la respuesta
25+
* @throws Exception Si hay un error en la petición
26+
*/
27+
function realizarPeticionHttp($url)
28+
{
29+
$ch = curl_init($url);
30+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
31+
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
32+
33+
$response = curl_exec($ch);
34+
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
35+
36+
if ($httpCode !== 200) {
37+
$error = curl_error($ch);
38+
curl_close($ch);
39+
throw new Exception("Error en la petición HTTP (código $httpCode): $error");
40+
}
41+
42+
curl_close($ch);
43+
return $response;
44+
}
45+
46+
/**
47+
* Muestra la cadena de evolución de forma recursiva
48+
*
49+
* @param object $chain Objeto JSON con la información de evolución
50+
* @param int $nivel Nivel de indentación para la visualización
51+
*/
52+
function mostrarCadenaEvolucion($chain, $nivel = 0)
53+
{
54+
$indentacion = str_repeat(" ", $nivel);
55+
echo "{$indentacion}- " . $chain->species->name . PHP_EOL;
56+
57+
if (!empty($chain->evolves_to)) {
58+
foreach ($chain->evolves_to as $evolucion) {
59+
mostrarCadenaEvolucion($evolucion, $nivel + 1);
60+
}
61+
}
62+
}
63+
64+
// Ejemplo básico de petición HTTP
65+
echo "=== Ejemplo básico de petición HTTP ===" . PHP_EOL;
66+
try {
67+
$contenido = realizarPeticionHttp('https://www.example.com');
68+
echo "Petición exitosa a example.com" . PHP_EOL;
69+
} catch (Exception $e) {
70+
echo "Error: " . $e->getMessage() . PHP_EOL;
71+
}
72+
73+
// Programa principal para buscar información de Pokémon
74+
while (true) {
75+
echo PHP_EOL . "=== Búsqueda de Pokémon ===" . PHP_EOL;
76+
echo "Ingrese el nombre o número del Pokémon (o 'salir' para terminar): ";
77+
$entrada = trim(strtolower(fgets(STDIN)));
78+
79+
if ($entrada === 'salir') {
80+
break;
81+
}
82+
83+
try {
84+
// Obtener datos básicos del Pokémon
85+
$pokemonJson = realizarPeticionHttp("https://pokeapi.co/api/v2/pokemon/{$entrada}");
86+
$pokemon = json_decode($pokemonJson);
87+
88+
echo PHP_EOL . "Información del Pokémon:" . PHP_EOL;
89+
echo "Nombre: " . $pokemon->name . PHP_EOL;
90+
echo "ID: " . $pokemon->id . PHP_EOL;
91+
echo "Peso: " . ($pokemon->weight / 10) . " kg" . PHP_EOL;
92+
echo "Altura: " . ($pokemon->height / 10) . " m" . PHP_EOL;
93+
94+
// Mostrar tipos
95+
echo "Tipos:" . PHP_EOL;
96+
foreach ($pokemon->types as $tipo) {
97+
echo "- " . $tipo->type->name . PHP_EOL;
98+
}
99+
100+
// Obtener y mostrar cadena de evolución
101+
$especieJson = realizarPeticionHttp($pokemon->species->url);
102+
$especie = json_decode($especieJson);
103+
104+
$evolucionJson = realizarPeticionHttp($especie->evolution_chain->url);
105+
$evolucion = json_decode($evolucionJson);
106+
107+
echo PHP_EOL . "Cadena de evolución:" . PHP_EOL;
108+
mostrarCadenaEvolucion($evolucion->chain);
109+
110+
// Mostrar juegos
111+
echo PHP_EOL . "Juegos en los que aparece:" . PHP_EOL;
112+
foreach ($pokemon->game_indices as $juego) {
113+
echo "- " . $juego->version->name . PHP_EOL;
114+
}
115+
} catch (Exception $e) {
116+
echo "Error: No se pudo encontrar el Pokémon. Asegúrese de escribir el nombre o número correctamente." . PHP_EOL;
117+
}
118+
}
119+
120+
echo "¡Gracias por usar el buscador de Pokémon!" . PHP_EOL;

0 commit comments

Comments
 (0)