【问题标题】:Allowing videos to be embedded into comments/text允许将视频嵌入到评论/文本中
【发布时间】:2010-12-05 00:08:52
【问题描述】:

wordpress 如何让您仅通过 url 嵌入 youtube/dailymotion/vimeo 视频?例如,如果您输入 [youtube=http://www.youtube.com/watch?v=cXXm696UbKY],视频将嵌入其中。 无论如何使用markdown在php中安全地做到这一点?

【问题讨论】:

    标签: php video youtube


    【解决方案1】:

    大多数(全部?)该视频平台都提供 oEmbed 支持。

    例如,对于 YouTube 视频 http://www.youtube.com/watch?v=cXXm696UbKY,它是 http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch%3Fv%cXXm696UbKY

    这将返回一个您可以使用json_decode 轻松解析的响应。

    {
        "provider_url": "http:\/\/www.youtube.com\/",
        "title": "Auto-Tune the News #8: dragons. geese. Michael Vick. (ft. T-Pain)",
        "html": "<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/bDOYN-6gdRE?fs=1\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/bDOYN-6gdRE?fs=1\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"><\/embed><\/object>",
        "author_name": "schmoyoho",
        "height": 344,
        "thumbnail_width": 480,
        "width": 425,
        "version": "1.0",
        "author_url": "http:\/\/www.youtube.com\/user\/schmoyoho",
        "provider_name": "YouTube",
        "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/bDOYN-6gdRE\/hqdefault.jpg",
        "type": "video",
        "thumbnail_height": 360
    }
    

    有趣的部分是html 属性。

    所以我们要做的就是在文本中搜索 [YouTube=...] 标签,提取 YouTube URL 并通过 oEmbed 检索嵌入代码。

    这是一个工作示例:

    <?php
    function getYouTubeCode($url)
    {
        $oembedUrl = 'http://www.youtube.com/oembed?url=' . urlencode($url);
    
        // The @-operator suppresses errors if the YouTube oEmbed service can't handle our request
        $data = @file_get_contents($oembedUrl);
    
        // If $data contains invalid JSON code, it will return null
        $data = json_decode($data);
    
        // So if $data is not an object now, we abort
        if (!is_object($data)) {
            return '';
        }
    
        // Otherwise we return the YouTube embed code
        return $data->html;
    }
    
    $text = '<h1>Hi There</h1><p>You gotta watch this video:</p><p>[YouTube=http://www.youtube.com/watch?v=cXXm696UbKY]</p>';
    
    $matches = array();
    
    // We scan the $text variable for all occurrences of "[YouTube=<Any character except right squared bracket>]"
    if (preg_match_all('/\[YouTube=([^\]]+)\]/i', $text, $matches, PREG_SET_ORDER)) {
        foreach ($matches as $match) {
            // Eg. $match[0] is "[YouTube=http://www.youtube.com/watch?v=cXXm696UbKY]"
            // and $match[1] is "http://www.youtube.com/watch?v=cXXm696UbKY"
            $text = str_replace($match[0], getYouTubeCode($match[1]), $text);
        }
    }
    
    echo $text;
    

    【讨论】:

    【解决方案2】:

    我真的不知道wordpress的问题,但基本逻辑是搜索url并将其转换为Youtube嵌入代码,添加它周围的东西!我认为preg_replace() 是您必须牢记的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2015-11-12
      • 2011-05-24
      • 2010-12-30
      • 2022-06-30
      • 2018-01-27
      • 1970-01-01
      相关资源
      最近更新 更多