わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

ニコ動のURLからブログ記事のアイキャッチを自動的に作成する方法

wordpressで、youtubeニコニコ動画からアイキャッチを自動生成する方法を探してたら↓の記事を見つけた。

YouTubeの動画からブログ記事のアイキャッチ画像を自動的に作成する方法

この記事を参考に『auto-post-thumbnail.php』の

// Get all images from post's body
 preg_match_all('/<\s*img [^\>]*src\s*=\s*[\""\']?([^\""\'>]*)/i', $post[0]->post_content, $matches);

の下に

if (empty($matches[0])) {
 preg_match('%(?:youtube\.com/(?:user/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $post[0]->post_content, $match);
 if (!empty($match[1])) {
 $matches=array(); $matches[0]=$matches[1]=array('http://i3.ytimg.com/vi/'.$match[1].'/hqdefault.jpg');
 }
}

を追記する事でYouTubeの動画が貼られた記事で自動でアイキャッチを作成することができた。

その勢いで正規表現部分とサムネ画像URL部分をいじればニコ動にも対応できるかなーと思い、

if (empty($matches[0])) {
 preg_match('/http:\/\/(?:www\.nicovideo\.jp\/watch|nico\.ms)\/[a-z][a-z](\d+)/', $post[0]->post_content, $match);
 if (!empty($match[1])) {
 $matches=array(); $matches[0]=$matches[1]=array('http://tn-skr.smilevideo.jp/smile?i='.$match[1]);
 }
}

といったコードを先程のYouTubeのコードの下に追記したが、うまく行かなかった。

色々とデバッグした結果、どうやら『function apt_generate_post_thumb』内でmimeタイプのチェックをしているが、これがファイルの拡張子でチェックしているため拡張子が偽装されているものについてはここで弾かれているようだった(ニコ動のサムネはファイル名に拡張子が無い)

ということで、ファイルデータから直接mimeタイプを取れるよう修正した(プラグインを直接編集するのは気が引けるが...)

編集内容は

// No file type! No point to proceed further
 if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) {
 return null;
}

という記述の

if (!$type || !$ext) {
 $finfo = finfo_open(FILEINFO_MIME_TYPE);
 $type = finfo_buffer($finfo, $file_data);
 $ext = "aaa";//なんでもいいから値入れる.
 finfo_close($finfo);
}

を書く。

これでニコ動のアイキャッチ生成にも対応できた。