Harjutused 6-12

Harjutus 6 Lõpptulemuseks peaksid saama andmeid peekoni kohta Maksim T / Aleksandr B /Timur:

Põhilised sammud:

API-le saadetakse taotlus. Vastus teisendatakse loeteluks. Tulemus kuvatakse lehel.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>Bacon API</title>
    <style>
      body {
        font-family: Arial, sans-serif;
        background-color: #f4f4f4;
        color: #333;
        text-align: center;
        margin-top: 50px;
      }
 
      button {
        background-color: #a455ff;
        color: white;
        padding: 10px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        font-size: 16px;
        transition: background-color 0.3s ease;
      }
 
      button:hover {
        background-color: #a455ff;
      }
 
      p {
        margin-top: 20px;
        font-size: 18px;
        text-align: left;
      }
    </style>
  </head>
  <body>
    <button type="button" onclick="loadDoc()">Request bacon</button>
    <p id="demo"></p>
 
    <script>
      function loadDoc() {
        const xhttp = new XMLHttpRequest(); // Loome uue XMLHttpRequest objekti
        xhttp.onload = function () {
          // Funktsioon, mis käivitatakse, kui päring on lõppenud
          const response = JSON.parse(this.responseText); // Tõlgime vastuse JSON-iks
          const listContainer = document.getElementById("demo"); // Leiame elemendi, kuhu sisu lisada
          const ul = document.createElement("ul"); // Loome uue <ul> elemendi
          response.forEach(function (item) {
            // Lisame vastuse elemendid loeteluna
            const li = document.createElement("li");
            li.textContent = item; // Määrame <li> tekstiks vastuse sisu
            ul.appendChild(li); // Lisame <li> loetelusse
          });
          listContainer.innerHTML = ""; // Tühjendame vana sisu
          listContainer.appendChild(ul); // Lisame <ul> elemendi
        };
        xhttp.open("GET", "https://baconipsum.com/api/?type=all-meat"); // Avame GET päringu
        xhttp.send(); // Saadame päringu
      }
    </script>
  </body>
</html>
Request bacon

Harjutus 7 Github andmete kasutamine API kaudu Luca / Artur / Veronika

Funktsioon saadab päringu, et laadida XML-fail.

Kui päring õnnestub, loetakse XML-failist mängude andmed.

Mängude nimed, hinnad ja platvormid lisatakse tabelisse.

Tabel kuvatakse lehel.

import "./styles.css";  // Impordi stiilid välisest failist
 
// Muutujad profiiliandmete salvestamiseks
let profileName = "";
let profileId = "";
let profileLink = "";
let profileRepos = "";
let profilePicture = "";
 
// Asünkroonne funktsioon GitHubi profiiliandmete pärimiseks
async function fetchProfile(username) {
  try {
    // Tee päring GitHubi API-le profiiliandmete saamiseks
    const response = await fetch(`https://api.github.com/users/${username}`);
     
    // Muudame vastus JSON formaati
    const data = await response.json();
 
    // Uuendame muutujaid saadud andmetega
    profileName = data.login;
    profileId = data.id;
    profileLink = data.html_url;
    profileRepos = data.public_repos;
    profilePicture = data.avatar_url;
 
    // Kuvame uuendatud andmed lehel
    renderPage();
  } catch (error) {
    // Käsitle päringu vigu
    console.error("Viga profiili pärimisel:", error);
  }
}
 
// Funktsioon lehe sisu kuvamiseks
function renderPage() {
  // Uuenda elemendi sisu, mille id on "app"
  document.getElementById("app").innerHTML = `
    <div>
      <h1>Github profiili vaatamine</h1>
      <p>Palun sisesta profiilinimi: </p>
      <input id="username-input" />  <!-- Sisendväli kasutajanime sisestamiseks -->
      <div class="content">
        <h1 id="name">Nimi: ${profileName}</h1>
        <p id="id">Id: ${profileId}</p>
        <p id="reports">Avalikud repod: ${profileRepos}</p>
        <p id="profile-url">
          Link: <a href="${profileLink}" target="_blank">/users/${profileName}</a>
          <!-- Link kasutaja profiilile -->
        </p>
        <div id="profile-avatar">
          <img src="${profilePicture}" alt="${profileName} profiilifoto laadimine...." 
               style="width: 100px; height: 100px; border-radius: 60%;" />
          <!-- Kasutaja avatar -->
        </div>
      </div>
    </div>
  `;
 
  // Lisame sündmuste töötleja sisendväljale
  document
    .getElementById("username-input")
    .addEventListener("keyup", function (event) {
      // Kontrolli, kas vajutati Enteri klahvi
      if (event.key === "Enter") {
        // Hangi kasutaja nimi sisendväljalt
        const username = event.target.value;
        // Kutsu välja profiili pärimise funktsioon
        fetchProfile(username);
      }
    });
}
 
// Esmane lehe kuvamine
renderPage();
body {
  background: linear-gradient(135deg, #000, #1a1a1a), url("clonnex.gif");
  background-size: cover;
  background-blend-mode: overlay;
  color: #e0e0e0;
  font-family: "Roboto", sans-serif;
  margin: 0;
  padding: 20px;
}
 
h1 {
  color: #ff3399;
  font-size: 36px;
  font-weight: 700;
  text-shadow: 2px 2px 5px rgba(255, 51, 102, 0.6);
  margin-bottom: 15px;
  letter-spacing: 1.5px;
}
 
p {
  font-size: 20px;
  line-height: 1.8;
  margin: 0;
}
 
#json {
  background: rgba(28, 28, 28, 0.9);
  border-radius: 12px;
  padding: 25px;
  margin-bottom: 25px;
  box-shadow: 0 6px 12px rgba(255, 0, 102, 0.4);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
 
#json:hover {
  transform: translateY(-5px);
  box-shadow: 0 8px 16px rgba(255, 0, 102, 0.6);
}
 
