首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 解析優酷、土豆視頻頁面鏈接提取 SWF 播放器地址

     編輯:PHP 綜合知識

專案需求:使用者提交優酷、土豆視頻的分享頁面或 SWF 直連,後端自動識別並提取標準 SWF 播放器地址供前端嵌入。本文提供一個私有方法 _getSwf() 實現此邏輯。

核心代碼

<?php
/**
 * 根據用戶提交的 URL 獲取優酷、土豆標準 SWF 播放地址
 * @param string $url 用戶輸入的視頻鏈接
 * @return string|false SWF 地址或 false
 */
private function _getSwf($url = '') {
    if (empty($url)) return false;

    // 解析域名與路徑
    preg_match_all('/http:\/\/(.*?)?\.(.*?)?\.com\/(.*)/', $url, $types);
    if (empty($types[1][0])) return false;

    $domain = $types[1][0]; // 子域名
    $type   = $types[2][0]; // 主域名
    $path   = $types[3][0]; // 路徑
    $isswf  = (strpos($path, 'v.swf') !== false);
    $method = substr($path, 0, 1); // 首字母判斷類型

    switch ($type) {
        case 'youku':
            if ($domain === 'player') {
                // 已是播放器直連
                $swf = $url;
            } elseif ($domain === 'v') {
                // 視頻頁面:https://v.youku.com/v_show/id_XXXX.html
                preg_match_all('/http:\/\/v\.youku\.com\/v_show\/id_(.*?)\.html/', $url, $url_array);
                $vid = str_replace('/', '', $url_array[1][0]);
                $swf = 'https://player.youku.com/player.php/sid/' . $vid . '/v.swf';
            } else {
                $swf = $url; // 其他情況原樣返回
            }
            break;

        case 'tudou':
            if ($isswf) {
                $swf = $url; // 已是 SWF
            } else {
                // 頁面鏈接:https://www.tudou.com/(p|v|...)/ID/
                $method = ($method === 'p') ? 'v' : $method; // 統一轉 v
                preg_match_all('/http:\/\/www\.tudou\.com\/(.*?)\/(.*?)/', $url, $url_array);
                $segments = explode('/', $url_array[1][0]);
                $count = count($segments);

                if ($count === 1) {
                    $id = explode('.', $url_array[2][0])[0];
                } elseif ($count === 2) {
                    $id = $segments[1];
                } elseif ($count === 3) {
                    $id = $segments[2];
                } else {
                    return false;
                }
                $swf = 'https://www.tudou.com/' . $method . '/' . $id . '/v.swf';
            }
            break;

        default:
            $swf = $url; // 不支援站點原樣返回
            break;
    }

    return $swf;
}
?>

支援鏈接格式對照

平台輸入格式輸出 SWF 格式
優酷https://v.youku.com/v_show/id_XMTIzNDU2.htmlhttps://player.youku.com/player.php/sid/XMTIzNDU2/v.swf
優酷https://player.youku.com/player.php/sid/XXX/v.swf原樣返回
土豆https://www.tudou.com/v/abcdefg/https://www.tudou.com/v/abcdefg/v.swf
土豆https://www.tudou.com/p/abcdefg.htmlhttps://www.tudou.com/v/abcdefg/v.swf
土豆https://www.tudou.com/xxx/yyy/abcdefg/https://www.tudou.com/v/abcdefg/v.swf

待完善項目

  • 支援 HTTPS 協議;
  • 新增騰訊視頻、搜狐視頻、Bilibili 等平台;
  • 使用官方 API(如優酷 Open API)獲取更穩定的播放地址、清晰度選項;
  • 加入視頻 ID 合法性驗證與異常處理;
  • 支援 HTML5 播放器嵌入代碼(iframe)獲取,逐步淘汰 SWF。

注意:視頻網站播放器地址規則常變,建議建立配置檔管理正則規則,便於熱更新,避免硬編碼頻繁改動代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved