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

PHP 解析國內主流視頻網站信息工具類:優酷、騰訊、愛奇藝、B站等支援

     編輯:PHP 綜合知識

專案簡介

VideoUrlParser 是一個 PHP 工具類,支援從國內主流視頻網站(優酷、騰訊視頻、愛奇藝、B站、西瓜視頻、抖音、快手等)的分享頁面 URL 中提取:

  • 視頻標題
  • 縮略圖 URL
  • 播放頁面 URL
  • 嵌入播放器代碼
  • 直鏈(部分站點支援)

適用場景:CMS 視頻聚合、編輯器自動嵌入、資料採集、前端無需載入重型 SDK 即可預覽。

安裝與使用

# Composer 安裝(假設已發布至 Packagist)
composer require your-vendor/video-url-parser

# 或直接下載 VideoUrlParser.php 放入專案
require_once 'VideoUrlParser.php';

use VideoUrlParser\VideoUrlParser;

$url = 'https://v.youku.com/v_show/id_XMjkwMzc0Njg4.html';
$info = VideoUrlParser::parse($url);

if ($info) {
    echo "標題: {$info['title']}\n";
    echo "縮略圖: {$info['img']}\n";
    echo "播放頁: {$info['url']}\n";
    echo "嵌入碼: {$info['embed']}\n";
} else {
    echo "不支援的網站或解析失敗\n";
}

支援站點與 URL 範例

站點支援 URL 格式範例備註
優酷https://v.youku.com/v_show/id_X...html支援播放列表、單視頻
騰訊視頻https://v.qq.com/x/cover/...html, https://v.qq.com/x/page/...html需解析 vid、cid 參數
愛奇藝https://www.iqiyi.com/v_...html, https://www.iqiyi.com/w_...html支援專輯、單集
B站https://www.bilibili.com/video/BV.../, https://b23.tv/.../支援 BV/AV 號、短鏈接
西瓜視頻https://www.ixigua.com/.../字節系,解析較複雜
抖音/快手https://v.douyin.com/.../, https://www.kuaishou.com/short-video/.../需處理重定向、簽名參數
微博視頻https://video.weibo.com/show?fid=...支援二級頁面

核心原理解析

1. 策略模式:每站點一個解析器

<?php
namespace VideoUrlParser;

abstract class BaseParser {
    abstract public function parse(string $url): ?array;
    protected function fetch(string $url): string { /* curl + gzip 解壓 */ }
    protected function extractJson(string $html, string $pattern): ?array { /* 正則提取 JSON */ }
}

class YoukuParser extends BaseParser { /* 實作優酷邏輯 */ }
class QqParser extends BaseParser { /* 實作騰訊邏輯 */ }
// ...

class VideoUrlParser {
    private static array $parsers = [
        'youku.com' => YoukuParser::class,
        'v.qq.com'  => QqParser::class,
        // ...
    ];

    public static function parse(string $url): ?array {
        $host = parse_url($url, PHP_URL_HOST) ?? '';
        foreach (self::$parsers as $domain => $class) {
            if (str_contains($host, $domain)) {
                return (new $class())->parse($url);
            }
        }
        return null;
    }
}
?>

2. 通用網路層:支援 curl、file_get_contents、Swoole 協程

<?php
private function fetch(string $url): string {
    // 優先使用 curl(支援 cookie、header、proxy、timeout 控制)
    if (function_exists('curl_init')) {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_MAXREDIRS      => 5,
            CURLOPT_CONNECTTIMEOUT => 5,
            CURLOPT_TIMEOUT        => 15,
            CURLOPT_USERAGENT      => self::UA,
            CURLOPT_ENCODING       => 'gzip,deflate', // 自動解壓
            CURLOPT_SSL_VERIFYPEER => false,          // 開發環境可關閉驗證
        ]);
        $html = curl_exec($ch);
        curl_close($ch);
        if ($html !== false) return $html;
    }
    // 降級:file_get_contents (需 allow_url_fopen=On)
    return @file_get_contents($url) ?: '';
}
?>

3. 反爬蟲應對策略

  • User-Agent 池:輪換常見瀏覽器 UA。
  • Cookie 管理:部分站點需登入 Cookie 才能獲取高清資訊,提供 setCookies() 介面。
  • IP 代理池:大量採集時搭配代理 IP 防封禁。
  • 無頭瀏覽器降級:極少數重度 JS 渲染站點(如抖音 Web 版)可選用 Puppeteer/Playwright 服務端渲染後再解析。

進階功能:獲取真實播放鏈接

大多數站點已加密播放鏈接(m3u8、flv、mp4 簽名、DRM),僅靠解析分享頁無法直接獲取直鏈。若需真實播放地址,建議:

  1. 使用官方開放平台 API(優酷開放平台、騰訊雲點播、B站 API)。
  2. 或整合 you-get、yt-dlp 等成熟下載工具作為後端服務:
<?php
// 呼叫 yt-dlp 獲取直鏈(需伺服器安裝 yt-dlp)
function getDirectUrl(string $pageUrl): ?string {
    $cmd = escapeshellcmd("yt-dlp -g --no-playlist '$pageUrl'");
    $output = shell_exec($cmd);
    return trim($output) ?: null;
}
?>

常見問題與排查

問題原因解決方案
解析返回 null域名不在支援列表 / URL 格式變更檢查 $host 是否匹配;提交 Issue 或自行擴充解析器
標題/縮略圖為空頁面結構變更 / 需登入 / 反爬攔截更新正則/JSON 提取邏輯;注入有效 Cookie
獲取不到 embed 代碼站點已棄用 Flash embed,改用 iframe/JS SDK改用官方 iframe 嵌入代碼生成邏輯
請求超時/失敗網路不通 / 伺服器在國外 / 防火牆攔截增加 timeout、配置 proxy、使用國內鏡像節點

擴充指南:新增支援站點

  1. 建立 NewSiteParser.php 繼承 BaseParser。
  2. 實作 parse():分析目標站點分享頁 HTML/JSON/JS 變數,提取所需欄位。
  3. 在 VideoUrlParser::$parsers 註冊域名映射。
  4. 編寫單元測試覆蓋 3+ 種 URL 格式。

法律與合規提醒

僅供學習研究與個人非商業用途。商業聚合請申請各平台開放平台授權,遵守《著作權法》、《網絡安全法》及平台服務條款。請勿大規模爬取、儲存、分發受版權保護的視頻內容。

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