96 lines
2.6 KiB
PHP
96 lines
2.6 KiB
PHP
<?php
|
|
namespace Uiharu\Lookup;
|
|
|
|
use RuntimeException;
|
|
use Uiharu\Url;
|
|
use Index\MediaType;
|
|
use Index\Colour\{Colour,ColourRgb};
|
|
|
|
final class YouTubeLookupResult implements \Uiharu\ILookupResult {
|
|
public function __construct(
|
|
private Url $url,
|
|
private string $videoId,
|
|
private object $videoInfo,
|
|
private array $urlQuery
|
|
) {}
|
|
|
|
public function getUrl(): Url {
|
|
return $this->url;
|
|
}
|
|
public function getObjectType(): string {
|
|
return 'youtube:video';
|
|
}
|
|
|
|
public function getYouTubeVideoId(): string {
|
|
return $this->videoId;
|
|
}
|
|
public function getYouTubeVideoInfo(): object {
|
|
return $this->videoInfo;
|
|
}
|
|
public function getYouTubeUrlQuery(): array {
|
|
return $this->urlQuery;
|
|
}
|
|
|
|
public function hasYouTubeVideoStartTime(): bool {
|
|
return isset($this->urlQuery['t']);
|
|
}
|
|
public function getYouTubeVideoStartTime(): string {
|
|
return $this->urlQuery['t'] ?? '';
|
|
}
|
|
|
|
public function hasYouTubePlayListId(): bool {
|
|
return isset($this->urlQuery['list']);
|
|
}
|
|
public function getYouTubePlayListId(): string {
|
|
return $this->urlQuery['list'] ?? '';
|
|
}
|
|
|
|
public function hasYouTubePlayListIndex(): bool {
|
|
return isset($this->urlQuery['index']);
|
|
}
|
|
public function getYouTubePlayListIndex(): string {
|
|
return $this->urlQuery['index'] ?? '';
|
|
}
|
|
|
|
public function hasMediaType(): bool {
|
|
return false;
|
|
}
|
|
public function getMediaType(): MediaType {
|
|
throw new RuntimeException('Unsupported');
|
|
}
|
|
|
|
public function hasColour(): bool {
|
|
return true;
|
|
}
|
|
public function getColour(): Colour {
|
|
return ColourRgb::fromRawRgb(0xFF0000);
|
|
}
|
|
|
|
public function hasTitle(): bool {
|
|
return !empty($this->videoInfo->items[0]->snippet->title);
|
|
}
|
|
public function getTitle(): string {
|
|
return $this->videoInfo->items[0]->snippet->title;
|
|
}
|
|
|
|
public function hasSiteName(): bool {
|
|
return true;
|
|
}
|
|
public function getSiteName(): string {
|
|
return 'YouTube';
|
|
}
|
|
|
|
public function hasDescription(): bool {
|
|
return !empty($this->videoInfo->items[0]->snippet->description);
|
|
}
|
|
public function getDescription(): string {
|
|
return $this->videoInfo->items[0]->snippet->description;
|
|
}
|
|
|
|
public function hasPreviewImage(): bool {
|
|
return !empty($this->videoInfo->items[0]->snippet->thumbnails->medium->url);
|
|
}
|
|
public function getPreviewImage(): string {
|
|
return $this->videoInfo->items[0]->snippet->thumbnails->medium->url;
|
|
}
|
|
}
|