mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-02-04 04:20:01 +01:00
Add:Podcast iTunes search api and iTunes provider
This commit is contained in:
parent
2a4cbd48b8
commit
43f48b65f8
@ -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')
|
||||
|
@ -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() {
|
@ -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() {
|
25
server/finders/PodcastFinder.js
Normal file
25
server/finders/PodcastFinder.js
Normal 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
|
33
server/providers/iTunes.js
Normal file
33
server/providers/iTunes.js
Normal 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
|
@ -1,4 +1,4 @@
|
||||
const AuthorFinder = require('../AuthorFinder')
|
||||
const AuthorFinder = require('../finders/AuthorFinder')
|
||||
|
||||
class AuthorScanner {
|
||||
constructor(db) {
|
||||
|
@ -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')
|
||||
|
Loading…
Reference in New Issue
Block a user