Files
WhatToWatch/server/services/tdaw/tdawApi.js
2019-09-20 00:08:24 -05:00

110 lines
3.0 KiB
JavaScript

import config from '../../../config';
import helpers from '../helpers';
import models from '../../db/models';
import movieDbApi from '../moviedb/movieDbApi';
import logger from '../../../config/winston';
const tdawMediaUrl = function(mediaName, mediaType) {
return {
host: config.tdaw.tdawApiUrl,
queryParams: {
q: mediaName,
k: config.tdaw.token,
info: 1,
type: mediaType,
},
};
};
const similarMedia = async function(req, mediaName, mediaType) {
try {
const formattedShowName = mediaName.replace(/ *\([^)]*\) */g, '');
logger.info(
`Show name for tdaw similar req ${formattedShowName}`,
);
const urlParams = tdawMediaUrl(formattedShowName, mediaType);
const mediaUrl = helpers.buildUrl(urlParams);
const similarResponse = await helpers.request(mediaUrl);
console.log('TCL: tdaw -> similarResponse', similarResponse);
const jsonLibrary = await models.PlexLibrary.findAll({
userId: req.user.id,
type: 'show',
});
// Use Sonarr list instead
const libraryTitles = jsonLibrary.map(show =>
show.title.toLowerCase(),
);
const filteredResponse = await similarResponse.filter(
show => !libraryTitles.includes(show.Name.toLowerCase()),
);
console.log('filteredResponse ---', filteredResponse);
const movieDbInfo = await getShowData(filteredResponse);
console.log('movieDbInfo', movieDbInfo);
return movieDbInfo;
} catch (error) {
return {
code: error.status,
message: error.statusText,
url: error.config.url,
};
}
};
const getShowData = async filteredResponse => {
const showData = await Promise.all(
filteredResponse.map(show => movieDbApi.searchTv(show.Name)),
);
console.log('mapped show data', showData);
return showData.filter(obj => obj);
};
const qlooMediaId = async (mediaName, mediaType) => {
const params = {
host:
'https://qsz08t9vtl.execute-api.us-east-1.amazonaws.com/production/search',
queryParams: { query: mediaName },
};
const formattedMediaType = mediaTypeMapping()[mediaType];
const response = await helpers.request(helpers.buildUrl(params));
const filteredResponse = response.results.filter(results =>
results.categories.includes(formattedMediaType),
);
return filteredResponse[0].id;
};
const mediaTypeMapping = () => {
return { tv: 'tv/shows', movie: 'film/movies' };
};
const qlooMedia = async (mediaId, mediaType) => {
// recs?category=tv/shows&sample=70AB59C0-789F-4E11-B72D-FE09BF76901E&prioritize_indomain=False
const formattedMediaType = mediaTypeMapping()[mediaType];
const params = {
host:
'https://qsz08t9vtl.execute-api.us-east-1.amazonaws.com/production/recs',
queryParams: {
category: formattedMediaType,
sample: mediaId,
prioritize_indomain: 'False',
},
};
const response = await helpers.request(helpers.buildUrl(params));
console.log(response);
return response;
};
export default {
similarMedia,
tdawMediaUrl,
qlooMediaId,
qlooMedia,
};