下面是一個php 模版解析的例子。
通過正則表達式將
{youku id_XMTc5ODgwOTA4} 轉對對應的播放代碼。
<?php
header(
'Content-type:text/html; charset=utf-8'
);
$template
= '
{youku id_XMTc5ODgwOTA4}
{youku id_XMzA5NTUwOTky}
{youku id_XMzEwMTQyMjA4}
{youku id_XMjYzNTE0MTA4}
{youku id_XMzEwNDMwODk2}
{youku id_XMjk4NjA3Njk2}
{youku id_XMjQ3ODQwNDYw}
{youku id_XMjk4MjA2NDI0}
{youku id_XMzEwNDIyMTY4}
{youku id_XMzA5ODUzMjI4}
{youku id_XMzEwMzMxNjc2}
{youku id_XMzEwMTk4Njky}
{youku id_XMTA3OTA4MzQw}
{youku id_XMjQ1NzI1ODcy}
{youku id_XMjI4Mzc0OTY0}
';
$cfgYouku
=
array
(
array
(
"rege"
=>
"/\s*\{youku\s*id_(.*)}\s*/i"
,
"callback"
=>
"compile"
));
foreach
(
$cfgYouku
as
$val
){
if
(isset(
$val
[
"callback"
]))
{
$template
= preg_replace_callback(
$val
[
"rege"
],
$val
[
"callback"
],
$template
);
}
}
/**
*
* forjobs
* @param unknown_type $matched
*/
function
compile(
$matched
)
{
$url
=
$matched
[0];
preg_match(
"/id\_(\w+)/"
,
$url
,
$matches
);
if
(
empty
(
$matches
)){
preg_match(
"#v_playlist\/#"
,
$url
,
$mat
);
if
(!
$mat
)
return
false;
$html
= self::_fget(
$url
);
preg_match(
"#videoId2\s*=\s*\'(\w+)\'#"
,
$html
,
$matches
);
if
(!
$matches
)
return
false;
}
$link
=
"http://v.youku.com/player/getPlayList/VideoIDS/{$matches[1]}/timezone/+08/version/5/source/out?password=&ran=2513&n=3"
;
$retval
= fileGetContent(
$link
);
if
(
$retval
) {
$json
= json_decode(
$retval
, true);
$data
[
'img'
] =
$json
[
'data'
][0][
'logo'
];
$data
[
'title'
] =
$json
[
'data'
][0][
'title'
];
$data
[
'url'
] =
$url
;
$data
[
'swf'
] =
"http://player.youku.com/player.php/sid/{$matches[1]}/v.swf"
;
if
(
$data
)
$data
[
'object'
] =
"<h2>"
.
$data
[
'title'
].
"</h2>"
.
"<embed src=\"{$data['swf']}\" quality=\"high\" width=\"480\" height=\"400\" align=\"middle\" allowNetworking=\"all\" allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\"></embed>"
;
return
$data
[
'object'
];
}
else
{
return
false;
}
}
/**
*
* @author murain
* @param String $url
*/
function
fileGetContent(
$url
)
{
$ch
= curl_init();
$timeout
= 10;
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURLOPT_CONNECTTIMEOUT,
$timeout
);
curl_setopt(
$ch
, CURLOPT_FOLLOWLOCATION, 1);
$contents
= trim(curl_exec(
$ch
));
curl_close(
$ch
);
return
$contents
;
}