70 lines
2.3 KiB
PHP
70 lines
2.3 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use Illuminate\Support\Facades\Cache;
|
||
|
use Illuminate\Support\Facades\Config;
|
||
|
use Illuminate\Support\Facades\Http;
|
||
|
use Illuminate\View\View;
|
||
|
|
||
|
class MusicController extends Controller
|
||
|
{
|
||
|
public function getCurrentTrack() {
|
||
|
// If it's already cached just return that
|
||
|
if (Cache::has('current_track')) {
|
||
|
return Cache::get('current_track');
|
||
|
}
|
||
|
|
||
|
$response = Http::withQueryParameters([
|
||
|
'method' => 'user.getrecenttracks',
|
||
|
'user' => Config::get('services.lastfm.user'),
|
||
|
'format' => 'json',
|
||
|
'nowplaying' => 'true',
|
||
|
'api_key' => Config::get('services.lastfm.key')
|
||
|
])->get('https://ws.audioscrobbler.com/2.0/');
|
||
|
$data = $response->json();
|
||
|
error_log($response->body());
|
||
|
$track_data = $data["recenttracks"]["track"][0];
|
||
|
$current_track = [
|
||
|
'title' => $track_data["name"],
|
||
|
'artist' => $track_data["artist"]["#text"],
|
||
|
'url' => $track_data["url"],
|
||
|
];
|
||
|
Cache::put('current_track', $current_track, now()->addSeconds(15));
|
||
|
return $current_track;
|
||
|
}
|
||
|
|
||
|
public function getTopTracks() {
|
||
|
// If it's already cached just return that
|
||
|
if (Cache::has('top_tracks')) {
|
||
|
return Cache::get('top_tracks');
|
||
|
}
|
||
|
|
||
|
$response = Http::withQueryParameters([
|
||
|
'method' => 'user.gettoptracks',
|
||
|
'user' => Config::get('services.lastfm.user'),
|
||
|
'format' => 'json',
|
||
|
'period' => '1month',
|
||
|
'limit' => 10,
|
||
|
'api_key' => Config::get('services.lastfm.key')
|
||
|
])->get('https://ws.audioscrobbler.com/2.0/');
|
||
|
$data = $response->json();
|
||
|
$topTracks = [];
|
||
|
foreach ($data["toptracks"]["track"] as $track) {
|
||
|
$topTracks[] = [
|
||
|
'title' => $track["name"],
|
||
|
'artist' => $track["artist"]["name"],
|
||
|
'url' => $track["url"],
|
||
|
'plays' => $track["playcount"],
|
||
|
];
|
||
|
}
|
||
|
Cache::put('top_tracks', $topTracks, now()->addSeconds(15));
|
||
|
return $topTracks;
|
||
|
}
|
||
|
public function show() : View {
|
||
|
return view('music')
|
||
|
->with('current_track', $this->getCurrentTrack())
|
||
|
->with('top_tracks', $this->getTopTracks());
|
||
|
}
|
||
|
}
|