Skip to content

Commit

Permalink
Merge pull request #840 from sjerdo/feature/spotify-provider
Browse files Browse the repository at this point in the history
Add Spotify OAuth2 provider
  • Loading branch information
ApacheEx committed Jun 14, 2017
2 parents 4faff28 + 750ea83 commit d9b54c6
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ Steam | Hybrid | [X] | [X] |
Discord | OAuth2 | [X] | [X] | | |
TwitchTV | OAuth2 | [X] | [X] | | |
Authentiq | OAuth2 | [X] | [X] | | |
Spotify | OAuth2 | [X] | [X] | | |

{% include callout.html content="Some providers such as Google and Yahoo may use multiple protocols for their APIs and as naming convention we append the protocol's name to the adapter's (Often the case with OpenID adapters as those might be subject to removal by providers in near future due to deprecation of the OpenID protocol)." type="default" %}

Expand Down
85 changes: 85 additions & 0 deletions src/Provider/Spotify.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/

namespace Hybridauth\Provider;

use Hybridauth\Adapter\OAuth2;
use Hybridauth\Exception\UnexpectedApiResponseException;
use Hybridauth\Data;
use Hybridauth\User;

/**
* Spotify OAuth2 provider adapter.
*/
class Spotify extends OAuth2
{

/**
* {@inheritdoc}
*/
public $scope = 'user-read-email';

/**
* {@inheritdoc}
*/
public $apiBaseUrl = 'https://api.spotify.com/v1/';

/**
* {@inheritdoc}
*/
public $authorizeUrl = 'https://accounts.spotify.com/authorize';

/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://accounts.spotify.com/api/token';

/**
* {@inheritdoc}
*/
public function getUserProfile()
{
$response = $this->apiRequest('me');

$data = new Data\Collection($response);

if (!$data->exists('id')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}

$userProfile = new User\Profile();

$userProfile->identifier = $data->get('id');
$userProfile->displayName = $data->get('display_name');
$userProfile->email = $data->get('email');
$userProfile->emailVerified = $data->get('email');
$userProfile->profileURL = $data->filter('external_urls')->get('spotify');
$userProfile->photoURL = $data->filter('images')->get('url');
$userProfile->country = $data->get('country');

if ($data->exists('birthdate')) {
$this->fetchBirthday($userProfile, $data->get('birthdate'));
}

return $userProfile;
}

/**
* Fetch use birthday
*/
protected function fetchBirthday($userProfile, $birthday)
{
$result = (new Data\Parser())->parseBirthday($birthday, '-');

$userProfile->birthDay = (int)$result[0];
$userProfile->birthMonth = (int)$result[1];
$userProfile->birthYear = (int)$result[2];

return $userProfile;
}

}

0 comments on commit d9b54c6

Please sign in to comment.