From e0b22d4edb5bd5b71fa74d7e27eddea156e17fd9 Mon Sep 17 00:00:00 2001 From: capitanwesler Date: Sun, 28 Mar 2021 21:10:59 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=BBFixing=20wrong=20property=20on=20re?= =?UTF-8?q?ponse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AnimeController.ts | 5 +- src/utils/util.ts | 188 +++++++++++++++++++++++------ 2 files changed, 154 insertions(+), 39 deletions(-) diff --git a/src/controllers/AnimeController.ts b/src/controllers/AnimeController.ts index 9629eee..3049940 100644 --- a/src/controllers/AnimeController.ts +++ b/src/controllers/AnimeController.ts @@ -643,7 +643,10 @@ export default class AnimeController { if (data) { /* Set the key in the redis cache. */ - redisClient.set(`servers_${hashStringMd5(id)}`, JSON.stringify(data)); + redisClient.set( + `servers_${hashStringMd5(id)}`, + JSON.stringify({ servers: data }), + ); /* After 24hrs expire the key. */ diff --git a/src/utils/util.ts b/src/utils/util.ts index 79414ec..4889155 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -56,12 +56,22 @@ export const animeExtraInfo = async (mal_id: number) => { }; try { - data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}`, { - parse: true, - scrapy: false, - }); + const resultQueryRedis: any = await redisClient.get( + `extraInfo_${hashStringMd5(`${mal_id}`)}`, + ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}`, { + parse: true, + scrapy: false, + }); - broadcast = data.broadcast.split('at')[0].trim().toLowerCase() || null; + broadcast = data.broadcast.split('at')[0].trim().toLowerCase() || null; + } } catch (err) { return err; } @@ -90,34 +100,90 @@ export const animeExtraInfo = async (mal_id: number) => { endingThemes: data.ending_themes || null, }; - return formattedObject; + if (formattedObject) { + /* Set the key in the redis cache. */ + + redisClient.set( + `extraInfo_${hashStringMd5(`${mal_id}`)}`, + JSON.stringify(formattedObject), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `extraInfo_${hashStringMd5(`${mal_id}`)}`, + new Date().getTime() + 86400000, + ); + + return formattedObject; + } else { + return null; + } }; export const getAnimeVideoPromo = async (mal_id: number) => { let data: any; try { - data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/videos`, { - parse: true, - scrapy: false, - }); + const resultQueryRedis: any = await redisClient.get( + `promoInfo_${hashStringMd5(`${mal_id}`)}`, + ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/videos`, { + parse: true, + scrapy: false, + }); + } } catch (err) { return err; } const promo: Promo[] = data.promo.map((item: Promo) => item); - return promo; + if (promo.length > 0) { + /* Set the key in the redis cache. */ + + redisClient.set( + `promoInfo_${hashStringMd5(`${mal_id}`)}`, + JSON.stringify(promo), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `promoInfo_${hashStringMd5(`${mal_id}`)}`, + new Date().getTime() + 86400000, + ); + + return promo; + } else { + return null; + } }; export const getAnimeCharacters = async (mal_id: number) => { let data: any; try { - data = await requestGot( - `${urls.BASE_JIKAN}anime/${mal_id}/characters_staff`, - { parse: true, scrapy: false }, + const resultQueryRedis: any = await redisClient.get( + `charactersInfo_${hashStringMd5(`${mal_id}`)}`, ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + data = await requestGot( + `${urls.BASE_JIKAN}anime/${mal_id}/characters_staff`, + { parse: true, scrapy: false }, + ); + } } catch (err) { return err; } @@ -131,7 +197,25 @@ export const getAnimeCharacters = async (mal_id: number) => { }; }); - return characters; + if (characters.length > 0) { + /* Set the key in the redis cache. */ + + redisClient.set( + `charactersInfo_${hashStringMd5(`${mal_id}`)}`, + JSON.stringify(characters), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `charactersInfo_${hashStringMd5(`${mal_id}`)}`, + new Date().getTime() + 86400000, + ); + + return characters; + } else { + return null; + } }; const getPosterAndType = async ( @@ -158,35 +242,63 @@ const getPosterAndType = async ( }; export const getRelatedAnimesFLV = async (id: string) => { - const $: cheerio.Root = await requestGot( - `${urls.BASE_ANIMEFLV}/anime/${id}`, - { - parse: false, - scrapy: true, - }, - ); + let $: cheerio.Root; + + try { + const resultQueryRedis: any = await redisClient.get( + `relatedFLV_${hashStringMd5(id)}`, + ); + + if (resultQueryRedis) { + const resultRedis: any = JSON.parse(resultQueryRedis); + + return resultRedis; + } else { + $ = await requestGot(`${urls.BASE_ANIMEFLV}/anime/${id}`, { + parse: false, + scrapy: true, + }); + } + } catch (err) { + return err; + } + let listRelated: any = {}; let relatedAnimes: RelatedAnime[] = []; - if ($('ul.ListAnmRel').length) { - $('ul.ListAnmRel li a').each((index: number, element: any) => { - listRelated[$(element).text()] = $(element).attr('href'); - }); + $('ul.ListAnmRel li a').each((index: number, element: any) => { + listRelated[$(element).text()] = $(element).attr('href'); + }); - for (const related in listRelated) { - let posterUrl: any = await getPosterAndType( - listRelated[related].split('/')[2], - undefined, - ); + for (const related in listRelated) { + let posterUrl: any = await getPosterAndType( + listRelated[related].split('/')[2], + undefined, + ); - if (posterUrl !== '') { - relatedAnimes.push({ - title: related, - type: posterUrl[1], - poster: posterUrl[0], - }); - } + if (posterUrl !== '') { + relatedAnimes.push({ + title: related, + type: posterUrl[1], + poster: posterUrl[0], + }); } + } + + if (relatedAnimes.length > 0) { + /* Set the key in the redis cache. */ + + redisClient.set( + `relatedFLV_${hashStringMd5(id)}`, + JSON.stringify(relatedAnimes), + ); + + /* After 24hrs expire the key. */ + + redisClient.expireat( + `relatedFLV_${hashStringMd5(id)}`, + new Date().getTime() + 86400000, + ); return relatedAnimes; } else {