Add:Podcast iTunes search api and iTunes provider

This commit is contained in:
advplyr 2022-03-06 16:32:04 -06:00
parent 2a4cbd48b8
commit 43f48b65f8
7 changed files with 81 additions and 14 deletions

View File

@ -15,8 +15,9 @@ const CollectionController = require('./controllers/CollectionController')
const MeController = require('./controllers/MeController')
const BackupController = require('./controllers/BackupController')
const BookFinder = require('./BookFinder')
const AuthorFinder = require('./AuthorFinder')
const BookFinder = require('./finders/BookFinder')
const AuthorFinder = require('./finders/AuthorFinder')
const PodcastFinder = require('./finders/PodcastFinder')
const FileSystemController = require('./controllers/FileSystemController')
class ApiController {
@ -36,6 +37,7 @@ class ApiController {
this.bookFinder = new BookFinder()
this.authorFinder = new AuthorFinder()
this.podcastFinder = new PodcastFinder()
this.router = express()
this.init()
@ -131,6 +133,7 @@ class ApiController {
//
this.router.get('/search/covers', this.findCovers.bind(this))
this.router.get('/search/books', this.findBooks.bind(this))
this.router.get('/search/podcast', this.findPodcasts.bind(this))
//
// File System Routes
@ -181,6 +184,12 @@ class ApiController {
res.json(result)
}
async findPodcasts(req, res) {
var term = req.query.term
var results = await this.podcastFinder.search(term)
res.json(results)
}
authorize(req, res) {
if (!req.user) {
Logger.error('Invalid user in authorize')

View File

@ -1,10 +1,10 @@
const fs = require('fs-extra')
const Logger = require('./Logger')
const Logger = require('../Logger')
const Path = require('path')
const Author = require('./objects/Author')
const Audnexus = require('./providers/Audnexus')
const Author = require('../objects/Author')
const Audnexus = require('../providers/Audnexus')
const { downloadFile } = require('./utils/fileUtils')
const { downloadFile } = require('../utils/fileUtils')
class AuthorFinder {
constructor() {

View File

@ -1,9 +1,9 @@
const OpenLibrary = require('./providers/OpenLibrary')
const LibGen = require('./providers/LibGen')
const GoogleBooks = require('./providers/GoogleBooks')
const Audible = require('./providers/Audible')
const Logger = require('./Logger')
const { levenshteinDistance } = require('./utils/index')
const OpenLibrary = require('../providers/OpenLibrary')
const LibGen = require('../providers/LibGen')
const GoogleBooks = require('../providers/GoogleBooks')
const Audible = require('../providers/Audible')
const Logger = require('../Logger')
const { levenshteinDistance } = require('../utils/index')
class BookFinder {
constructor() {

View File

@ -0,0 +1,25 @@
const Logger = require('../Logger')
const iTunes = require('../providers/iTunes')
class PodcastFinder {
constructor() {
this.iTunesApi = new iTunes()
}
async search(term, options = {}) {
if (!term) return null
Logger.debug(`[iTunes] Searching for podcast with term "${term}"`)
var searchOptions = {
term,
media: 'podcast',
entity: 'podcast',
...options
}
var results = await this.iTunesApi.search(searchOptions)
Logger.debug(`[iTunes] Podcast search for "${term}" returned ${results.length} results`)
return results
}
}
module.exports = PodcastFinder

View File

@ -0,0 +1,33 @@
const axios = require('axios')
const Logger = require('../Logger')
class iTunes {
constructor() { }
// https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/Searching.html
search(options) {
if (!options.term) {
Logger.error('[iTunes] Invalid search options - no term')
return []
}
var query = {
term: options.term,
media: options.media,
entity: options.entity,
lang: options.lang,
limit: options.limit,
country: options.country
}
console.log('Query', query)
return axios.get('https://itunes.apple.com/search', { params: query }).then((response) => {
var data = response.data
console.log('data', data)
return data.results || []
}).catch((error) => {
Logger.error(`[iTunes] search request error`, error)
return []
})
}
}
module.exports = iTunes

View File

@ -1,4 +1,4 @@
const AuthorFinder = require('../AuthorFinder')
const AuthorFinder = require('../finders/AuthorFinder')
class AuthorScanner {
constructor(db) {

View File

@ -9,7 +9,7 @@ const { comparePaths, getId } = require('../utils/index')
const { ScanResult, LogLevel } = require('../utils/constants')
const AudioFileScanner = require('./AudioFileScanner')
const BookFinder = require('../BookFinder')
const BookFinder = require('../finders/BookFinder')
const Audiobook = require('../objects/Audiobook')
const LibraryScan = require('./LibraryScan')
const ScanOptions = require('./ScanOptions')