sintonia_webapp/app/Http/Controllers/MusicBrainzController.php
2024-10-04 15:29:16 +02:00

84 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use MusicBrainz\Filter\PageFilter;
use MusicBrainz\Filter\Search\ArtistFilter;
use MusicBrainz\Filter\Search\RecordingFilter;
use MusicBrainz\Filter\Search\ReleaseFilter;
use MusicBrainz\HttpAdapter\GuzzleHttpAdapter;
use MusicBrainz\MusicBrainz;
use MusicBrainz\Value\Length;
use MusicBrainz\Value\Name;
use MusicBrainz\Value\Release;
class MusicBrainzController extends Controller
{
private $guzzleHttpAdapter;
private $musicBrainz;
public function __construct()
{
$this->guzzleHttpAdapter = new GuzzleHttpAdapter(new Client);
$this->musicBrainz = new MusicBrainz($this->guzzleHttpAdapter);
}
public function test()
{
$recordingFilter = new RecordingFilter;
$recordingFilter->addArtistNameWithoutAccents(new Name('Ella Fitzgerald'));
$recordingFilter->addRecordingNameWithoutAccents(new Name('Summertime'));
$pageFilter = new PageFilter(0, 10);
$trackList = $this->musicBrainz->api()->search()->recording($recordingFilter, $pageFilter);
dd($trackList[0]);
}
public function get_track_metadata(Request $request)
{
$title = $request->title;
$album = $request->album;
$artist = $request->artist;
$length = $request->length;
$recordingFilter = new RecordingFilter;
if (!empty($title)) {
$recordingFilter->addRecordingNameWithoutAccents(new Name($title));
}
if (!empty($album)) {
$recordingFilter->addReleaseName(new Name($album));
}
if (!empty($artist)) {
$recordingFilter->addArtistNameWithoutAccents(new Name($artist));
}
if (!empty($length)) {
$recordingFilter->addLength(new Length($length));
}
$pageFilter = new PageFilter(0, 10);
$trackList = $this->musicBrainz->api()->search()->recording($recordingFilter, $pageFilter);
//return json_encode(serialize($trackList));
$response = [];
foreach ($trackList as $key => $track) {
$recording = $track->getRecording();
$response[] = [
'title' => (string) $recording->getTitle(),
'artist' => (string) $recording->getArtistCredits()[0]->getName(),
'release' => (string) $recording->getReleases()[0]->getTitle(),
'length' => (string) $recording->getLength()
];
}
return response()->json($response);
}
}