From b074abcc0d79748f8cd9e0392758453df10db170 Mon Sep 17 00:00:00 2001 From: Bockiii Date: Sun, 30 May 2021 20:08:39 +0200 Subject: [PATCH] [AppleMusicBridge] Complete rebuild for new site (#2134) --- bridges/AppleMusicBridge.php | 76 +++++++++++++++--------------------- 1 file changed, 31 insertions(+), 45 deletions(-) diff --git a/bridges/AppleMusicBridge.php b/bridges/AppleMusicBridge.php index 6fc0c3dc..270bdf29 100644 --- a/bridges/AppleMusicBridge.php +++ b/bridges/AppleMusicBridge.php @@ -4,67 +4,53 @@ class AppleMusicBridge extends BridgeAbstract { const NAME = 'Apple Music'; const URI = 'https://www.apple.com'; const DESCRIPTION = 'Fetches the latest releases from an artist'; - const MAINTAINER = 'Limero'; + const MAINTAINER = 'bockiii'; const PARAMETERS = array(array( - 'url' => array( - 'name' => 'Artist URL', - 'exampleValue' => 'https://itunes.apple.com/us/artist/dunderpatrullen/329796274', + 'artist' => array( + 'name' => 'Artist ID', + 'exampleValue' => '909253', 'required' => true, ), - 'imgSize' => array( - 'name' => 'Image size for thumbnails (in px)', - 'type' => 'number', - 'defaultValue' => 512, + 'limit' => array( + 'name' => 'Latest X Releases (max 50)', + 'defaultValue' => '10', 'required' => true, - ) + ), )); const CACHE_TIMEOUT = 21600; // 6 hours - private $title; - public function collectData() { - $url = $this->getInput('url'); + # Limit the amount of releases to 50 + if ($this->getInput('limit') > 50) { + $limit = 50; + } else { + $limit = $this->getInput('limit'); + } + + $url = 'https://itunes.apple.com/lookup?id=' + . $this->getInput('artist') + . '&entity=album&limit=' + . $limit . + '&sort=recent'; $html = getSimpleHTMLDOM($url) or returnServerError('Could not request: ' . $url); - $imgSize = $this->getInput('imgSize'); - - $this->title = $html->find('title', 0)->innertext; - - // Grab the json data from the page - $html = $html->find('script[id=shoebox-ember-data-store]', 0); - $html = strstr($html, '{'); - $html = substr($html, 0, -9); $json = json_decode($html); - // Loop through each object - foreach ($json->included as $obj) { - if ($obj->type === 'lockup/album') { + foreach ($json->results as $obj) { + if ($obj->wrapperType === 'collection') { $this->items[] = array( - 'title' => $obj->attributes->artistName . ' - ' . $obj->attributes->name, - 'uri' => $obj->attributes->url, - 'timestamp' => $obj->attributes->releaseDate, - 'enclosures' => $obj->relationships->artwork->data->id, + 'title' => $obj->artistName . ' - ' . $obj->collectionName, + 'uri' => $obj->collectionViewUrl, + 'timestamp' => $obj->releaseDate, + 'enclosures' => $obj->artworkUrl100, + 'content' => '

' + . $obj->artistName . ' - ' . $obj->collectionName + . '
' + . $obj->copyright, ); - } elseif ($obj->type === 'image') { - $images[$obj->id] = $obj->attributes->url; } } - - // Add the images to each item - foreach ($this->items as &$item) { - $item['enclosures'] = array( - str_replace('{w}x{h}bb.{f}', $imgSize . 'x0w.jpg', $images[$item['enclosures']]), - ); - } - - // Sort the order to put the latest albums first - usort($this->items, function($a, $b){ - return $a['timestamp'] < $b['timestamp']; - }); - } - - public function getName() { - return $this->title ?: parent::getName(); } }