Advertisement
Sub0Zero1990

backend

Feb 21st, 2025
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mangaRouter.get('/get', async (req, res) => {
  2.     try {
  3.         const basePath = "public/mangaImages"
  4.         // Effettuo una richiesta HTTP GET alla pagina di ricerca di MangaDex
  5.         // per ottenere i manga che corrispondono al titolo cercato
  6.         // Includo le cover art e ordino per numero di follower decrescente
  7.         const mangaResponse = await axios.get(`${baseUrl}/manga`, {params: {
  8.             title: req.query.title,
  9.             'includes[]': 'cover_art',
  10.             'order[relevance]': 'desc',
  11.         }}).catch(err => {
  12.             throw new Error(err);
  13.         });
  14.  
  15.         // Leggo il contenuto della directory 'mangaImages'
  16.         const files = await fsPromises.readdir(basePath);
  17.  
  18.         try {
  19.             // Elimino tutti i file presenti nella directory 'mangaImages'
  20.             // per fare spazio alle nuove immagini che verranno scaricate
  21.             for(let file of files) {
  22.                 await fsPromises.unlink(`${basePath}/${file}`);
  23.             }
  24.         } catch (e) {
  25.             throw new Error(err);
  26.         }
  27.  
  28.         // Estraggo l'ID del manga dalla risposta
  29.         const mangaId = mangaResponse.data.data[0].id;
  30.  
  31.         // Effettuo una richiesta HTTP GET per ottenere tutte le cover art disponibili per questo manga
  32.         // Limito a 100 risultati e le ordino per volume in ordine crescente
  33.         const coverList = await axios.get(`${baseUrl}/cover`, {
  34.             params: {
  35.                 'manga[]': mangaId,
  36.                 order: { volume: 'asc' },
  37.                 'locales[]': 'ja',
  38.                 limit: 100
  39.             }
  40.         })
  41.  
  42.         let i = 0;
  43.  
  44.         for(let img of coverList.data.data.filter(coverId => coverId.attributes.locale === 'ja')) {
  45.             try {
  46.                 const coverImage = await axios.get(`${imagesUrl}${mangaId}/${img.attributes.fileName}.256.jpg`, {
  47.                     responseType: 'arraybuffer'
  48.                     });
  49.  
  50.                 await fsPromises.writeFile(`${basePath}/cover${i}.jpg`, coverImage.data)
  51.  
  52.                 i++;
  53.             } catch (err) {
  54.                 throw new Error(err);
  55.             }
  56.         };
  57.  
  58.         const paths = (await fsPromises.readdir(`${basePath}`)).map((path) => '/mangaImages/' + path);
  59.  
  60.         return res.status(200)
  61.         .set('Cache-Control', 'no-store')
  62.         .json({
  63.             data: {
  64.                 imagesPath: paths
  65.             }
  66.         })
  67.     } catch (e) {
  68.         // In caso di errori durante l'esecuzione, stampo l'errore in console
  69.         console.log("Si è verificato un errore durante il reperimento dei dati: ", e);
  70.  
  71.         res.status(401).json({
  72.             message: "Errore" + e
  73.         })
  74.     }
  75. })
Tags: expressjs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement