plugins:mediatagg:mediatagg_code

NP_MediaTagG.php Source Code

<?php
/*
	License:GPL
	History:
		0.1a:   (2006-9-19)  inspired from NP_GoogleIt -> NP_ThumbnailAPI
		0.2a:   (2006-9-21)  custum NP_ThumbnailAPI -> NP_mediaTagG, call YouTube Movie.
		0.3a:   (2006-10-22) call Google Video.
		0.31a:  (2006-11-06) bug fix.
		0.32a:  (2006-11-06) Rule Cange.
		0.321a: (2007-1-30)  bug fix.
		0.322a: (2007-5-08)  bug fix.
		0.33a:  (2007-6-13)  call MySpace Video.
		0.331a: (2007-6-17)  add Action Script code. allowScriptAccess=never, allowNetworking=internal. and etc.
		0.34a:  (2007-7-26)  call ImgRed image.
		0.35a:  (2007-8-26)  call QRcode image.
		0.354a: (2008-9-20)  bug fixed, add Youtube high quality mode(fmt=18), change ytid rule, delete ImgRad function.
		0.355a: (2008-11-16) add Youtube high quality mode(fmt=22), Add write option.
		0.358a: (2008-11-24) add option(ytrel). Add write option what start time($starttime), change all XHTML code.
		0.4a:   (2010-12-08) cgabge the nucleus plugin API code rule,<%youtube%> remove google video method. Add http://embedplus.com code to Youtube XHTML code.
		0.42a:  (2011-1-18)  escape http://embedplus.com code to Youtube XHTML code.
*/
 