#json:last-child {
  margin-bottom: 0;
}

Harjutus 8 Xml Sündmuspõhine API peab pakkuma oma tarbijatele järgmist:

  1. tellijatele sündmuste edastamine asünkroonselt
  2. mehhanism, mis võimaldab tarbijatel tellida neile huvipakkuvaid sündmusi

Arkadi / Aleksandr R / Maksim M

Funktsioon saadab päringu GitHub API-le, et saada kasutaja andmed.

Kui päring õnnestub, loetakse kasutaja profiili andmed (nimi, ID, repod, avatar).

Profiili andmed (nimi, repod, profiilipilt) kuvatakse lehel.

Kasutaja saab sisestada GitHubi kasutajanime, vajutada Enter ja näha selle kasutaja andmeid.

<?xml version="1.0" encoding="UTF-8"?>
<gamelist>
    <game>
        <title lang="en">Hearthstone</title>
        <price>Free</price>
        <platforms>
        <platform>PC</platform>
        </platforms>
    </game>
    <game>
        <title lang="en">Minecraft</title>
        <price>10.99</price>
        <platforms>
        <platform>xbox</platform>
        </platforms>
    </game>
    <game>
        <title lang="en">Dota 2</title>
        <price>life</price>
        <platforms>
        <platform>PC</platform>
        </platforms>
    </game>
</gamelist>
// Funktsioon XML-i laadimiseks ja töötlemiseks
function loadXMLDoc() {
  let xmlhttp = new XMLHttpRequest(); // Loome XMLHttpRequest objekti
  xmlhttp.onreadystatechange = function () { // Määrame, mis juhtub, kui päringu olek muutub
    if (this.readyState === 4 && this.status === 200) { // Kui päringu olek on '4' (täidetud) ja staatusekood on '200' (edukas)
      getGameDetails(this); // Kutsume funktsiooni mängude detailide saamiseks
    }
  };
  xmlhttp.open("GET", "src/games.xml", true); // Avame päringu, et saada XML-fail
  xmlhttp.send(); // Saadame päringu
}
 
// Funktsioon mängude detailide töötlemiseks ja tabelisse lisamiseks
function getGameDetails(xml) {
  const xmlDoc = xml.responseXML; // Saame XML-i vastuse
  let tableRows = "<tr><th>Title</th><th>Price</th><th>Platforms</th></tr>"; // Loome tabelipealkirjad
  let gameElements = xmlDoc.getElementsByTagName("game"); // Otsime kõik 'game' elemendid
  for (let i = 0; i < gameElements.length; i++) { // Läbime kõik 'game' elemendid
    tableRows +=
      "<tr><td>" +
      gameElements[i].getElementsByTagName("title")[0].childNodes[0].nodeValue +
      "</td><td>" +
      gameElements[i].getElementsByTagName("price")[0].childNodes[0].nodeValue +
      "</td><td>";
    let platforms = gameElements[i].getElementsByTagName("platform"); // Otsime mängu platvormid
    for (let j = 0; j < platforms.length; j++) { // Läbime kõik platvormid
      tableRows += platforms[j].childNodes[0].nodeValue + "/"; // Lisame platvormi nime tabelisse
    }
    tableRows += "</td></tr>"; // Lisame tabeli rea lõppu
  }
  document.getElementById("xmlTable").innerHTML = tableRows; // Asetame loodud tabeli HTMLi
}
 
// Loome tabeli elemendi, kuhu andmed hiljem kuvatakse
document.getElementById("app").innerHTML = `<table id="xmlTable"></table>`;
 
// Kutsume üles XML-faili laadimise funktsiooni
loadXMLDoc();

Harjutus 10 Saada email Github push-imisel Matvei / Yaroslav / Darja:


Kasutaja initsialiseerib uue Git-repositooriumi ja lisab failid jälgimiseks.

Create commit: Pärast muudatuste lisamist indeksisse luuakse commit koos kirjeldusega.

Kasutaja saadab kohalikud muudatused GitHubi kaugrepositooriumi, kasutades käsku git push.

Pärast muudatuste edukat tõukamist saadab GitHub push-teate peamise repositooriumi harule ja posti.

Harjutus 11 Anton / Deniss / Martin K: Minu menüüs on

Harjutus 12 kasutada bcrypt raamatukogu juhusliku stringi genereerimiseks, et tugevdada paroolide turvalisust.

Parool ‘deniss’ kombineeritakse seejärel soolaga ja räsitakse, et saada salasõna krüpteeritud versioon.

Kood mõõdab aega, mis kulus soola genereerimiseks ja salasõna häkkimiseks, ning väljastab tulemused konsooli.

const bcrypt = require('bcrypt');

const myPassword = 'deniss';

console.time(  'Time to generate salt');
const salt = bcrypt.genSaltSync(10);
console.log('This is your salt: ' + salt);
console.timeEnd(  'Time to generate salt');
console.time( 'Time to generate hash');
const hashedPassword = bcrypt.hashSync(myPassword, salt);
console.log(myPassword + ' is your password & this is your password after hashing it: ' + hashedPassword);
console.timeEnd(  'Time to generate hash');