mirror of
https://github.com/mjrode/WhatToWatch.git
synced 2025-12-30 18:19:46 -06:00
Add qloo API endpoints
This commit is contained in:
@@ -3,11 +3,8 @@ import PropTypes from 'prop-types';
|
||||
import {withStyles} from '@material-ui/core/styles';
|
||||
import {connect} from 'react-redux';
|
||||
import styles from '../css/materialize.css.js';
|
||||
import axios from 'axios';
|
||||
import MediaCard from './MediaCard';
|
||||
import * as actions from '../actions';
|
||||
import {BrowserRouter, Link} from 'react-router-dom';
|
||||
import Similar from './plex/Similar';
|
||||
|
||||
class MediaList extends Component {
|
||||
componentDidMount() {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"debug": "nodemon --exec babel-node --inspect index.js",
|
||||
"db:reset": "NODE_ENV=test npx sequelize db:migrate:undo:all && NODE_ENV=test npx sequelize db:migrate && npx sequelize db:migrate:undo:all && npx sequelize db:migrate",
|
||||
"start": "babel-node index.js",
|
||||
"server": "babel-node index.js",
|
||||
"server": "nodemon --exec babel-node index.js",
|
||||
"client": "npm run start --prefix client",
|
||||
"heroku-postbuild": "npm install && NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
|
||||
},
|
||||
|
||||
9
server/controllers/movieDb.controller.js
Normal file
9
server/controllers/movieDb.controller.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import {Router} from 'express';
|
||||
import movieDbService from '../services/moviedb';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/tv/search', movieDbService.searchTv);
|
||||
router.get('/tv/similar', movieDbService.similarTv);
|
||||
|
||||
export default router;
|
||||
@@ -5,5 +5,6 @@ const router = Router();
|
||||
|
||||
router.get('/similar', tdawService.similarMedia);
|
||||
router.get('/most-watched', tdawService.mostWatched);
|
||||
router.get('/qloo/media', tdawService.qlooMedia);
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -7,6 +7,7 @@ import {sequelize} from './db/models';
|
||||
import keys from '../config';
|
||||
import plex from './routes/plex.route';
|
||||
import tdaw from './routes/tdaw.route';
|
||||
import movieDb from './routes/movieDb.route';
|
||||
import auth from './routes/auth.route';
|
||||
import recommend from './routes/recommend.route';
|
||||
require('./services/auth/passport');
|
||||
@@ -37,6 +38,7 @@ export default () => {
|
||||
// Set up routes
|
||||
server.use('/api/plex', plex);
|
||||
server.use('/api/tdaw', tdaw);
|
||||
server.use('/api/moviedb', movieDb);
|
||||
server.use('/api/recommend', recommend);
|
||||
server.use('/auth', auth);
|
||||
server.use('/api/auth', auth);
|
||||
|
||||
9
server/routes/movieDb.route.js
Normal file
9
server/routes/movieDb.route.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import movieDbController from '../controllers/movieDb.controller';
|
||||
|
||||
const express = require('express');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.use(movieDbController);
|
||||
|
||||
export default router;
|
||||
@@ -8,7 +8,7 @@ const formatResponse = response => {
|
||||
return JSON.parse(parser.toJson(response.data));
|
||||
}
|
||||
if (response.config.url.includes('tastedive')) {
|
||||
console.log('taste dive response', response.data);
|
||||
console.log('taste dive response', response.data.Similar.Results[0]);
|
||||
return response.data.Similar.Results;
|
||||
}
|
||||
return response.data;
|
||||
|
||||
22
server/services/moviedb/index.js
Normal file
22
server/services/moviedb/index.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import movieDbApi from './movieDbApi';
|
||||
import helpers from '../helpers';
|
||||
|
||||
const searchTv = async (req, res) => {
|
||||
const {showName} = req.query;
|
||||
const response = await movieDbApi.searchTv(showName);
|
||||
console.log(response);
|
||||
res.json(response);
|
||||
};
|
||||
|
||||
const similarTv = async (req, res) => {
|
||||
const {showName} = req.query;
|
||||
const searchResponse = await movieDbApi.searchTv(showName);
|
||||
const response = await movieDbApi.similarTV(searchResponse.id);
|
||||
console.log(response);
|
||||
res.json(response);
|
||||
};
|
||||
|
||||
export default {
|
||||
searchTv,
|
||||
similarTv,
|
||||
};
|
||||
34
server/services/moviedb/movieDbApi.js
Normal file
34
server/services/moviedb/movieDbApi.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import config from '../../../config';
|
||||
import helpers from '../helpers';
|
||||
import models from '../../db/models';
|
||||
import MovieDb from 'moviedb-promise';
|
||||
const mdb = new MovieDb(config.server.movieApiKey);
|
||||
|
||||
const searchTv = async showName => {
|
||||
try {
|
||||
const response = await mdb.searchTv({
|
||||
query: showName,
|
||||
});
|
||||
|
||||
const show = response.results.filter(
|
||||
result => result.original_name.toLowerCase() === showName.toLowerCase(),
|
||||
)[0];
|
||||
|
||||
return show;
|
||||
} catch (error) {
|
||||
helpers.handleError(error, 'searchTv');
|
||||
}
|
||||
};
|
||||
|
||||
const similarTV = async showId => {
|
||||
try {
|
||||
console.log('showID', showId);
|
||||
const response = await mdb.tvSimilar({id: showId});
|
||||
console.log(response);
|
||||
return response;
|
||||
} catch (error) {
|
||||
helpers.handleError(error, 'searchTv');
|
||||
}
|
||||
};
|
||||
|
||||
export default {searchTv, similarTV};
|
||||
@@ -3,8 +3,7 @@ import helpers from '../helpers';
|
||||
|
||||
const similarMedia = async (req, res) => {
|
||||
try {
|
||||
const {mediaName} = req.query;
|
||||
const {mediaType} = req.query;
|
||||
const {mediaName, mediaType} = req.query;
|
||||
const response = await tdawApi.similarMedia(mediaName, mediaType);
|
||||
res.json(response);
|
||||
} catch (error) {
|
||||
@@ -19,7 +18,19 @@ const mostWatched = async (req, res) => {
|
||||
res.json(response);
|
||||
};
|
||||
|
||||
const qlooMedia = async (req, res) => {
|
||||
try {
|
||||
const {mediaName, mediaType} = req.query;
|
||||
const mediaId = await tdawApi.qlooMediaId(mediaName, mediaType);
|
||||
const response = await tdawApi.qlooMedia(mediaId, mediaType);
|
||||
res.json(response);
|
||||
} catch (error) {
|
||||
helpers.handleError(res, tdawApi.name);
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
similarMedia,
|
||||
mostWatched,
|
||||
qlooMedia,
|
||||
};
|
||||
|
||||
@@ -21,7 +21,6 @@ const similarMedia = async function(mediaName, mediaType) {
|
||||
const response = await helpers.request(mediaUrl);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return {
|
||||
code: error.status,
|
||||
message: error.statusText,
|
||||
@@ -37,4 +36,49 @@ const mostWatched = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
export default {similarMedia, tdawMediaUrl, mostWatched};
|
||||
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,
|
||||
mostWatched,
|
||||
qlooMediaId,
|
||||
qlooMedia,
|
||||
};
|
||||
|
||||
@@ -3,15 +3,20 @@ import * as nocks from '../../../nocks';
|
||||
import app from '../../../../index';
|
||||
|
||||
describe('Users', () => {
|
||||
describe('GET /api/v1/plex/auth', async () => {
|
||||
it('should get plex auth token', done => {
|
||||
describe('GET /api/plex/auth', async () => {
|
||||
it.only('should get plex auth token', done => {
|
||||
nocks.auth();
|
||||
|
||||
chai
|
||||
.request(app)
|
||||
.get('/api/plex/auth')
|
||||
.query({username: 'username', password: 'password'})
|
||||
.get('/api/plex/token')
|
||||
.query({
|
||||
username: 'username',
|
||||
password: 'password',
|
||||
plexUrl: 'plexserver.com',
|
||||
})
|
||||
.end((err, res) => {
|
||||
console.log(res);
|
||||
res.should.have.status(200);
|
||||
res.body.should.equal('testPlexApiToken');
|
||||
done();
|
||||
|
||||
Reference in New Issue
Block a user