class NP_mediaTagG extends NucleusPlugin {
	function getName() { return 'mediaTagG'; }
	function getAuthor() { return 'floors'; }
	function getURL() { return 'http://japan.nucleuscms.org/wiki/plugins:mediatagg'; }
	function getVersion() { return '0.42a'; }
	function getDescription() { return 'Call API Thumbnail usage:<%tmb(uri)%><br />
					Call API QR code Image usage:<%QR(uri)%><br />
					Call YouTube FLASH Video usage:<%Youtube(uri)%><br />
					Call MySpace Video usage:<%msVideo(uri)%>
					'; }
	function supportsFeature($what) { switch($what) { case 'SqlTablePrefix': return 1; default: return 0; } }
 
 
	function install() {
 
		// Thumbnail オプション
		$this->createOption('apitag','サムネイル呼び出しURL(空白の場合はサムネイル無しでテキストリンク)','text','http://mozshot.nemui.org/shot/large?');
		$this->createOption('tmbwidth','サムネイルの最大横幅(width)','text','256','numerical=true');
		$this->createOption('tmbheight','サムネイルの最大縦幅(hight)','text','256','numerical=true');
		$this->createOption('tmbalt','サムネイルのimgタグ内へ挿入するタグ','text','alt="サイト画像" border="0"');
		$this->createOption('tmbbefore','サムネイルの前に挿入するタグ','text','<div class="tmbAPI">');
		$this->createOption('tmbafter','サムネイルの後に挿入するタグ','text','</div>');
 
		// QRcode オプション
		$this->createOption('qrurl','QRコード画像呼び出しURL・前(空白の場合は引用画像無しでテキストリンク)','text','http://chart.apis.google.com/chart?chs=150x150&cht=qr&chl=');
		$this->createOption('qrbefore','QRコード画像の前に挿入するタグ','text','<div class="qrCode">');
		$this->createOption('qrafter','QRコード画像の後に挿入するタグ','text','</div>');
 
		// YouTube オプション
		$this->createOption('ytenable', 'YouTube 動画の呼び出しを有効にするか?(noの場合はテキストリンク)', 'yesno', 'yes');
		$this->createOption('ytautoplay','YouTube 動画を自動再生する', 'yesno', 'no');
		$this->createOption('ytloop','YouTube 動画をループ再生する', 'yesno', 'no');
		$this->createOption('ytrel','YouTube 動画を視聴後に関連動画を表示する', 'yesno', 'yes');
		$this->createOption('ytmp4','YouTube 高画質18モード(mp4)', 'yesno', 'no');
		$this->createOption('ytHD','YouTube 高画質22モード(HD)', 'yesno', 'no');
		$this->createOption('ytwidth','YouTube プレイヤーの横幅(width)','text','640','numerical=true');
		$this->createOption('ytpsize','YouTube プレイヤーのサイズ(16:9)','yesno','yes');
		$this->createOption('ytbg','YouTube プレイヤーの背景色(HTML bgcolor)','text','FFFFFF');
		$this->createOption('ytc1','YouTube プレイヤーの色1','text','');
		$this->createOption('ytc2','YouTube プレイヤーの色2','text','');
		$this->createOption('ytc3','YouTube プレイヤーの色(boder mode)', 'yesno', 'no');
		$this->createOption('ytbefore','YouTube Movieの前に挿入するタグ','text','<div class="youtubeVideo">');
		$this->createOption('ytafter','YouTube Movieの後に挿入するタグ','text','</div>');
 
		// MySpace Video オプション
		$this->createOption('msenable', 'MySpace Videoの呼び出しを有効にするか?(noの場合はテキストリンク)', 'yesno', 'yes');
		$this->createOption('mswidth','MySpace Videoの横幅(width)','text','480','numerical=true');
		$this->createOption('msheight','MySpace Videoの縦幅(hight)','text','386','numerical=true');
		$this->createOption('msbg','MySpace Videoの背景色(bgcolor)','text','FFFFFF');
		$this->createOption('msbefore','MySpace Videoの前に挿入するタグ','text','<div class="myspaceVideo">');
		$this->createOption('msafter','MySpace Videoの後に挿入するタグ','text','</div>');
	}
 
 
	function getEventList() {return array('PreItem');}
	function event_PreItem($data) {
		$this->currentItem = &$data["item"];
 
		$this->currentItem->body = preg_replace_callback("/\<\%tmb\((.*)\)\%\>/Us", array(&$this, 'tmbapi'), $this->currentItem->body);
		$this->currentItem->more = preg_replace_callback("/\<\%tmb\((.*)\)\%\>/Us", array(&$this, 'tmbapi'), $this->currentItem->more);
 
		$this->currentItem->body = preg_replace_callback("/\<\%QR\((.*)\)\%\>/Us", array(&$this, 'qrapi'), $this->currentItem->body);
		$this->currentItem->more = preg_replace_callback("/\<\%QR\((.*)\)\%\>/Us", array(&$this, 'qrapi'), $this->currentItem->more);
 
		$this->currentItem->body = preg_replace_callback("/\<\%Youtube\((.*)\)\%\>/Us", array(&$this, 'ytobj'), $this->currentItem->body);
		$this->currentItem->more = preg_replace_callback("/\<\%Youtube\((.*)\)\%\>/Us", array(&$this, 'ytobj'), $this->currentItem->more);
 
		$this->currentItem->body = preg_replace_callback("/\<\%msVideo\((.*)\)\%\>/Us", array(&$this, 'msobj'), $this->currentItem->body);
		$this->currentItem->more = preg_replace_callback("/\<\%msVideo\((.*)\)\%\>/Us", array(&$this, 'msobj'), $this->currentItem->more);
	}
 
 
 
  /**
   * 画像サムネイルを取得する関数
   * <%tmb(uri)%>
   * 
   */
	function tmbapi($matches){
		//サムネイルの呼び出しが無かった場合
		if($this->getOption('apitag') == ''){
			$text = '<a href="'.$matches[1].'" rel="nofollow">'.$matches[1].'</a>';
		} else {
		//サムネイルの呼び出しが有った場合
			$text = ''.$this->getOption('tmbbefore').'
<a href="'.$matches[1].'" style="border:none;" rel="nofollow">
<img src="'.$this->getOption('apitag').''.$matches[1].'" width="'.$this->getOption('tmbwidth').'" height="'.$this->getOption('tmbheight').'" '.$this->getOption('tmbalt').' />
</a>
'.$this->getOption('tmbafter').'';
		}
		return $text;
	}
 
 
 
  /**
   * QRコード画像を取得する関数
   * <%QR(uri)%>
   * 
   */
	function qrapi($matches){
		//引用画像の呼び出しが無かった場合
		if($this->getOption('qrurl') == ''){
			$text = '<a href="'.$matches[1].'" rel="nofollow">'.$matches[1].'</a>';
		} else {
		//引用画像の呼び出しが有った場合
			$text = ''.$this->getOption('qrbefore').'
<img src="'.$this->getOption('qrurl').''.$matches[1].'" />
'.$this->getOption('qrafter').'';
		}
		return $text;
	}
 
 
 
  /**
   * YouTubeの動画を取得する関数
   * <%Youtube(uri)%>
   * 
   */
	function ytobj($matches){
		//Youtube動画の呼び出しがnoの場合
		if($this->getOption('ytenable') == 'no'){
			$text = '<a href="'.$matches[1].'" rel="nofollow">'.$matches[1].'</a>';
		} else {
		//Youtube動画の呼び出しがyesの場合に、videoid(ytid)を抽出
			//$ytid = preg_replace('/.*v=([\d\w]+).*/', '$1', htmlspecialchars($matches[1],ENT_QUOTES,_CHARSET));
      $yturl = $matches[1];
      $ytid = substr(substr($yturl, 0, strpos($yturl, '&') ? strpos($yturl, '&') : strlen($yturl)), strpos($yturl, 'v=')+2, strlen($yturl));
 
			$ytarray = array();
			$ytarray = explode("|",$matches[1]);
 
			$uri = $ytarray[0];
			$qmode = (int) $ytarray[1];
      $starttime = (int) $ytarray[2];
 
 
      // プレーヤーサイズの計算
			if($this->getOption('ytpsize') == 'yes'){ // 16:9
  			if($this->getOption('ytwidth') == ''){
  				$pwidth = '480';
  				$pheight = '295';
  			} else {
  				$pwidth = $this->getOption('ytwidth');
  				$pheight = $pwidth * 0.5625 + 25;
  			}
      } else {
  			if($this->getOption('ytwidth') == ''){
  				$pwidth = '480';
  				$pheight = '385';
  			} else {
  				$pwidth = $this->getOption('ytwidth');
  				$pheight = $pwidth * 0.75 + 25;
  			}
  		}
 
      // mp4フォーマット
			if($this->getOption('ytmp4') == 'yes'){
				$defoqmode = '&amp;ap=%2526fmt%3D18';
			} else {
				$defoqmode = '';
			}
 
      // HDフォーマット
			if($this->getOption('ytHD') == 'yes'){
				$defoqmode = '&amp;ap=%2526fmt%3D22';
			}
 
      // デフォルトフォーマット
			if($qmode == '18'){
				$defoqmode = '&amp;ap=%2526fmt%3D18';
			} elseif($qmode == '22'){
				$defoqmode = '&amp;ap=%2526fmt%3D22';
			}
 
      // スタートタイム
			if(preg_match('/[0-9]+/',$starttime)){
				$time = '&amp;start='.$starttime;
			} else {
				$time = '';
			}
 
      // 自動再生
			if($this->getOption('ytautoplay') == 'no'){
				$autoplay = '';
			} else {
				$autoplay = '&amp;autoplay=1';
			}
 
      // ループ再生
			if($this->getOption('ytloop') == 'no'){
				$loop = '';
			} else {
				$loop = '&amp;loop=1';
			}
 
      // 関連動画表示
			if($this->getOption('ytrel') == 'no'){
				$rel = '&amp;rel=0';
			} else {
				$rel = '';
			}
 
			if($this->getOption('ytc1') === ''){
				$c1 = '';
			} else {
				$c1 = '&amp;color1=0x'.$this->getOption('ytc1');
			}
 
			if($this->getOption('ytc2') === ''){
				$c2 = '';
			} else {
				$c2 = '&amp;color2=0x'.$this->getOption('ytc2');
			}
 
			if($this->getOption('ytc3') == 'no'){
				$c3 = '';
			} else {
				$c3 = '&amp;border=1';
			}
 
			if($this->getOption('ytbg') == ''){
				$ytbg = '';
			} else {
				$ytbg1 = '<param name="bgcolor" value="#'.$this->getOption('ytbg').'" />';
        $ytbg2 = ' bgcolor="#'.$this->getOption('ytbg').'"';
			}
 
      $ytlang = '&amp;hl=ja_JP';
			$uri = "http://www.youtube.com/v/$ytid$defoqmode$time$autoplay$loop$c1$c2$c3$rel$ytlang";
 
			$text = ''.$this->getOption('ytbefore').'
<object width="'.$pwidth.'" height="'.$pheight.'">
<param name="movie" value="'.$uri.'" />
<param name="allowscriptaccess" value="always" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />'.$ytbg1.'
<embed src="'.$uri.'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'.$pwidth.'" height="'.$pheight.'"'.$ytbg2.'></embed>
</object>
'.$this->getOption('ytafter').'';
		}
		return $text;
	}
 
 
 
  /**
   * マイスペースの動画を取得する関数
   * <%msVideo(uri)%>
   * 
   */
	function msobj($matches){
		// MySpaceVideoの呼び出しがnoの場合
		if($this->getOption('msenable') == 'no'){
			$text = '<a href="'.$matches[1].'" rel="nofollow">'.$matches[1].'</a>';
		} else {
		// MySpaceVideoの呼び出しがyesの場合に、videoid(msid)を抽出
			$msid = substr($matches[1], 69);
			$text = ''.$this->getOption('msbefore').'
<object type="application/x-shockwave-flash" data="http://lads.myspace.com/videos/vplayer.swf" width="'.$this->getOption('mswidth').'" height="'.$this->getOption('msheight').'">
<p><a href="http://vids.myspace.com/index.cfm?fuseaction=vids.individual&videoid='.$msid.'">MySpace Video</a></p>
<param name="allowScriptAccess" value="never" />
<param name="allowNetworking" value="internal" />
<param name="wmode" value="transparent" />
<param name="quality" value="best" />
<param name="scale" value="noScale" />
<param name="bgcolor" value="#'.$this->getOption('msbg').'" />
<param name="movie" value="http://lads.myspace.com/videos/vplayer.swf" />
<param name="flashvars" value="m='.$msid.'&type=video" />
</object>
'.$this->getOption('msafter').'';
		}
		return $text;
	}
 
}
?>
 
plugins/mediatagg/mediatagg_code.txt · 最終更新: 2011/03/23 21:28 (外部編集)