Файл: sngine-v2.8/Script/includes/libs/HybridAuth/Provider/Instagram.php
Строк: 148
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
* (c) 2020 Hybridauth authors | https://hybridauth.github.io/license.html
*/
namespace HybridauthProvider;
use HybridauthAdapterOAuth2;
use HybridauthDataCollection;
use HybridauthExceptionUnexpectedApiResponseException;
use HybridauthUser;
/**
* Instagram OAuth2 provider adapter via Instagram Basic Display API.
*/
class Instagram extends OAuth2
{
/**
* {@inheritdoc}
*/
protected $scope = 'user_profile,user_media';
/**
* {@inheritdoc}
*/
protected $apiBaseUrl = 'https://graph.instagram.com';
/**
* {@inheritdoc}
*/
protected $authorizeUrl = 'https://api.instagram.com/oauth/authorize';
/**
* {@inheritdoc}
*/
protected $accessTokenUrl = 'https://api.instagram.com/oauth/access_token';
/**
* {@inheritdoc}
*/
protected $apiDocumentation = 'https://developers.facebook.com/docs/instagram-basic-display-api';
/**
* {@inheritdoc}
*/
protected function initialize()
{
parent::initialize();
// The Instagram API requires an access_token from authenticated users
// for each endpoint.
$accessToken = $this->getStoredData($this->accessTokenName);
$this->apiRequestParameters[$this->accessTokenName] = $accessToken;
}
/**
* {@inheritdoc}
*/
public function getUserProfile()
{
$response = $this->apiRequest('me', 'GET', [
'fields' => 'id,username,account_type,media_count',
]);
$data = new Collection($response);
if (!$data->exists('id')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
$userProfile = new UserProfile();
$userProfile->identifier = $data->get('id');
$userProfile->displayName = $data->get('username');
$userProfile->profileURL = "https://instagram.com/{$userProfile->displayName}";
$userProfile->data = [
'account_type' => $data->get('account_type'),
'media_count' => $data->get('media_count'),
];
return $userProfile;
}
/**
* Fetch user medias.
*
* @param int $limit Number of elements per page.
* @param string $pageId Current pager ID.
* @param array|null $fields Fields to fetch per media.
*
* @return HybridauthDataCollection
*
* @throws HybridauthExceptionHttpClientFailureException
* @throws HybridauthExceptionHttpRequestFailedException
* @throws HybridauthExceptionInvalidAccessTokenException
* @throws HybridauthExceptionUnexpectedApiResponseException
*/
public function getUserMedia($limit = 12, $pageId = null, array $fields = null)
{
if (empty($fields)) {
$fields = [
'id',
'caption',
'media_type',
'media_url',
'thumbnail_url',
'permalink',
'timestamp',
'username',
];
}
$params = [
'fields' => implode(',', $fields),
'limit' => $limit,
];
if ($pageId !== null) {
$params['after'] = $pageId;
}
$response = $this->apiRequest('me/media', 'GET', $params);
$data = new Collection($response);
if (!$data->exists('data')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
return $data;
}
/**
* Fetches a single user's media.
*
* @param string $mediaId Media ID.
* @param array|null $fields Fields to fetch per media.
*
* @return HybridauthDataCollection
*
* @throws HybridauthExceptionHttpClientFailureException
* @throws HybridauthExceptionHttpRequestFailedException
* @throws HybridauthExceptionInvalidAccessTokenException
* @throws HybridauthExceptionUnexpectedApiResponseException
*/
public function getMedia($mediaId, array $fields = null)
{
if (empty($fields)) {
$fields = [
'id',
'caption',
'media_type',
'media_url',
'thumbnail_url',
'permalink',
'timestamp',
'username',
];
}
$response = $this->apiRequest($mediaId, 'GET', [
'fields' => implode(',', $fields),
]);
$data = new Collection($response);
if (!$data->exists('id')) {
throw new UnexpectedApiResponseException('Provider API returned an unexpected response.');
}
return $data;
}
}