FSWikiのyoutubeプラグイン改良版2020。HTML5対応

※2016/7/29 自腹で購入したZenFone 3 ZE520KL実機にて検証し、当Wikiの内容を最新情報に更新しました!少しでもご参考になりましたら幸いです。 (おすすめコンテンツ:LINE、Gmail、IP電話等アプリの常駐・プッシュ受信設定まとめ

FSWikiのyoutubeプラグイン改良版

当wikiでは、Youtubeの埋め込みに、以下のプラグインを利用していた。
http://fswiki.osdn.jp/cgi-bin/wiki.cgi?page=BugTrack-plugin%2F300

ところがyoutubeの仕様変更(というかChromeの仕様変更?)により、タブレット端末でYoutubeの埋め込みページ(例:zenfone3基本事項)を表示すると、flashファイルであるswfファイルが強制的にダウンロードされる不具合が出るようになってしまった。
そこで、自分で改良を施した。

以下をコピペでOK

YouTube.pm

###############################################################################
#
# <p>指定したidのYouTube動画を張ります。</p>
# <pre>
#   {{youtube id}}
# </pre>
# <p>
# 表示サイズを指定することもできます。標準は425x300です。
# <pre>
#   {{youtube id, 320, 240}}
# </pre>
# <p>
#
###############################################################################
package plugin::youtube::YouTube;
use strict;
use LWP::UserAgent;

#==============================================================================
# コンストラクタ
#==============================================================================
sub new {
	my $class = shift;
	my $self = {};
	return bless $self,$class;
}
#==============================================================================
# パラグラフメソッド
#==============================================================================

# ================================================================================
sub getYouTubeVideoID  {

  my ($str) = @_;

  if (!($str =~ m/https:\/\/www\.youtube\.com\/watch\?/) &&
      !($str =~ m/https:\/\/jp\.youtube\.com\/watch\?/) ) {
      return $str;
  }

  my $vid = "";
  my @ar = split(/\?/, $str);

  return "" if($ar[1] eq "");

  my @ar2 = split(/\&/, $ar[1]);

  my $i;
  for ($i=0; $i< $#ar2+1; $i++){
    if ($ar2[$i] =~ m/^v=/) {
      $vid = substr($ar2[$i], 2, length($ar2[$i])-2);
    }
  }

  return $vid;
}

sub embed_youtube
{
    my $item   = shift;
    my $width  = shift;
    my $height = shift;

    my $id = &getYouTubeVideoID($item);

    my $src = "https://www.youtube.com/embed/" . $id;

    my $buf = "<iframe width=\"" . $width . "\" height=\"" . $height . "\" src=\"" . $src . "\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n";

    return $buf;
}

# ================================================================================
sub getNicoID
{
    my $item   = shift;
    my $id;

    if ( $item =~ m/https:\/\/www\.nicovideo\.jp\/watch\/(sm[0-9]*)/ ) {
	$id = $1;
    }

    return $id;
}

sub embed_nicovideo
{
    my $item   = shift;
    my $width  = shift;
    my $height = shift;

    my $nicoID = getNicoID($item);

    my $buf = "<iframe width=\"". $width . "\" height=\"". $height . "\" src=\"https://www.nicovideo.jp/thumb/" . $nicoID . "\" scrolling=\"no\" style=\"border:solid 1px #CCC;\" frameborder=\"0\"><a href=\"https://www.nicovideo.jp/watch/" . $nicoID . "\">【ニコニコ動画】</a></iframe>";

    return $buf;
}

sub paragraph {
	my $self   = shift;
	my $wiki   = shift;
	my $item   = shift;
	my $width  = shift;
	my $height = shift;

	my $buf = "";

	$item   = Util::escapeHTML($item);

	if (($item =~ m/^https:\/\/www\.nicovideo\.jp/ )) {
	    $width  = ($width  eq "")? 312 : int($width);
	    $height = ($height eq "")? 176 : int($height);
	    $buf    = embed_nicovideo($item, $width, $height);
	}

	else {
            # default : YouTube
	    $width  = ($width  eq "")? 360 : int($width);
	    $height = ($height eq "")? 355 : int($height);
	    $buf    = embed_youtube($item, $width, $height);
	}

	return $buf;

}



1;