Skip to content

musiccompanion/AppleMusic

Repository files navigation

Apple Music SDK (non official)

Build Status codecov Type Coverage

This is a sdk to consume part of the Apple Music API.

Installation

composer require music-companion/apple-music

Usage

use MusicCompanion\AppleMusic\{
    SDK,
    Key,
};
use Innmind\OperatingSystem\Factory;
use Innmind\TimeContinuum\Earth\Period\Hour;
use Innmind\Url\Path;
use Innmind\Filesystem\Name;
use Innmind\Immutable\Set;

$os = Factory::build();

$sdk = SDK::of(
    $os->clock(),
    $os->remote()->http(),
    Key::of( // @see https://help.apple.com/developer-account/#/devce5522674 to understand howto generate the key
        'KEY_ID',
        'TEAM_ID',
        $os
            ->filesystem()
            ->mount(Path::of('config_dir/'))
            ->get(new Name('AuthKey_TEAM_ID.p8'))
            ->match(
                static fn($file) => $file->content(),
                static fn() => throw new \RuntimeException('Key file not found'),
            ),
    ),
    new Hour(1) // expire the generated token after an hour
);

$sdk->storefronts()->all(); // Set<SDK\Storefront>
$catalog = $sdk->catalog(new SDK\Storefront\Id('fr'));
$result = $catalog->search('Pendulum Live at Brixton');
$albums = $result->albums()->map($catalog->album(...));

// @see https://developer.apple.com/documentation/applemusicapi/getting_keys_and_creating_tokens
// to retrieve the user token
$sdk->library($userToken)->match(
    static fn($libray) => $libray->artists(), // Set<SDK\Library\Artist>
    static fn() => throw new \RuntimeException('Invalid user token'),
);