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); }
を書く。
これでニコ動のアイキャッチ生成にも対応できた。