php 正則實例 模版解析

下面是一個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 arrayarray("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(!$matreturn false;
 
            $html = self::_fget($url);
            preg_match("#videoId2\s*=\s*\'(\w+)\'#"$html$matches);
            if(!$matchesreturn 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;
}
發佈了34 篇原創文章 · 獲贊 14 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章