1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-05 10:49:37 +02:00
ampache/modules/plugins/TheAudioDb/TheAudioDb.plugin.php
Maniac 65a275a2d5 TheAudioDb plugin did not find results
TheAudioDb has changed the JSON result slightly, which causes the plugin
to look in not existing members.
The 'artist' member is now called 'artists'.
2016-05-14 11:00:30 +02:00

212 lines
6.9 KiB
PHP

<?php
/* vim:set softtabstop=4 shiftwidth=4 expandtab: */
/**
*
* LICENSE: GNU Affero General Public License, version 3 (AGPLv3)
* Copyright 2001 - 2015 Ampache.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
class AmpacheTheaudiodb
{
public $name = 'TheAudioDb';
public $categories = 'metadata';
public $description = 'TheAudioDb metadata integration';
public $url = 'http://www.theaudiodb.com';
public $version = '000002';
public $min_ampache = '370009';
public $max_ampache = '999999';
// These are internal settings used by this class, run this->load to
// fill them out
private $api_key;
/**
* Constructor
* This function does nothing
*/
public function __construct()
{
return true;
}
/**
* install
* This is a required plugin function
*/
public function install()
{
if (Preference::exists('tadb_api_key')) {
return false;
}
// API Key requested in TheAudioDB forum, see http://www.theaudiodb.com/forum/viewtopic.php?f=6&t=8&start=140
Preference::insert('tadb_api_key','TheAudioDb api key','41214789306c4690752dfb','75','string','plugins',$this->name);
return true;
} // install
/**
* uninstall
* This is a required plugin function
*/
public function uninstall()
{
Preference::delete('tadb_api_key');
return true;
} // uninstall
/**
* load
* This is a required plugin function; here it populates the prefs we
* need for this object.
*/
public function load($user)
{
$user->set_preferences();
$data = $user->prefs;
if (strlen(trim($data['tadb_api_key']))) {
$this->api_key = trim($data['tadb_api_key']);
} else {
debug_event($this->name,'No TheAudioDb api key, metadata plugin skipped','3');
return false;
}
return true;
} // load
/**
* get_metadata
* Returns song metadata for what we're passed in.
*/
public function get_metadata($gather_types, $media_info)
{
debug_event('tadb', 'Getting metadata from TheAudioDb...', '5');
// Music metadata only
if (!in_array('music', $gather_types)) {
debug_event('tadb', 'Not a valid media type, skipped.', '5');
return null;
}
try {
if (in_array('album', $gather_types)) {
$release = null;
if ($media_info['mb_albumid_group']) {
$album = $this->get_album($media_info['mb_albumid_group']);
if ($album) {
$release = $album->album[0];
}
} else {
$albums = $this->search_album($media_info['artist'], $media_info['title']);
if ($albums) {
$release = $albums->album[0];
}
}
if ($release) {
$results['art'] = $release->strAlbumThumb;
$results['title'] = $release->strAlbum;
}
} elseif (in_array('artist', $gather_types)) {
$release = null;
if ($media_info['mb_artistid']) {
$artist = $this->get_artist($media_info['mb_artistid']);
if ($artist) {
$release = $artist->artists[0];
}
} else {
$artists = $this->search_artists($media_info['title']);
if ($artists) {
$release = $artists->artists[0];
}
}
if ($release) {
$results['art'] = $release->strArtistThumb;
$results['title'] = $release->strArtist;
$results['summary'] = $release->strBiographyEN;
$results['yearformed'] = $release->intFormedYear;
}
} elseif ($media_info['mb_trackid']) {
$track = $this->get_track($media_info['mb_trackid']);
if ($track) {
$track = $track->track[0];
$results['mb_artistid'] = $track->strMusicBrainzArtistID;
$results['mb_albumid_group'] = $track->strMusicBrainzAlbumID;
$results['album'] = $track->strAlbum;
$results['artist'] = $track->strArtist;
$results['title'] = $track->strTrack;
}
}
} catch (Exception $e) {
debug_event('tadb', 'Error getting metadata: ' . $e->getMessage(), '1');
}
return $results;
} // get_metadata
public function gather_arts($type, $options = array(), $limit = 5)
{
debug_event('tadb', 'gather_arts for type `' . $type . '`', 5);
return Art::gather_metadata_plugin($this, $type, $options);
}
private function api_call($func)
{
$url = 'http://www.theaudiodb.com/api/v1/json/' . $this->api_key . '/' . $func;
debug_event('tadb', 'API call: ' . $url, 5);
$request = Requests::get($url, array(), Core::requests_options());
if ($request->status_code != 200) {
return null;
}
return json_decode($request->body);
}
private function search_artists($name)
{
return $this->api_call('search.php?s=' . rawurlencode($name));
}
private function get_artist($mbid)
{
return $this->api_call('artist-mb.php?i=' . $mbid);
}
private function search_album($artist, $album)
{
return $this->api_call('searchalbum.php?s=' . rawurlencode($artist) . '&a=' . rawurlencode($album));
}
private function get_album($mbid)
{
return $this->api_call('album-mb.php?i=' . $mbid);
}
private function search_track($artist, $title)
{
return $this->api_call('searchtrack.php?s=' . rawurlencode($artist) . '&t=' . rawurlencode($title));
}
private function get_track($mbid)
{
return $this->api_call('track-mb.php?i=' . $mbid);
}
} // end AmpacheTheaudiodb
?>