| Current Path : /home/jeromecohp/www/plugins/system/yooessentials/modules/api/src/TikTok/ |
| Current File : /home/jeromecohp/www/plugins/system/yooessentials/modules/api/src/TikTok/TikTokApi.php |
<?php
/**
* @package Essentials YOOtheme Pro (Freemium) 2.0.19 build 1026.0920
* @author ZOOlanders https://www.zoolanders.com
* @copyright Copyright (C) Joolanders, SL
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
namespace ZOOlanders\YOOessentials\Api\TikTok;
use YOOtheme\Arr;
use YOOtheme\Http\Response;
use ZOOlanders\YOOessentials\Api\AbstractApi;
use ZOOlanders\YOOessentials\Auth\AuthOAuth;
class TikTokApi extends AbstractApi
{
protected const CLIENT_KEY = 'aw7gb56h2gkhl8a9';
// prettier-ignore
protected const VIDEO_FIELDS = ['create_time', 'cover_image_url', 'share_url', 'video_description', 'duration', 'height', 'width', 'id', 'title', 'embed_html', 'embed_link', 'like_count', 'comment_count', 'share_count', 'view_count'];
/** @var string */
protected $apiEndpoint = 'https://open-api.tiktok.com/';
/** @var AuthOAuth */
protected $account;
public function queryVideos(array $filters = []): array
{
$result = $this->post(
'video/query/',
[
'open_id' => $this->account->userId(),
'access_token' => $this->account->accessToken(),
'fields' => self::VIDEO_FIELDS,
'filters' => Arr::pick($filters, ['video_ids'])
]
);
return $result['videos'] ?? [];
}
public function listVideos(array $filter = []): array
{
$result = $this->post(
'video/list/',
[
'open_id' => $this->account->userId(),
'access_token' => $this->account->accessToken(),
'fields' => self::VIDEO_FIELDS
] + Arr::pick($filter, ['cursor', 'max_count'])
);
return $result['videos'] ?? [];
}
public function refreshAccessToken(string $refreshToken): array
{
return $this->processResponse(
$this->client->post(
$this->apiEndpoint . '/oauth/refresh_token/',
[
'client_key' => self::CLIENT_KEY,
'grant_type' => 'refresh_token',
'refresh_token' => $refreshToken,
],
[
'Content-Type' => 'application/x-www-form-urlencoded',
]
)
);
}
public function forAccount(AuthOAuth $account): self
{
$this->account = $account;
return $this;
}
protected function processResponse(Response $response): array
{
$result = json_decode($response->getBody(), true);
$success =
$response->getStatusCode() >= 200 && $response->getStatusCode() <= 299 && ($result['message'] ?? '') !== 'error';
if (!$success) {
$code = $result['error']['code'] ?? ($result['data']['error_code'] ?? ($response->getStatusCode() ?? 400));
$message =
$result['error']['message'] ??
($result['data']['description'] ??
($response->getReasonPhrase() ?? 'Unknown Error'));
throw new \Exception($message, $code);
}
return $result['data'];
}
}