魅力値7の堕落

ニコニコ動画のサムネイルを取得する

ニコニコ動画サイト内で、おすすすめ等に出てくる動画のサムネイルの画質が悪い!!

とういうことで、サムネイルを高画質にする拡張機能を作るため、サムネイル画像を取得するAPIを作ってみようとういうことです。

ニコニコ動画のOGPを取得する

OGPとは?

Twitter等にリンクを貼ると、画像と簡単な説明が出てきますね?
あれはリンク先のOGPが設定されてるからなんですね。

https://ogp.me/

<meta property="og:title" content="The Rock" />
<meta property="og:type" content="video.movie" />
<meta property="og:url" content="https://www.imdb.com/title/tt0117500/" />
<meta property="og:image" content="https://ia.media-imdb.com/images/rock.jpg" />

ニコニコ動画のOGPはなぜか高画質です。
OGPを取得を取得してみましょう!

ニコニコ動画のOGPは?

試しにJavaScriptでアクセスしましたが、それっぽいものはありませんでしたが、PHPで取得するとそれっぽいのがありました!

<meta property="og:video:tag" content="年忘れ動画">
<meta property="og:site_name" content="ニコニコ動画">
<meta property="og:url" content="https://www.nicovideo.jp/watch/sm38037909">
<meta property="og:image" content="https://img.cdn.nimg.jp/s/nicovideo/thumbnails/38037909/38037909.9969922.original/r1280x720l?key=b41c7149658370c12bb473da9dbfaafcd12337263f2ccd86ba327454c86c0438">

PHPで取得してみよう

$html = file_get_contents("http://www.nicovideo.jp/watch/sm38037909");

$dom = new DOMDocument('1.0', 'UTF-8');
$html = mb_convert_encoding($html, "HTML-ENTITIES", 'auto');
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions();
$OGimage = $xpath->query('//meta[@property="og:image"]');


echo $OGimage->item(0)->getAttribute("content");
結果
https://img.cdn.nimg.jp/s/nicovideo/thumbnails/38037909/38037909.9969922.original/r1280x720l?key=b41c7149658370c12bb473da9dbfaafcd12337263f2ccd86ba327454c86c0438

DOM操作してOGPのimageを取得しました!

URLを確認すると1280×720の高画質なサムネイルのURLが取得できてることが、確認できました

補遺

この高画質なサムネイルのURLはkeyプロパティが動画によって異なるようです。
故、ogpを一々取得する方法が一番有用です。

次回

PHPをAPI化して、JavaScriptで取得、ニコニコ動画内でサムネイルを高画質に!

関連記事