Skip to content

Instantly share code, notes, and snippets.

@danielfnz
Created September 8, 2021 03:16
Show Gist options
  • Save danielfnz/0aad52b785de29e27ba51d8163ccf974 to your computer and use it in GitHub Desktop.
Save danielfnz/0aad52b785de29e27ba51d8163ccf974 to your computer and use it in GitHub Desktop.
Criação de API de recomendação de videos, textos e imagens pelo termo informado
//=======================================USO API DO YOUTUBE====================================
//Parametros esperados;
- termo
- tipo
// URL DA API PARA BUSCAR VIDEOS DE ACORDO COM OS PARAMETROS PASSADOS
var youtubeURL = `https://youtube.googleapis.com/youtube/v3/search?key=${youtubeKey}&maxResults=5&type=video&regionCode=BR&videoCategoryId=27&videoDuration=medium&q=conceito ${termo}`;
//A API BUSCA NO YOUTUBE SOMENTE PARA RECOMENDAR Conhecimento
if (request.query.tipo == "Conhecimento") {
//REALIZA REQUISIÇÃO HTTPS
const requestThree = axios.get(youtubeURL);
//AGUARDA A RESPOSTA DA REQUISIÇÃO
await requestThree.then(async youtubeResponse => {
// VERIFICA SE RETORNOU PELO MENOS 1 VIDEO
if (youtubeResponse.data && youtubeResponse.data['items'].length > 0) {
// PERCORRE CADA VIDEO
youtubeResponse.data['items'].forEach(video => {
//ADICIONA NO ARRAY DE OBJETOS RECOMENDADOS O LINK PARA O VIDEO DO YOUTUBE
objetosRecomendados.push({
conteudo: "https://www.youtube.com/watch?v=" + video.id.videoId,
data: new Date(),
tipo: 'video'
});
});
}
});
}
//================================================================================================
//=======================================USO API DA WIKIPEDIA=====================================
//Parametros esperados;
- termo
- tipo
// URL DA API PARA BUSCAR TEXTOS DE ACORDO COM OS PARAMETROS PASSADOS
let wikipediaTextURL = `https://pt.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&redirects=1&titles=${termo}`;
// URL DA API PARA BUSCAR IMAGENS DE ACORDO COM OS PARAMETROS PASSADOS
let wikipediaImageURL = `https://pt.wikipedia.org/w/api.php?action=query&prop=pageimages&format=json&piprop=original&titles=${termo}`;
//REALIZA REQUISIÇÃO HTTPS
const requestOne = axios.get(wikipediaTextURL);
const requestTwo = axios.get(wikipediaImageURL);
//AGUARDA A RESPOSTA DA REQUISIÇÃO PARA BUSCA DE TEXTOS DA WIKIPEDIA
await requestOne.then(async wikipediaTextResponse => {
// VERIFICA SE A REQUISIÇÃO RETORNOU ALGO
if (wikipediaTextResponse.data) {
// VERIFICA SE A REQUISIÇÃO RETORNOU ALGUMA PAGINA
if (wikipediaTextResponse.data.query.pages) {
// PERCORRE TODAS AS PAGINAS PARA BUSCAR PELO TERMO "EXTRACT", QUE SERIA O TEXTO DA PAGINA EXTRAIDO
Object.keys(wikipediaTextResponse.data.query.pages).forEach(function (key) {
// SE TIVER O TERMO "EXTRACT", ENTRA E CAPTURA SOMENTE O PRIMEIRO PARAGRAGRAFO
if (wikipediaTextResponse.data.query.pages[key]['extract']) {
var contents = wikipediaTextResponse.data.query.pages[key]['extract'].split('\n\n\n');
if (contents[0]) {
var firstContent = contents[0];
// CAPTURA O TEXTO DO PRIMEIRO PARAGRAFO
if (firstContent.split('.')[0]) {
var firstParagraph = firstContent.split('</p>')[0].replace(/<[^>]+>/g, '');
//ADICIONA NO ARRAY DE OBJETOS RECOMENDADOS O CONTEUDO DO PRIMEIRO PARAGRAFO
objetosRecomendados.push({
conteudo: firstParagraph,
data: new Date(),
tipo: 'texto'
});
}
}
}
});
}
}
})
//AGUARDA A RESPOSTA DA REQUISIÇÃO PARA BUSCA DE IMAGENS DA WIKIPEDIA
await requestTwo.then(async wikipediaImageResponse => {
// VERIFICA SE A REQUISIÇÃO RETORNOU ALGO
if (wikipediaImageResponse.data) {
// VERIFICA SE A REQUISIÇÃO RETORNOU ALGUMA PAGINA
if (wikipediaImageResponse.data.query.pages) {
// PERCORRE TODAS AS PAGINAS PARA BUSCAR PELO TERMO "ORIGINAL", QUE SERIA O URL ORIGINAL DA PAGINA
Object.keys(wikipediaImageResponse.data.query.pages).forEach(function (key) {
// SE TIVER O TERMO "original", ENTRA E ADICIONA A IMAGEM NO ARRAY DE RESPOSTA
if (wikipediaImageResponse.data.query.pages[key]['original']) {
//ADICIONA NO ARRAY DE OBJETOS RECOMENDADOS A URL ENCONTRADA
objetosRecomendados.push({
conteudo: wikipediaImageResponse.data.query.pages[key]['original']['source'],
data: new Date(),
tipo: 'imagem'
});
}
});
}
}
});
//================================================================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment