Added support for short nicovideo url and 'from' param.
This commit is contained in:
parent
2df60bd7ae
commit
29c466ddf3
3 changed files with 46 additions and 4 deletions
|
@ -176,8 +176,12 @@ final class v1_0 implements \Uiharu\IApi {
|
||||||
if($result instanceof NicoNicoLookupResult) {
|
if($result instanceof NicoNicoLookupResult) {
|
||||||
$resp->nicovideo_video_id = $result->getNicoNicoVideoId();
|
$resp->nicovideo_video_id = $result->getNicoNicoVideoId();
|
||||||
|
|
||||||
|
if($result->hasNicoNicoVideoStartTime())
|
||||||
|
$resp->nicovideo_start_time = $result->getNicoNicoVideoStartTime();
|
||||||
|
|
||||||
if(UIH_DEBUG) {
|
if(UIH_DEBUG) {
|
||||||
$resp->dbg_nicovideo_thumb_info = $result->getNicoNicoThumbInfo()->ownerDocument->saveXML();
|
$resp->dbg_nicovideo_thumb_info = $result->getNicoNicoThumbInfo()->ownerDocument->saveXML();
|
||||||
|
$resp->dbg_nicovideo_query = $result->getNicoNicoUrlQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,18 +6,43 @@ use RuntimeException;
|
||||||
use Uiharu\Url;
|
use Uiharu\Url;
|
||||||
|
|
||||||
final class NicoNicoLookup implements \Uiharu\ILookup {
|
final class NicoNicoLookup implements \Uiharu\ILookup {
|
||||||
|
private const SHORT_DOMAINS = [
|
||||||
|
'nico.ms',
|
||||||
|
'www.nico.ms',
|
||||||
|
];
|
||||||
|
|
||||||
|
private const LONG_DOMAINS = [
|
||||||
|
'www.nicovideo.jp',
|
||||||
|
'nicovideo.jp',
|
||||||
|
];
|
||||||
|
|
||||||
|
public static function isShortDomain(string $host): bool {
|
||||||
|
return in_array($host, self::SHORT_DOMAINS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function isLongDomain(string $host): bool {
|
||||||
|
return in_array($host, self::LONG_DOMAINS);
|
||||||
|
}
|
||||||
|
|
||||||
public function match(Url $url): bool {
|
public function match(Url $url): bool {
|
||||||
if(!$url->isWeb() || ($url->getHost() !== 'www.nicovideo.jp' && $url->getHost() !== 'nicovideo.jp'))
|
if(!$url->isWeb())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(str_starts_with($url->getPath(), '/watch/sm'))
|
if(self::isShortDomain($url->getHost()))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(self::isLongDomain($url->getHost()) && str_starts_with($url->getPath(), '/watch/sm'))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function lookup(Url $url): NicoNicoLookupResult {
|
public function lookup(Url $url): NicoNicoLookupResult {
|
||||||
$videoId = explode('/', trim($url->getPath(), '/'))[1] ?? '';
|
if(self::isShortDomain($url->getHost()))
|
||||||
|
$videoId = explode('/', trim($url->getPath(), '/'))[0] ?? '';
|
||||||
|
else
|
||||||
|
$videoId = explode('/', trim($url->getPath(), '/'))[1] ?? '';
|
||||||
|
|
||||||
if(empty($videoId))
|
if(empty($videoId))
|
||||||
throw new RuntimeException('Nico Nico Douga video id missing.');
|
throw new RuntimeException('Nico Nico Douga video id missing.');
|
||||||
|
|
||||||
|
@ -31,7 +56,9 @@ final class NicoNicoLookup implements \Uiharu\ILookup {
|
||||||
if(empty($thumbInfo))
|
if(empty($thumbInfo))
|
||||||
throw new RuntimeException('Nico Nico Douga thumb info missing from API result????');
|
throw new RuntimeException('Nico Nico Douga thumb info missing from API result????');
|
||||||
|
|
||||||
return new NicoNicoLookupResult($url, $videoId, $thumbInfo);
|
parse_str($url->getQuery(), $urlQuery);
|
||||||
|
|
||||||
|
return new NicoNicoLookupResult($url, $videoId, $thumbInfo, $urlQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function lookupThumbInfo(string $videoId): DOMDocument {
|
private static function lookupThumbInfo(string $videoId): DOMDocument {
|
||||||
|
|
|
@ -14,6 +14,7 @@ final class NicoNicoLookupResult implements \Uiharu\ILookupResult {
|
||||||
private Url $url,
|
private Url $url,
|
||||||
private string $videoId,
|
private string $videoId,
|
||||||
private DOMElement $thumbInfo,
|
private DOMElement $thumbInfo,
|
||||||
|
private array $urlQuery,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function getUrl(): Url {
|
public function getUrl(): Url {
|
||||||
|
@ -29,6 +30,16 @@ final class NicoNicoLookupResult implements \Uiharu\ILookupResult {
|
||||||
public function getNicoNicoThumbInfo(): DOMElement {
|
public function getNicoNicoThumbInfo(): DOMElement {
|
||||||
return $this->thumbInfo;
|
return $this->thumbInfo;
|
||||||
}
|
}
|
||||||
|
public function getNicoNicoUrlQuery(): array {
|
||||||
|
return $this->urlQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasNicoNicoVideoStartTime(): bool {
|
||||||
|
return isset($this->urlQuery['from']);
|
||||||
|
}
|
||||||
|
public function getNicoNicoVideoStartTime(): string {
|
||||||
|
return $this->urlQuery['from'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
public function hasMediaType(): bool {
|
public function hasMediaType(): bool {
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue