calliostro/lastfm-client
Lightweight Last.fm API client for PHP 8.1+ with clean, modern methods for artists, albums, tracks, search, and charts. Uses Guzzle and supports API-key access for all calls plus session authentication for write actions like scrobbling and loving tracks.
🚀 MINIMAL YET POWERFUL! Focused, lightweight Last.fm API client — as compact as possible while maintaining modern PHP comfort and clean APIs.
composer require calliostro/lastfm-client
For ALL API calls: Registration required
For write operations: Session authentication required
Read-only data (API key required for all methods):
$lastfm = LastFmClientFactory::createWithApiKey('your-api-key', 'your-secret');
$artist = $lastfm->getArtistInfo('Billie Eilish'); // Get artist info
$release = $lastfm->getAlbumInfo('The Weeknd', 'Dawn FM'); // Album info
$charts = $lastfm->getTopArtistsChart(); // Global charts
Search with API credentials:
$lastfm = LastFmClientFactory::createWithApiKey('your-api-key', 'your-secret');
// Positional parameters (traditional)
$results = $lastfm->searchArtists('Taylor Swift', 20);
$tracks = $lastfm->searchTracks('Anti-Hero', 'Taylor Swift');
// Named parameters (PHP 8.0+, recommended for clarity)
$results = $lastfm->searchArtists(artist: 'Taylor Swift', limit: 20);
$tracks = $lastfm->searchTracks(track: 'Anti-Hero', artist: 'Taylor Swift');
Your scrobbles (session authentication):
$lastfm = LastFmClientFactory::createWithSession('your-api-key', 'your-secret', 'your-session-key');
$collection = $lastfm->getUserRecentTracks('your-username');
$loved = $lastfm->getUserLovedTracks('your-username');
// Scrobble and love tracks with named parameters
$lastfm->scrobbleTrack(
artist: 'Bad Bunny',
track: 'Un Verano Sin Ti',
timestamp: time()
);
Multi-user apps (mobile auth):
$lastfm = LastFmClientFactory::createWithMobileAuth('your-api-key', 'your-secret', 'your-username', 'your-password');
$identity = $lastfm->getUserInfo();
getArtistInfo('Billie Eilish') with named parameter supportAll Last.fm API endpoints are supported with clean documentation — see Last.fm API Documentation for complete method reference
💡 Note: Some endpoints require authentication (scrobbling, user libraries) or specific permissions.
Simple (works out of the box):
use Calliostro\LastFm\LastFmClientFactory;
$lastfm = LastFmClientFactory::createWithApiKey('your-api-key', 'your-secret');
Advanced (middleware, custom options, etc.):
use Calliostro\LastFm\LastFmClientFactory;
use GuzzleHttp\{HandlerStack, Middleware};
$handler = HandlerStack::create();
$handler->push(Middleware::retry(
fn ($retries, $request, $response) => $retries < 3 && $response?->getStatusCode() === 429,
fn ($retries) => 1000 * 2 ** ($retries + 1) // Rate limit handling
));
$lastfm = LastFmClientFactory::createWithApiKey('your-api-key', 'your-secret', [
'timeout' => 30,
'handler' => $handler,
'headers' => [
'User-Agent' => 'MyApp/1.0 (+https://myapp.com)',
]
]);
💡 Note: By default, the client uses
LastFmClient/2.0.0 +https://github.com/calliostro/lastfm-clientas User-Agent. You can override this by setting custom headers as shown above.
Get credentials at Last.fm API Registration.
| What you want to do | Method | What you need |
|---|---|---|
| Get artist/track/chart info | createWithApiKey() |
API key + secret |
| Search the database | createWithApiKey() |
API key + secret |
| Scrobble tracks | createWithSession() |
API key + secret + session |
| Access user collections | createWithSession() |
API key + secret + session |
| Mobile app | createWithMobileAuth() |
API key + secret + user/pass |
Step 1: authorize.php – Redirect user to Last.fm
<?php
// authorize.php
use Calliostro\LastFm\AuthHelper;
$apiKey = 'your-api-key';
$secret = 'your-secret';
$callbackUrl = 'https://yourapp.com/callback.php';
$auth = new AuthHelper($apiKey, $secret);
// For web apps, you can skip token generation and redirect directly:
$authUrl = "https://www.last.fm/api/auth/?api_key={$apiKey}&cb=" . urlencode($callbackUrl);
// For desktop apps, generate token first:
// $tokenData = $auth->getToken();
// $authUrl = $auth->getAuthorizationUrl($tokenData['token']);
header("Location: {$authUrl}");
exit;
Step 2: callback.php – Handle Last.fm callback
<?php
// callback.php
require __DIR__ . '/vendor/autoload.php';
use Calliostro\LastFm\{AuthHelper, LastFmClientFactory};
$apiKey = 'your-api-key';
$secret = 'your-secret';
$token = $_GET['token'];
$auth = new AuthHelper($apiKey, $secret);
$sessionData = $auth->getSession($token);
$sessionKey = $sessionData['session']['key'];
$username = $sessionData['session']['name'];
// Store tokens for future use
$_SESSION['lastfm_session_key'] = $sessionKey;
$_SESSION['lastfm_username'] = $username;
$lastfm = LastFmClientFactory::createWithSession($apiKey, $secret, $sessionKey);
$user = $lastfm->getUserInfo();
echo "Hello " . $user['user']['name'];
Contributions are welcome! See DEVELOPMENT.md for detailed setup instructions, testing guide, and development workflow.
MIT License – see LICENSE file.
⭐ Star this repo if you find it useful!
How can I help you explore Laravel packages today?